Skip to contentSkip to conversation

cciss: make fair timeouts during initialization

PATCH New Konstantin Khorenko 1 participant 1 message Mar 2, 2006

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cciss: make fair timeouts during initialization

Patch makes fair initialization timeouts in cciss driver.

-----------------------------------
cciss driver has following code for timeouts during board initialization:

       ...
       for(i=0;i<MAX_CONFIG_WAIT;i++) {
               ...
               set_current_state(TASK_INTERRUPTIBLE);
               schedule_timeout(10);
       }
       ...

We compile cciss driver into the kernel and thus at the kernel boot schedule_timeout() returns very quickly and resulted timeouts became insufficient for correct board initialization. Particularly, we often got following error:
--
HP CISS Driver (v 2.6.8)
cciss: Device 0x46 has been found at bus 6 dev 1 func 0
cciss: unable to get board into simple mode
cciss: probe of 0000:06:01.0 failed with error -1
--

The patch is designed to make fair initialization timeouts.

----------
Hope, you'll check this changes and find them usefull. :) Kernel with patch was compiled and tested on two nodes. This patch is against mainstream 2.6.16-rc5 kernel.

Signature · 4 lines
Best regards,

Konstantin Khorenko,
SWsoft, Inc.
drivers/block/cciss.c renamed from drivers/block/cciss.c.16-rc5 +3 -5
@@ -1893,7 +1893,7 @@ static unsigned long pollcomplete(int ct
 	for (i = 20 * HZ; i > 0; i--) {
 		done = hba[ctlr]->access.command_completed(hba[ctlr]);
 		if (done == FIFO_EMPTY)
-			schedule_timeout_uninterruptible(1);
+			msleep(1);
 		else
 			return (done);
 	}
@@ -2817,8 +2817,7 @@ static int cciss_pci_init(ctlr_info_t *c
 		scratchpad = readl(c->vaddr + SA5_SCRATCHPAD_OFFSET);
 		if (scratchpad == CCISS_FIRMWARE_READY)
 			break;
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout(HZ / 10); /* wait 100ms */
+		msleep(100); /* wait 100ms */
 	}
 	if (scratchpad != CCISS_FIRMWARE_READY) {
 		printk(KERN_WARNING "cciss: Board not ready.  Timed out.\n");
@@ -2903,8 +2902,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(10);
 	}	
 
 #ifdef CCISS_DEBUG

#
# Patch makes fair initialization timeouts in cciss driver. #
# Signed-off-by: Konstantin Khorenko <[email protected]>