All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch scsi] cciss: make fair timeouts during initialization
@ 2006-03-02  7:10 Konstantin Khorenko
  0 siblings, 0 replies; only message in thread
From: Konstantin Khorenko @ 2006-03-02  7:10 UTC (permalink / raw)
  To: Mike Miller
  Cc: Vasily Averin, linux-scsi, iss_storagedev, devel, Kirill Korotaev

[-- Attachment #1: Type: text/plain, Size: 1113 bytes --]

Patch makes fair initialization timeouts in cciss driver.

Signed-off-by: Konstantin Khorenko <khorenko@sw.ru>

-----------------------------------
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.

-- 
Best regards,

Konstantin Khorenko,
SWsoft, Inc.

[-- Attachment #2: diff-cciss-fair-init-timeouts --]
[-- Type: text/plain, Size: 1204 bytes --]

--- ./drivers/block/cciss.c.16-rc5	2006-03-01 11:13:03.000000000 +0300
+++ ./drivers/block/cciss.c	2006-03-02 09:30:38.000000000 +0300
@@ -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 <khorenko@sw.ru>

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2006-03-02  7:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-03-02  7:10 [patch scsi] cciss: make fair timeouts during initialization Konstantin Khorenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.