Skip to content

Commit

Permalink
[SCSI] qla4xxx: Updated firmware ready timeout algorithm
Browse files Browse the repository at this point in the history
Updated firmware ready timeout algorithm to prevent
long delays and use jiffies to time out instead of
counter. Also use msleep_interruptible instead of msleep.

Signed-off-by: Karen Higgins <karen.higgins@qlogic.com>
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: Ravi Anand <ravi.anand@qlogic.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Vikas Chaudhary authored and James Bottomley committed May 2, 2010
1 parent c2393cd commit c301b02
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions drivers/scsi/qla4xxx/ql4_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,7 @@ static void qla4x00_pci_config(struct scsi_qla_host *ha)
static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha)
{
int status = QLA_ERROR;
uint32_t max_wait_time;
unsigned long max_wait_time;
unsigned long flags;
uint32_t mbox_status;

Expand Down Expand Up @@ -1078,7 +1078,10 @@ static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha)
spin_unlock_irqrestore(&ha->hardware_lock, flags);

/* Wait for firmware to come UP. */
max_wait_time = FIRMWARE_UP_TOV * 4;
DEBUG2(printk(KERN_INFO "scsi%ld: %s: Wait up to %d seconds for "
"boot firmware to complete...\n",
ha->host_no, __func__, FIRMWARE_UP_TOV));
max_wait_time = jiffies + (FIRMWARE_UP_TOV * HZ);
do {
uint32_t ctrl_status;

Expand All @@ -1092,16 +1095,15 @@ static int qla4xxx_start_firmware_from_flash(struct scsi_qla_host *ha)
if (mbox_status == MBOX_STS_COMMAND_COMPLETE)
break;

DEBUG2(printk("scsi%ld: %s: Waiting for boot firmware to "
"complete... ctrl_sts=0x%x, remaining=%d\n",
ha->host_no, __func__, ctrl_status,
max_wait_time));
DEBUG2(printk(KERN_INFO "scsi%ld: %s: Waiting for boot "
"firmware to complete... ctrl_sts=0x%x\n",
ha->host_no, __func__, ctrl_status));

msleep(250);
} while ((max_wait_time--));
msleep_interruptible(250);
} while (!time_after_eq(jiffies, max_wait_time));

if (mbox_status == MBOX_STS_COMMAND_COMPLETE) {
DEBUG(printk("scsi%ld: %s: Firmware has started\n",
DEBUG(printk(KERN_INFO "scsi%ld: %s: Firmware has started\n",
ha->host_no, __func__));

spin_lock_irqsave(&ha->hardware_lock, flags);
Expand Down

0 comments on commit c301b02

Please sign in to comment.