block/cciss: replace schedule_timeout() with
Subsystems (2)
PATCH 3/22 block/cciss: replace schedule_timeout() with
Hi,
Please consider applying.
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.
Description: 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.
drivers/block/cciss.c +7 -10
@@ -1729,17 +1729,15 @@ static int cciss_revalidate(struct gendistatic 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 ;
@@ -2512,8 +2510,7 @@ static int cciss_pci_init(ctlr_info_t *cif (!(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
_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors