Commit 5b91490e authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley

[SCSI] qla2xxx: For ISP 23xx, select user specified login timeout value if...

[SCSI] qla2xxx: For ISP 23xx, select user specified login timeout value if greater than minuimum value(4 secs).
Signed-off-by: default avatarGiridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 6c7ccf7b
...@@ -121,7 +121,23 @@ qla2x00_get_ctx_sp(scsi_qla_host_t *vha, fc_port_t *fcport, size_t size, ...@@ -121,7 +121,23 @@ qla2x00_get_ctx_sp(scsi_qla_host_t *vha, fc_port_t *fcport, size_t size,
/* Asynchronous Login/Logout Routines -------------------------------------- */ /* Asynchronous Login/Logout Routines -------------------------------------- */
#define ELS_TMO_2_RATOV(ha) ((ha)->r_a_tov / 10 * 2) static inline unsigned long
qla2x00_get_async_timeout(struct scsi_qla_host *vha)
{
unsigned long tmo;
struct qla_hw_data *ha = vha->hw;
/* Firmware should use switch negotiated r_a_tov for timeout. */
tmo = ha->r_a_tov / 10 * 2;
if (!IS_FWI2_CAPABLE(ha)) {
/*
* Except for earlier ISPs where the timeout is seeded from the
* initialization control block.
*/
tmo = ha->login_timeout;
}
return tmo;
}
static void static void
qla2x00_async_iocb_timeout(srb_t *sp) qla2x00_async_iocb_timeout(srb_t *sp)
...@@ -163,7 +179,6 @@ int ...@@ -163,7 +179,6 @@ int
qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
uint16_t *data) uint16_t *data)
{ {
struct qla_hw_data *ha = vha->hw;
srb_t *sp; srb_t *sp;
struct srb_ctx *ctx; struct srb_ctx *ctx;
struct srb_iocb *lio; struct srb_iocb *lio;
...@@ -171,7 +186,7 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, ...@@ -171,7 +186,7 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
rval = QLA_FUNCTION_FAILED; rval = QLA_FUNCTION_FAILED;
sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx), sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx),
ELS_TMO_2_RATOV(ha) + 2); qla2x00_get_async_timeout(vha) + 2);
if (!sp) if (!sp)
goto done; goto done;
...@@ -215,7 +230,6 @@ qla2x00_async_logout_ctx_done(srb_t *sp) ...@@ -215,7 +230,6 @@ qla2x00_async_logout_ctx_done(srb_t *sp)
int int
qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
{ {
struct qla_hw_data *ha = vha->hw;
srb_t *sp; srb_t *sp;
struct srb_ctx *ctx; struct srb_ctx *ctx;
struct srb_iocb *lio; struct srb_iocb *lio;
...@@ -223,7 +237,7 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) ...@@ -223,7 +237,7 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
rval = QLA_FUNCTION_FAILED; rval = QLA_FUNCTION_FAILED;
sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx), sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx),
ELS_TMO_2_RATOV(ha) + 2); qla2x00_get_async_timeout(vha) + 2);
if (!sp) if (!sp)
goto done; goto done;
...@@ -264,7 +278,6 @@ int ...@@ -264,7 +278,6 @@ int
qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
uint16_t *data) uint16_t *data)
{ {
struct qla_hw_data *ha = vha->hw;
srb_t *sp; srb_t *sp;
struct srb_ctx *ctx; struct srb_ctx *ctx;
struct srb_iocb *lio; struct srb_iocb *lio;
...@@ -272,7 +285,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, ...@@ -272,7 +285,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
rval = QLA_FUNCTION_FAILED; rval = QLA_FUNCTION_FAILED;
sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx), sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx),
ELS_TMO_2_RATOV(ha) + 2); qla2x00_get_async_timeout(vha) + 2);
if (!sp) if (!sp)
goto done; goto done;
...@@ -316,7 +329,6 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun, ...@@ -316,7 +329,6 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,
uint32_t tag) uint32_t tag)
{ {
struct scsi_qla_host *vha = fcport->vha; struct scsi_qla_host *vha = fcport->vha;
struct qla_hw_data *ha = vha->hw;
srb_t *sp; srb_t *sp;
struct srb_ctx *ctx; struct srb_ctx *ctx;
struct srb_iocb *tcf; struct srb_iocb *tcf;
...@@ -324,7 +336,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun, ...@@ -324,7 +336,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,
rval = QLA_FUNCTION_FAILED; rval = QLA_FUNCTION_FAILED;
sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx), sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx),
ELS_TMO_2_RATOV(ha) + 2); qla2x00_get_async_timeout(vha) + 2);
if (!sp) if (!sp)
goto done; goto done;
...@@ -2409,7 +2421,7 @@ qla2x00_nvram_config(scsi_qla_host_t *vha) ...@@ -2409,7 +2421,7 @@ qla2x00_nvram_config(scsi_qla_host_t *vha)
ha->retry_count = nv->retry_count; ha->retry_count = nv->retry_count;
/* Set minimum login_timeout to 4 seconds. */ /* Set minimum login_timeout to 4 seconds. */
if (nv->login_timeout < ql2xlogintimeout) if (nv->login_timeout != ql2xlogintimeout)
nv->login_timeout = ql2xlogintimeout; nv->login_timeout = ql2xlogintimeout;
if (nv->login_timeout < 4) if (nv->login_timeout < 4)
nv->login_timeout = 4; nv->login_timeout = 4;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment