aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid
diff options
context:
space:
mode:
authorMark Haverkamp <markh@osdl.org>2006-05-10 12:12:48 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-05-20 10:22:25 -0400
commit404d9a900b5bc83a3780ec337ca6fdcb04b766c0 (patch)
treecb43521e7ddd2e20cae26ed8b70ea77dab9bae79 /drivers/scsi/aacraid
parent3c1e0cca9469bd19590ade25f6d9f94da2710d5b (diff)
[SCSI] aacraid: adjustable timeouts
Received From Mark Salyzyn Add the ability to adjust for unusual corner case failures. Both of these additional module parameters deal with embedded, non-intel or complicated system scenarios. Aif_timeout can be increased past the default 2 minute timeout to drop application registrations when a system has an unusually high event load resulting from continuing management requests, or simultaneous builds, or sluggish user space as a result of system load. Startup_timeout can be increased past the default 3 minute timeout to drop an adapter initialization for systems that have a very large number of targets, or slow to spin-up targets, or a complicated set of array configurations that extend the time for the firmware to declare that it is operational. This timeout would only have an affect on non-intel based systems, as the (more patient) BIOS would generally be where the startup delay would be dealt with. Signed-off-by: Mark Haverkamp <markh@osdl.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r--drivers/scsi/aacraid/aachba.c6
-rw-r--r--drivers/scsi/aacraid/aacraid.h2
-rw-r--r--drivers/scsi/aacraid/commsup.c2
-rw-r--r--drivers/scsi/aacraid/rkt.c4
-rw-r--r--drivers/scsi/aacraid/rx.c4
-rw-r--r--drivers/scsi/aacraid/sa.c4
6 files changed, 15 insertions, 7 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 5d2989754c9f..be8dde4c0f0c 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -148,6 +148,8 @@ static int nondasd = -1;
148static int dacmode = -1; 148static int dacmode = -1;
149 149
150static int commit = -1; 150static int commit = -1;
151int startup_timeout = 180;
152int aif_timeout = 120;
151 153
152module_param(nondasd, int, S_IRUGO|S_IWUSR); 154module_param(nondasd, int, S_IRUGO|S_IWUSR);
153MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on"); 155MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on");
@@ -155,6 +157,10 @@ module_param(dacmode, int, S_IRUGO|S_IWUSR);
155MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on"); 157MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on");
156module_param(commit, int, S_IRUGO|S_IWUSR); 158module_param(commit, int, S_IRUGO|S_IWUSR);
157MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the adapter for foreign arrays.\nThis is typically needed in systems that do not have a BIOS. 0=off, 1=on"); 159MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the adapter for foreign arrays.\nThis is typically needed in systems that do not have a BIOS. 0=off, 1=on");
160module_param(startup_timeout, int, S_IRUGO|S_IWUSR);
161MODULE_PARM_DESC(startup_timeout, "The duration of time in seconds to wait for adapter to have it's kernel up and\nrunning. This is typically adjusted for large systems that do not have a BIOS.");
162module_param(aif_timeout, int, S_IRUGO|S_IWUSR);
163MODULE_PARM_DESC(aif_timeout, "The duration of time in seconds to wait for applications to pick up AIFs before\nderegistering them. This is typically adjusted for heavily burdened systems.");
158 164
159int numacb = -1; 165int numacb = -1;
160module_param(numacb, int, S_IRUGO|S_IWUSR); 166module_param(numacb, int, S_IRUGO|S_IWUSR);
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index f773b0dcfc95..ff5c380eae36 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -1815,3 +1815,5 @@ int aac_probe_container(struct aac_dev *dev, int cid);
1815extern int numacb; 1815extern int numacb;
1816extern int acbsize; 1816extern int acbsize;
1817extern char aac_driver_version[]; 1817extern char aac_driver_version[];
1818extern int startup_timeout;
1819extern int aif_timeout;
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 9f9f4aae23c0..1c83af3d0f3d 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1214,7 +1214,7 @@ int aac_command_thread(void *data)
1214 * since the last read off 1214 * since the last read off
1215 * the queue? 1215 * the queue?
1216 */ 1216 */
1217 if ((time_now - time_last) > 120) { 1217 if ((time_now - time_last) > aif_timeout) {
1218 entry = entry->next; 1218 entry = entry->next;
1219 aac_close_fib_context(dev, fibctx); 1219 aac_close_fib_context(dev, fibctx);
1220 continue; 1220 continue;
diff --git a/drivers/scsi/aacraid/rkt.c b/drivers/scsi/aacraid/rkt.c
index 7a23e027eb78..5b52966bbbf3 100644
--- a/drivers/scsi/aacraid/rkt.c
+++ b/drivers/scsi/aacraid/rkt.c
@@ -444,14 +444,14 @@ int aac_rkt_init(struct aac_dev *dev)
444 */ 444 */
445 while (!(rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING)) 445 while (!(rkt_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING))
446 { 446 {
447 if(time_after(jiffies, start+180*HZ)) 447 if(time_after(jiffies, start+startup_timeout*HZ))
448 { 448 {
449 status = rkt_readl(dev, MUnit.OMRx[0]); 449 status = rkt_readl(dev, MUnit.OMRx[0]);
450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n", 450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n",
451 dev->name, instance, status); 451 dev->name, instance, status);
452 goto error_iounmap; 452 goto error_iounmap;
453 } 453 }
454 schedule_timeout_uninterruptible(1); 454 msleep(1);
455 } 455 }
456 if (request_irq(dev->scsi_host_ptr->irq, aac_rkt_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0) 456 if (request_irq(dev->scsi_host_ptr->irq, aac_rkt_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0)
457 { 457 {
diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c
index 729b9eb268c2..9dadfb28b3f1 100644
--- a/drivers/scsi/aacraid/rx.c
+++ b/drivers/scsi/aacraid/rx.c
@@ -444,14 +444,14 @@ int aac_rx_init(struct aac_dev *dev)
444 while ((!(rx_readl(dev, IndexRegs.Mailbox[7]) & KERNEL_UP_AND_RUNNING)) 444 while ((!(rx_readl(dev, IndexRegs.Mailbox[7]) & KERNEL_UP_AND_RUNNING))
445 || (!(rx_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING))) 445 || (!(rx_readl(dev, MUnit.OMRx[0]) & KERNEL_UP_AND_RUNNING)))
446 { 446 {
447 if(time_after(jiffies, start+180*HZ)) 447 if(time_after(jiffies, start+startup_timeout*HZ))
448 { 448 {
449 status = rx_readl(dev, IndexRegs.Mailbox[7]); 449 status = rx_readl(dev, IndexRegs.Mailbox[7]);
450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n", 450 printk(KERN_ERR "%s%d: adapter kernel failed to start, init status = %lx.\n",
451 dev->name, instance, status); 451 dev->name, instance, status);
452 goto error_iounmap; 452 goto error_iounmap;
453 } 453 }
454 schedule_timeout_uninterruptible(1); 454 msleep(1);
455 } 455 }
456 if (request_irq(dev->scsi_host_ptr->irq, aac_rx_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0) 456 if (request_irq(dev->scsi_host_ptr->irq, aac_rx_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev)<0)
457 { 457 {
diff --git a/drivers/scsi/aacraid/sa.c b/drivers/scsi/aacraid/sa.c
index a53454908205..ecc47b605c58 100644
--- a/drivers/scsi/aacraid/sa.c
+++ b/drivers/scsi/aacraid/sa.c
@@ -318,13 +318,13 @@ int aac_sa_init(struct aac_dev *dev)
318 * Wait for the adapter to be up and running. Wait up to 3 minutes. 318 * Wait for the adapter to be up and running. Wait up to 3 minutes.
319 */ 319 */
320 while (!(sa_readl(dev, Mailbox7) & KERNEL_UP_AND_RUNNING)) { 320 while (!(sa_readl(dev, Mailbox7) & KERNEL_UP_AND_RUNNING)) {
321 if (time_after(jiffies, start+180*HZ)) { 321 if (time_after(jiffies, start+startup_timeout*HZ)) {
322 status = sa_readl(dev, Mailbox7); 322 status = sa_readl(dev, Mailbox7);
323 printk(KERN_WARNING "%s%d: adapter kernel failed to start, init status = %lx.\n", 323 printk(KERN_WARNING "%s%d: adapter kernel failed to start, init status = %lx.\n",
324 name, instance, status); 324 name, instance, status);
325 goto error_iounmap; 325 goto error_iounmap;
326 } 326 }
327 schedule_timeout_uninterruptible(1); 327 msleep(1);
328 } 328 }
329 329
330 if (request_irq(dev->scsi_host_ptr->irq, aac_sa_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev ) < 0) { 330 if (request_irq(dev->scsi_host_ptr->irq, aac_sa_intr, SA_SHIRQ|SA_INTERRUPT, "aacraid", (void *)dev ) < 0) {