diff options
author | Lalit Chandivade <lalit.chandivade@qlogic.com> | 2009-03-24 12:08:07 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-04-03 10:22:49 -0400 |
commit | 2533cf671da0603129c8af9c31c735e1d2654e20 (patch) | |
tree | 3ef7f6c0b4266823c07bc0687ac9009e1cc281c0 /drivers/scsi/qla2xxx/qla_init.c | |
parent | 1d2874de809a14e6780246b99a18bbc0fc0a8f2a (diff) |
[SCSI] qla2xxx: Correct ISP abort semantics for NVRAM, VPD, and flash update.
Ensure that an ISP-abort has completed before performing any
update. After the update do not wait for an ISP-abort completion,
instead just wait until the ISP is reset. This avoids long
delays due to waiting for loop ready in qla2x00_abort_isp().
Signed-off-by: Lalit Chandivade <lalit.chandivade@qlogic.com>
Additional cleanups and
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_init.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index c37888e8747d..a2747501fdde 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -61,8 +61,10 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
61 | int rval; | 61 | int rval; |
62 | struct qla_hw_data *ha = vha->hw; | 62 | struct qla_hw_data *ha = vha->hw; |
63 | struct req_que *req = ha->req_q_map[0]; | 63 | struct req_que *req = ha->req_q_map[0]; |
64 | |||
64 | /* Clear adapter flags. */ | 65 | /* Clear adapter flags. */ |
65 | vha->flags.online = 0; | 66 | vha->flags.online = 0; |
67 | ha->flags.chip_reset_done = 0; | ||
66 | vha->flags.reset_active = 0; | 68 | vha->flags.reset_active = 0; |
67 | atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); | 69 | atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); |
68 | atomic_set(&vha->loop_state, LOOP_DOWN); | 70 | atomic_set(&vha->loop_state, LOOP_DOWN); |
@@ -131,6 +133,7 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
131 | } | 133 | } |
132 | } | 134 | } |
133 | rval = qla2x00_init_rings(vha); | 135 | rval = qla2x00_init_rings(vha); |
136 | ha->flags.chip_reset_done = 1; | ||
134 | 137 | ||
135 | return (rval); | 138 | return (rval); |
136 | } | 139 | } |
@@ -3321,6 +3324,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha) | |||
3321 | 3324 | ||
3322 | if (vha->flags.online) { | 3325 | if (vha->flags.online) { |
3323 | vha->flags.online = 0; | 3326 | vha->flags.online = 0; |
3327 | ha->flags.chip_reset_done = 0; | ||
3324 | clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); | 3328 | clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); |
3325 | ha->qla_stats.total_isp_aborts++; | 3329 | ha->qla_stats.total_isp_aborts++; |
3326 | 3330 | ||
@@ -3470,6 +3474,7 @@ qla2x00_restart_isp(scsi_qla_host_t *vha) | |||
3470 | 3474 | ||
3471 | if (!status && !(status = qla2x00_init_rings(vha))) { | 3475 | if (!status && !(status = qla2x00_init_rings(vha))) { |
3472 | clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); | 3476 | clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); |
3477 | ha->flags.chip_reset_done = 1; | ||
3473 | /* Initialize the queues in use */ | 3478 | /* Initialize the queues in use */ |
3474 | qla25xx_init_queues(ha); | 3479 | qla25xx_init_queues(ha); |
3475 | 3480 | ||