aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_init.c
diff options
context:
space:
mode:
authorLalit Chandivade <lalit.chandivade@qlogic.com>2009-03-24 12:08:07 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-04-03 10:22:49 -0400
commit2533cf671da0603129c8af9c31c735e1d2654e20 (patch)
tree3ef7f6c0b4266823c07bc0687ac9009e1cc281c0 /drivers/scsi/qla2xxx/qla_init.c
parent1d2874de809a14e6780246b99a18bbc0fc0a8f2a (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.c5
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