From: Nishanth Aravamudan Subject: [KJ] [PATCH 3/22] block/cciss: replace schedule_timeout() with msleep() I used msleep(10) here under the presumption that the schedule_timeout(1) was written assuming that HZ=100 (as it used to be), which is equivalent to 10 milliseconds. If the desire is actually for 1 ms or the minimal sleep interval, then the patch can be changed appropriately. A similar assumption as to the constant delay value was made in the other replacement, which can also be appropriately adjusted. Change the delay logic in pollcomplete() to use msleep() and time_before(). Instead of assuming schedule_timeout() will sleep exactly as requested, use msleep(10) to guarantee minimally 10 millisecond increments and time_before() to guarantee stopping the loop as close to 20 seconds as possible. Also changes another occurrence of schedule_timeout() to msleep(). TASK_INTERRUPTIBLE is used in this case, but signals are not handled. Signed-off-by: Nishanth Aravamudan Acked-by: Mike Miller Signed-off-by: Domen Puncer --- cciss.c | 17 +++++++---------- 1 files changed, 7 insertions(+), 10 deletions(-) Index: quilt/drivers/block/cciss.c =================================================================== --- quilt.orig/drivers/block/cciss.c +++ quilt/drivers/block/cciss.c @@ -1712,17 +1712,15 @@ static int cciss_revalidate(struct gendi static unsigned long pollcomplete(int ctlr) { unsigned long done; - int i; + unsigned long end_jiffies = jiffies + 20 * HZ; /* Wait (up to 20 seconds) for a command to complete */ - - for (i = 20 * HZ; i > 0; i--) { + while (time_before(jiffies,end_jiffies)) { done = hba[ctlr]->access.command_completed(hba[ctlr]); - if (done == FIFO_EMPTY) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } else - return (done); + if (done == FIFO_EMPTY) + msleep(10); + else + return done; } /* Invalid address to tell caller we ran out of time */ return 1; @@ -2540,8 +2538,7 @@ static int cciss_pci_init(ctlr_info_t *c if (!(readl(c->vaddr + SA5_DOORBELL) & CFGTBL_ChangeReq)) break; /* delay and try again */ - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(10); + msleep(100); } #ifdef CCISS_DEBUG