Commit 1dc64a36 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: edif: Do secure PLOGI when auth app is present

For initiator mode, always do secure login when authentication app started.
Also remove redundant flags to indicate secure connection.

Link: https://lore.kernel.org/r/20210817051315.2477-7-njavali@marvell.comSigned-off-by: default avatarQuinn Tran <qutran@marvell.com>
Signed-off-by: default avatarNilesh Javali <njavali@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 4de067e5
...@@ -2620,7 +2620,6 @@ typedef struct fc_port { ...@@ -2620,7 +2620,6 @@ typedef struct fc_port {
uint32_t enable:1; /* device is edif enabled/req'd */ uint32_t enable:1; /* device is edif enabled/req'd */
uint32_t app_stop:2; uint32_t app_stop:2;
uint32_t app_started:1; uint32_t app_started:1;
uint32_t secured_login:1;
uint32_t aes_gmac:1; uint32_t aes_gmac:1;
uint32_t app_sess_online:1; uint32_t app_sess_online:1;
uint32_t tx_sa_set:1; uint32_t tx_sa_set:1;
...@@ -2631,7 +2630,6 @@ typedef struct fc_port { ...@@ -2631,7 +2630,6 @@ typedef struct fc_port {
uint32_t rx_rekey_cnt; uint32_t rx_rekey_cnt;
uint64_t tx_bytes; uint64_t tx_bytes;
uint64_t rx_bytes; uint64_t rx_bytes;
uint8_t non_secured_login;
uint8_t auth_state; uint8_t auth_state;
uint16_t authok:1; uint16_t authok:1;
uint16_t rekey_cnt; uint16_t rekey_cnt;
......
...@@ -568,7 +568,7 @@ qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job) ...@@ -568,7 +568,7 @@ qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
if (atomic_read(&vha->loop_state) == LOOP_DOWN) if (atomic_read(&vha->loop_state) == LOOP_DOWN)
break; break;
if (!fcport->edif.secured_login) if (!(fcport->flags & FCF_FCSP_DEVICE))
continue; continue;
fcport->edif.app_started = 1; fcport->edif.app_started = 1;
...@@ -647,7 +647,7 @@ qla_edif_app_stop(scsi_qla_host_t *vha, struct bsg_job *bsg_job) ...@@ -647,7 +647,7 @@ qla_edif_app_stop(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
qla_edb_stop(vha); /* stop db */ qla_edb_stop(vha); /* stop db */
list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) { list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
if (fcport->edif.non_secured_login) if (!(fcport->flags & FCF_FCSP_DEVICE))
continue; continue;
if (fcport->flags & FCF_FCSP_DEVICE) { if (fcport->flags & FCF_FCSP_DEVICE) {
...@@ -948,7 +948,7 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *vha, struct bsg_job *bsg_job) ...@@ -948,7 +948,7 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
ql_dbg(ql_dbg_edif, vha, 0x2058, ql_dbg(ql_dbg_edif, vha, 0x2058,
"Found FC_SP fcport - nn %8phN pn %8phN pcnt %d portid=%06x secure %d.\n", "Found FC_SP fcport - nn %8phN pn %8phN pcnt %d portid=%06x secure %d.\n",
fcport->node_name, fcport->port_name, pcnt, fcport->node_name, fcport->port_name, pcnt,
fcport->d_id.b24, fcport->edif.secured_login); fcport->d_id.b24, fcport->flags & FCF_FCSP_DEVICE);
switch (fcport->edif.auth_state) { switch (fcport->edif.auth_state) {
case VND_CMD_AUTH_STATE_ELS_RCVD: case VND_CMD_AUTH_STATE_ELS_RCVD:
......
...@@ -1435,18 +1435,15 @@ static int qla_chk_secure_login(scsi_qla_host_t *vha, fc_port_t *fcport, ...@@ -1435,18 +1435,15 @@ static int qla_chk_secure_login(scsi_qla_host_t *vha, fc_port_t *fcport,
ql_dbg(ql_dbg_disc, vha, 0x104d, ql_dbg(ql_dbg_disc, vha, 0x104d,
"Secure Login established on %8phC\n", "Secure Login established on %8phC\n",
fcport->port_name); fcport->port_name);
fcport->edif.secured_login = 1;
fcport->edif.non_secured_login = 0;
fcport->flags |= FCF_FCSP_DEVICE; fcport->flags |= FCF_FCSP_DEVICE;
} else { } else {
ql_dbg(ql_dbg_disc, vha, 0x104d, ql_dbg(ql_dbg_disc, vha, 0x104d,
"non-Secure Login %8phC", "non-Secure Login %8phC",
fcport->port_name); fcport->port_name);
fcport->edif.secured_login = 0; fcport->flags &= ~FCF_FCSP_DEVICE;
fcport->edif.non_secured_login = 1;
} }
if (vha->hw->flags.edif_enabled) { if (vha->hw->flags.edif_enabled) {
if (fcport->edif.secured_login) { if (fcport->flags & FCF_FCSP_DEVICE) {
qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_AUTH_PEND); qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_AUTH_PEND);
/* Start edif prli timer & ring doorbell for app */ /* Start edif prli timer & ring doorbell for app */
fcport->edif.rx_sa_set = 0; fcport->edif.rx_sa_set = 0;
......
...@@ -1552,6 +1552,9 @@ qla24xx_start_scsi(srb_t *sp) ...@@ -1552,6 +1552,9 @@ qla24xx_start_scsi(srb_t *sp)
struct scsi_qla_host *vha = sp->vha; struct scsi_qla_host *vha = sp->vha;
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
if (sp->fcport->edif.enable && (sp->fcport->flags & FCF_FCSP_DEVICE))
return qla28xx_start_scsi_edif(sp);
/* Setup device pointers. */ /* Setup device pointers. */
req = vha->req; req = vha->req;
rsp = req->rsp; rsp = req->rsp;
...@@ -1910,7 +1913,7 @@ qla2xxx_start_scsi_mq(srb_t *sp) ...@@ -1910,7 +1913,7 @@ qla2xxx_start_scsi_mq(srb_t *sp)
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
struct qla_qpair *qpair = sp->qpair; struct qla_qpair *qpair = sp->qpair;
if (sp->fcport->edif.enable) if (sp->fcport->edif.enable && (sp->fcport->flags & FCF_FCSP_DEVICE))
return qla28xx_start_scsi_edif(sp); return qla28xx_start_scsi_edif(sp);
/* Acquire qpair specific lock */ /* Acquire qpair specific lock */
......
...@@ -636,10 +636,8 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport, ...@@ -636,10 +636,8 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
fcport->fw_login_state = DSC_LS_PLOGI_PEND; fcport->fw_login_state = DSC_LS_PLOGI_PEND;
c = "PLOGI"; c = "PLOGI";
if (vha->hw->flags.edif_enabled && if (vha->hw->flags.edif_enabled &&
(le16_to_cpu(ntfy->u.isp24.flags) & NOTIFY24XX_FLAGS_FCSP)) { (le16_to_cpu(ntfy->u.isp24.flags) & NOTIFY24XX_FLAGS_FCSP))
fcport->flags |= FCF_FCSP_DEVICE; fcport->flags |= FCF_FCSP_DEVICE;
fcport->edif.secured_login = 1;
}
break; break;
case SRB_NACK_PRLI: case SRB_NACK_PRLI:
fcport->fw_login_state = DSC_LS_PRLI_PEND; fcport->fw_login_state = DSC_LS_PRLI_PEND;
......
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