[SCSI] qla2xxx: Fix issue with not displaying node name after system reboot.

Signed-off-by: Armen Baloyan <armen.baloyan@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
Armen Baloyan 2013-10-30 03:38:17 -04:00 committed by James Bottomley
parent f3ddac1918
commit e8f5e95d5a
5 changed files with 33 additions and 1 deletions

View File

@ -26,7 +26,7 @@
* | | | 0x302d,0x3033 | * | | | 0x302d,0x3033 |
* | | | 0x3036,0x3038 | * | | | 0x3036,0x3038 |
* | | | 0x303a | * | | | 0x303a |
* | DPC Thread | 0x4022 | 0x4002,0x4013 | * | DPC Thread | 0x4023 | 0x4002,0x4013 |
* | Async Events | 0x5087 | 0x502b-0x502f | * | Async Events | 0x5087 | 0x502b-0x502f |
* | | | 0x5047,0x5052 | * | | | 0x5047,0x5052 |
* | | | 0x5084,0x5075 | * | | | 0x5084,0x5075 |

View File

@ -3370,6 +3370,7 @@ typedef struct scsi_qla_host {
#define FX00_RESET_RECOVERY 23 #define FX00_RESET_RECOVERY 23
#define FX00_TARGET_SCAN 24 #define FX00_TARGET_SCAN 24
#define FX00_CRITEMP_RECOVERY 25 #define FX00_CRITEMP_RECOVERY 25
#define FX00_HOST_INFO_RESEND 26
uint32_t device_flags; uint32_t device_flags;
#define SWITCH_FOUND BIT_0 #define SWITCH_FOUND BIT_0

View File

@ -1610,6 +1610,22 @@ qlafx00_timer_routine(scsi_qla_host_t *vha)
ha->mr.fw_critemp_timer_tick--; ha->mr.fw_critemp_timer_tick--;
} }
} }
if (ha->mr.host_info_resend) {
/*
* Incomplete host info might be sent to firmware
* durinng system boot - info should be resend
*/
if (ha->mr.hinfo_resend_timer_tick == 0) {
ha->mr.host_info_resend = false;
set_bit(FX00_HOST_INFO_RESEND, &vha->dpc_flags);
ha->mr.hinfo_resend_timer_tick =
QLAFX00_HINFO_RESEND_INTERVAL;
qla2xxx_wake_dpc(vha);
} else {
ha->mr.hinfo_resend_timer_tick--;
}
}
} }
/* /*
@ -1888,6 +1904,8 @@ qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type)
p_sysid->sysname, SYSNAME_LENGTH); p_sysid->sysname, SYSNAME_LENGTH);
strncpy(phost_info->nodename, strncpy(phost_info->nodename,
p_sysid->nodename, NODENAME_LENGTH); p_sysid->nodename, NODENAME_LENGTH);
if (!strcmp(phost_info->nodename, "(none)"))
ha->mr.host_info_resend = true;
strncpy(phost_info->release, strncpy(phost_info->release,
p_sysid->release, RELEASE_LENGTH); p_sysid->release, RELEASE_LENGTH);
strncpy(phost_info->version, strncpy(phost_info->version,

View File

@ -511,6 +511,8 @@ struct mr_data_fx00 {
uint32_t old_aenmbx0_state; uint32_t old_aenmbx0_state;
uint32_t critical_temperature; uint32_t critical_temperature;
bool extended_io_enabled; bool extended_io_enabled;
bool host_info_resend;
uint8_t hinfo_resend_timer_tick;
}; };
#define QLAFX00_EXTENDED_IO_EN_MASK 0x20 #define QLAFX00_EXTENDED_IO_EN_MASK 0x20
@ -537,6 +539,7 @@ struct mr_data_fx00 {
#define QLAFX00_RESET_INTERVAL 120 /* number of seconds */ #define QLAFX00_RESET_INTERVAL 120 /* number of seconds */
#define QLAFX00_MAX_RESET_INTERVAL 600 /* number of seconds */ #define QLAFX00_MAX_RESET_INTERVAL 600 /* number of seconds */
#define QLAFX00_CRITEMP_INTERVAL 60 /* number of seconds */ #define QLAFX00_CRITEMP_INTERVAL 60 /* number of seconds */
#define QLAFX00_HINFO_RESEND_INTERVAL 60 /* number of seconds */
#define QLAFX00_CRITEMP_THRSHLD 80 /* Celsius degrees */ #define QLAFX00_CRITEMP_THRSHLD 80 /* Celsius degrees */

View File

@ -2495,6 +2495,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
ha->mr.fw_reset_timer_tick = QLAFX00_RESET_INTERVAL; ha->mr.fw_reset_timer_tick = QLAFX00_RESET_INTERVAL;
ha->mr.fw_critemp_timer_tick = QLAFX00_CRITEMP_INTERVAL; ha->mr.fw_critemp_timer_tick = QLAFX00_CRITEMP_INTERVAL;
ha->mr.fw_hbt_en = 1; ha->mr.fw_hbt_en = 1;
ha->mr.host_info_resend = false;
ha->mr.hinfo_resend_timer_tick = QLAFX00_HINFO_RESEND_INTERVAL;
} }
ql_dbg_pci(ql_dbg_init, pdev, 0x001e, ql_dbg_pci(ql_dbg_init, pdev, 0x001e,
@ -4867,6 +4869,14 @@ qla2x00_do_dpc(void *data)
ql_dbg(ql_dbg_dpc, base_vha, 0x401f, ql_dbg(ql_dbg_dpc, base_vha, 0x401f,
"ISPFx00 Target Scan End\n"); "ISPFx00 Target Scan End\n");
} }
if (test_and_clear_bit(FX00_HOST_INFO_RESEND,
&base_vha->dpc_flags)) {
ql_dbg(ql_dbg_dpc, base_vha, 0x4023,
"ISPFx00 Host Info resend scheduled\n");
qlafx00_fx_disc(base_vha,
&base_vha->hw->mr.fcport,
FXDISC_REG_HOST_INFO);
}
} }
if (test_and_clear_bit(ISP_ABORT_NEEDED, if (test_and_clear_bit(ISP_ABORT_NEEDED,