[SCSI] qla2xxx: Correct reset handling logic.
- honor ISP24XX NVRAM settings for lip-reset, full-login-lip, and device-reset. - correct LIP_FULL_LOGIN mailbox command issuance. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
8bc69e7dc3
Коммит
0c8c39af16
|
@ -3476,9 +3476,11 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
|
|||
|
||||
/* Set host adapter parameters. */
|
||||
ha->flags.disable_risc_code_load = 0;
|
||||
ha->flags.enable_lip_reset = 1;
|
||||
ha->flags.enable_lip_full_login = 1;
|
||||
ha->flags.enable_target_reset = 1;
|
||||
ha->flags.enable_lip_reset = 0;
|
||||
ha->flags.enable_lip_full_login =
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0;
|
||||
ha->flags.enable_target_reset =
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0;
|
||||
ha->flags.enable_led_scheme = 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
||||
|
||||
|
|
|
@ -1339,9 +1339,9 @@ qla2x00_lip_reset(scsi_qla_host_t *ha)
|
|||
|
||||
if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
|
||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||
mcp->mb[1] = BIT_0;
|
||||
mcp->mb[2] = 0xff;
|
||||
mcp->mb[3] = 0;
|
||||
mcp->mb[1] = BIT_6;
|
||||
mcp->mb[2] = 0;
|
||||
mcp->mb[3] = ha->loop_reset_delay;
|
||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||
} else {
|
||||
mcp->mb[0] = MBC_LIP_RESET;
|
||||
|
@ -1823,8 +1823,8 @@ qla2x00_full_login_lip(scsi_qla_host_t *ha)
|
|||
ha->host_no));
|
||||
|
||||
mcp->mb[0] = MBC_LIP_FULL_LOGIN;
|
||||
mcp->mb[1] = 0;
|
||||
mcp->mb[2] = 0xff;
|
||||
mcp->mb[1] = IS_QLA24XX(ha) || IS_QLA54XX(ha) ? BIT_3: 0;
|
||||
mcp->mb[2] = 0;
|
||||
mcp->mb[3] = 0;
|
||||
mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
|
||||
mcp->in_mb = MBX_0;
|
||||
|
|
|
@ -1037,48 +1037,49 @@ eh_host_reset_lock:
|
|||
static int
|
||||
qla2x00_loop_reset(scsi_qla_host_t *ha)
|
||||
{
|
||||
int status = QLA_SUCCESS;
|
||||
int ret;
|
||||
struct fc_port *fcport;
|
||||
|
||||
if (ha->flags.enable_lip_reset) {
|
||||
status = qla2x00_lip_reset(ha);
|
||||
if (ha->flags.enable_lip_full_login) {
|
||||
ret = qla2x00_full_login_lip(ha);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"full_login_lip=%d.\n", __func__, ha->host_no,
|
||||
ret));
|
||||
}
|
||||
atomic_set(&ha->loop_state, LOOP_DOWN);
|
||||
atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
|
||||
qla2x00_mark_all_devices_lost(ha, 0);
|
||||
qla2x00_wait_for_loop_ready(ha);
|
||||
}
|
||||
|
||||
if (status == QLA_SUCCESS && ha->flags.enable_target_reset) {
|
||||
if (ha->flags.enable_lip_reset) {
|
||||
ret = qla2x00_lip_reset(ha);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"lip_reset=%d.\n", __func__, ha->host_no, ret));
|
||||
}
|
||||
qla2x00_wait_for_loop_ready(ha);
|
||||
}
|
||||
|
||||
if (ha->flags.enable_target_reset) {
|
||||
list_for_each_entry(fcport, &ha->fcports, list) {
|
||||
if (fcport->port_type != FCT_TARGET)
|
||||
continue;
|
||||
|
||||
status = qla2x00_device_reset(ha, fcport);
|
||||
if (status != QLA_SUCCESS)
|
||||
break;
|
||||
ret = qla2x00_device_reset(ha, fcport);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
DEBUG2_3(printk("%s(%ld): bus_reset failed: "
|
||||
"target_reset=%d d_id=%x.\n", __func__,
|
||||
ha->host_no, ret, fcport->d_id.b24));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (status == QLA_SUCCESS &&
|
||||
((!ha->flags.enable_target_reset &&
|
||||
!ha->flags.enable_lip_reset) ||
|
||||
ha->flags.enable_lip_full_login)) {
|
||||
|
||||
status = qla2x00_full_login_lip(ha);
|
||||
}
|
||||
|
||||
/* Issue marker command only when we are going to start the I/O */
|
||||
ha->marker_needed = 1;
|
||||
|
||||
if (status) {
|
||||
/* Empty */
|
||||
DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
|
||||
__func__,
|
||||
ha->host_no));
|
||||
} else {
|
||||
/* Empty */
|
||||
DEBUG3(printk("%s(%ld): exiting normally.\n",
|
||||
__func__,
|
||||
ha->host_no));
|
||||
}
|
||||
|
||||
return(status);
|
||||
return QLA_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче