On Monday 24 September 2012, Chunhe Lan wrote: > OK. As you have mentioned, it would been modified to such: > > static inline void mmc_delay(unsigned int ms) > { > if (ms < 1000 / HZ) { > cond_resched(); > msleep(ms); > } else { > msleep(ms); > } > } This version would be rather broken, because it compares times in two different units (ms and jiffies), and because it does a cond_resched() directly before an msleep: both of which end up calling schedule() and being away for some time, cond_resched() for an unknown time, and msleep for a minimum time on top of that. > OR such: > > static inline void mmc_delay(unsigned int ms) > { > msleep(ms); > } That would be my preferred choice, unless someone has specific issues with this. > OR other code? Well, in principle, you could implement something like static inline void mmc_delay(unsigned int ms) { ktime_t end = ktime_add_us(ktime_get(), ms * 1000); while (1) { s64 remaining; cond_resched(); remaining = ktime_to_us(ktime_sub(end, ktime_get())); if (remaining < 0) break; udelay(min_t(u32, remaining, 100)); } } Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html