diff options
author | Mark Haverkamp <markh@osdl.org> | 2006-05-10 12:12:48 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-05-20 10:22:25 -0400 |
commit | 404d9a900b5bc83a3780ec337ca6fdcb04b766c0 (patch) | |
tree | cb43521e7ddd2e20cae26ed8b70ea77dab9bae79 /drivers/scsi/aacraid | |
parent | 3c1e0cca9469bd19590ade25f6d9f94da2710d5b (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.c | 6 | ||||
-rw-r--r-- | drivers/scsi/aacraid/aacraid.h | 2 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commsup.c | 2 | ||||
-rw-r--r-- | drivers/scsi/aacraid/rkt.c | 4 | ||||
-rw-r--r-- | drivers/scsi/aacraid/rx.c | 4 | ||||
-rw-r--r-- | drivers/scsi/aacraid/sa.c | 4 |
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; | |||
148 | static int dacmode = -1; | 148 | static int dacmode = -1; |
149 | 149 | ||
150 | static int commit = -1; | 150 | static int commit = -1; |
151 | int startup_timeout = 180; | ||
152 | int aif_timeout = 120; | ||
151 | 153 | ||
152 | module_param(nondasd, int, S_IRUGO|S_IWUSR); | 154 | module_param(nondasd, int, S_IRUGO|S_IWUSR); |
153 | MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on"); | 155 | MODULE_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); | |||
155 | MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on"); | 157 | MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on"); |
156 | module_param(commit, int, S_IRUGO|S_IWUSR); | 158 | module_param(commit, int, S_IRUGO|S_IWUSR); |
157 | MODULE_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"); | 159 | MODULE_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"); |
160 | module_param(startup_timeout, int, S_IRUGO|S_IWUSR); | ||
161 | MODULE_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."); | ||
162 | module_param(aif_timeout, int, S_IRUGO|S_IWUSR); | ||
163 | MODULE_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 | ||
159 | int numacb = -1; | 165 | int numacb = -1; |
160 | module_param(numacb, int, S_IRUGO|S_IWUSR); | 166 | module_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); | |||
1815 | extern int numacb; | 1815 | extern int numacb; |
1816 | extern int acbsize; | 1816 | extern int acbsize; |
1817 | extern char aac_driver_version[]; | 1817 | extern char aac_driver_version[]; |
1818 | extern int startup_timeout; | ||
1819 | extern 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) { |