Skip to content

Commit

Permalink
[SCSI] ips soft lockup during reset/initialization
Browse files Browse the repository at this point in the history
Resetting the adapter causes the ServeRAID driver to exceed
the max time allowed by the softlock watchdog. Resetting the
hardware can easily require 30 or more seconds. To avoid the

    "BUG: soft lockup detected on CPU#0!"

result, this patch replaces the mdelay() calls in the
initialization/reset routines with msleep().

Signed-off-by: Jack Hammer <jack_hammer@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
Jack Hammer authored and James Bottomley committed Jan 26, 2006
1 parent 77427f5 commit 15084a4
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions drivers/scsi/ips.c
Original file line number Diff line number Diff line change
Expand Up @@ -5012,7 +5012,7 @@ ips_init_copperhead(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (j >= 45)
Expand All @@ -5038,7 +5038,7 @@ ips_init_copperhead(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (j >= 240)
Expand All @@ -5056,7 +5056,7 @@ ips_init_copperhead(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (i >= 240)
Expand Down Expand Up @@ -5106,7 +5106,7 @@ ips_init_copperhead_memio(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (j >= 45)
Expand All @@ -5132,7 +5132,7 @@ ips_init_copperhead_memio(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (j >= 240)
Expand All @@ -5150,7 +5150,7 @@ ips_init_copperhead_memio(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (i >= 240)
Expand Down Expand Up @@ -5202,7 +5202,7 @@ ips_init_morpheus(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (i >= 45) {
Expand All @@ -5228,7 +5228,7 @@ ips_init_morpheus(ips_ha_t * ha)
if (Post != 0x4F00)
break;
/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (i >= 120) {
Expand Down Expand Up @@ -5258,7 +5258,7 @@ ips_init_morpheus(ips_ha_t * ha)
break;

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);
}

if (i >= 240) {
Expand Down Expand Up @@ -5318,12 +5318,12 @@ ips_reset_copperhead(ips_ha_t * ha)
outb(IPS_BIT_RST, ha->io_addr + IPS_REG_SCPR);

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);

outb(0, ha->io_addr + IPS_REG_SCPR);

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);

if ((*ha->func.init) (ha))
break;
Expand Down Expand Up @@ -5363,12 +5363,12 @@ ips_reset_copperhead_memio(ips_ha_t * ha)
writeb(IPS_BIT_RST, ha->mem_ptr + IPS_REG_SCPR);

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);

writeb(0, ha->mem_ptr + IPS_REG_SCPR);

/* Delay for 1 Second */
MDELAY(IPS_ONE_SEC);
msleep(IPS_ONE_SEC);

if ((*ha->func.init) (ha))
break;
Expand Down Expand Up @@ -5409,7 +5409,7 @@ ips_reset_morpheus(ips_ha_t * ha)
writel(0x80000000, ha->mem_ptr + IPS_REG_I960_IDR);

/* Delay for 5 Seconds */
MDELAY(5 * IPS_ONE_SEC);
msleep(5 * IPS_ONE_SEC);

/* Do a PCI config read to wait for adapter */
pci_read_config_byte(ha->pcidev, 4, &junk);
Expand Down

0 comments on commit 15084a4

Please sign in to comment.