|
|
3d7c23 |
From 453f1d71efe9b3c00293d2812c3903ceac9935e2 Mon Sep 17 00:00:00 2001
|
|
|
3d7c23 |
From: Himanshu Madhani <hmadhani@redhat.com>
|
|
|
3d7c23 |
Date: Thu, 21 Nov 2019 16:36:48 -0500
|
|
|
3d7c23 |
Subject: [PATCH 138/155] [scsi] scsi: qla2xxx: Inline the
|
|
|
3d7c23 |
qla2x00_fcport_event_handler() function
|
|
|
3d7c23 |
|
|
|
3d7c23 |
Message-id: <20191121163701.43688-14-hmadhani@redhat.com>
|
|
|
3d7c23 |
Patchwork-id: 287859
|
|
|
3d7c23 |
O-Subject: [RHLE 7.8 e-stor PATCH v3 13/26] scsi: qla2xxx: Inline the qla2x00_fcport_event_handler() function
|
|
|
3d7c23 |
Bugzilla: 1731581
|
|
|
3d7c23 |
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
|
3d7c23 |
RH-Acked-by: Ewan Milne <emilne@redhat.com>
|
|
|
3d7c23 |
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
|
3d7c23 |
|
|
|
3d7c23 |
From: Bart Van Assche <bvanassche@acm.org>
|
|
|
3d7c23 |
|
|
|
3d7c23 |
Bugzilla 1731581
|
|
|
3d7c23 |
|
|
|
3d7c23 |
Instead of calling qla2x00_fcport_event_handler() and letting the switch
|
|
|
3d7c23 |
statement inside that function decide which other function to call, call
|
|
|
3d7c23 |
the latter function directly. Remove the event member from the event_arg
|
|
|
3d7c23 |
structure because it is no longer needed. Remove the
|
|
|
3d7c23 |
qla_handle_els_plogi_done() function because it is never called.
|
|
|
3d7c23 |
|
|
|
3d7c23 |
Cc: Himanshu Madhani <hmadhani@marvell.com>
|
|
|
3d7c23 |
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
|
|
|
3d7c23 |
Tested-by: Himanshu Madhani <hmadhani@marvell.com>
|
|
|
3d7c23 |
Reviewed-by: Himanshu Madhani <hmadhani@marvell.com>
|
|
|
3d7c23 |
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
|
3d7c23 |
(cherry picked from commit 897def2004213636ffe2e9ee6a75660c5b53b03d)
|
|
|
3d7c23 |
Signed-off-by: Himanshu Madhani <hmadhani@redhat.com>
|
|
|
3d7c23 |
Signed-off-by: Jan Stancek <jstancek@redhat.com>
|
|
|
3d7c23 |
---
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_def.h | 17 ------
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_gbl.h | 6 +-
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_gs.c | 15 ++---
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_init.c | 131 ++++++++++------------------------------
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_iocb.c | 3 +-
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_isr.c | 3 +-
|
|
|
3d7c23 |
drivers/scsi/qla2xxx/qla_os.c | 3 +-
|
|
|
3d7c23 |
7 files changed, 45 insertions(+), 133 deletions(-)
|
|
|
3d7c23 |
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
|
|
|
3d7c23 |
index fc3ef1d6902b..61c67c99e0c3 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_def.h
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_def.h
|
|
|
3d7c23 |
@@ -2330,22 +2330,6 @@ enum login_state { /* FW control Target side */
|
|
|
3d7c23 |
DSC_LS_LOGO_PEND,
|
|
|
3d7c23 |
};
|
|
|
3d7c23 |
|
|
|
3d7c23 |
-enum fcport_mgt_event {
|
|
|
3d7c23 |
- FCME_RELOGIN = 1,
|
|
|
3d7c23 |
- FCME_RSCN,
|
|
|
3d7c23 |
- FCME_PLOGI_DONE, /* Initiator side sent LLIOCB */
|
|
|
3d7c23 |
- FCME_PRLI_DONE,
|
|
|
3d7c23 |
- FCME_GNL_DONE,
|
|
|
3d7c23 |
- FCME_GPSC_DONE,
|
|
|
3d7c23 |
- FCME_GPDB_DONE,
|
|
|
3d7c23 |
- FCME_GPNID_DONE,
|
|
|
3d7c23 |
- FCME_GFFID_DONE,
|
|
|
3d7c23 |
- FCME_ADISC_DONE,
|
|
|
3d7c23 |
- FCME_GNNID_DONE,
|
|
|
3d7c23 |
- FCME_GFPNID_DONE,
|
|
|
3d7c23 |
- FCME_ELS_PLOGI_DONE,
|
|
|
3d7c23 |
-};
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
enum rscn_addr_format {
|
|
|
3d7c23 |
RSCN_PORT_ADDR,
|
|
|
3d7c23 |
RSCN_AREA_ADDR,
|
|
|
3d7c23 |
@@ -2466,7 +2450,6 @@ typedef struct fc_port {
|
|
|
3d7c23 |
#define QLA_FCPORT_FOUND 2
|
|
|
3d7c23 |
|
|
|
3d7c23 |
struct event_arg {
|
|
|
3d7c23 |
- enum fcport_mgt_event event;
|
|
|
3d7c23 |
fc_port_t *fcport;
|
|
|
3d7c23 |
srb_t *sp;
|
|
|
3d7c23 |
port_id_t id;
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
|
|
|
3d7c23 |
index 6d59359e0d21..e0b1f0652403 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_gbl.h
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
|
|
|
3d7c23 |
@@ -96,7 +96,11 @@ extern int qla2x00_init_rings(scsi_qla_host_t *);
|
|
|
3d7c23 |
extern struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *,
|
|
|
3d7c23 |
int, int, bool);
|
|
|
3d7c23 |
extern int qla2xxx_delete_qpair(struct scsi_qla_host *, struct qla_qpair *);
|
|
|
3d7c23 |
-void qla2x00_fcport_event_handler(scsi_qla_host_t *, struct event_arg *);
|
|
|
3d7c23 |
+void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea);
|
|
|
3d7c23 |
+void qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha,
|
|
|
3d7c23 |
+ struct event_arg *ea);
|
|
|
3d7c23 |
+void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
|
|
|
3d7c23 |
+ struct event_arg *ea);
|
|
|
3d7c23 |
int qla24xx_async_gpdb(struct scsi_qla_host *, fc_port_t *, u8);
|
|
|
3d7c23 |
int qla24xx_async_prli(struct scsi_qla_host *, fc_port_t *);
|
|
|
3d7c23 |
int qla24xx_async_notify_ack(scsi_qla_host_t *, fc_port_t *,
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
|
|
|
3d7c23 |
index 38c7fb787d80..592ae70a4abd 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_gs.c
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_gs.c
|
|
|
3d7c23 |
@@ -3069,11 +3069,10 @@ static void qla24xx_async_gpsc_sp_done(void *s, int res)
|
|
|
3d7c23 |
be16_to_cpu(ct_rsp->rsp.gpsc.speed));
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_GPSC_DONE;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gpsc_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
done:
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
@@ -3324,7 +3323,6 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
|
|
|
3d7c23 |
ea.id.b.area = ct_req->req.port_id.port_id[1];
|
|
|
3d7c23 |
ea.id.b.al_pa = ct_req->req.port_id.port_id[2];
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_GPNID_DONE;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
|
|
|
3d7c23 |
list_del(&sp->elem);
|
|
|
3d7c23 |
@@ -3343,7 +3341,7 @@ static void qla2x00_async_gpnid_sp_done(void *s, int res)
|
|
|
3d7c23 |
return;
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gpnid_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
e = qla2x00_alloc_work(vha, QLA_EVT_UNMAP);
|
|
|
3d7c23 |
if (!e) {
|
|
|
3d7c23 |
@@ -3528,9 +3526,8 @@ void qla24xx_async_gffid_sp_done(void *s, int res)
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
ea.fcport = sp->fcport;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_GFFID_DONE;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gffid_event(vha, &ea);
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
@@ -4294,13 +4291,12 @@ static void qla2x00_async_gnnid_sp_done(void *s, int res)
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_GNNID_DONE;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
ql_dbg(ql_dbg_disc, vha, 0x204f,
|
|
|
3d7c23 |
"Async done-%s res %x, WWPN %8phC %8phC\n",
|
|
|
3d7c23 |
sp->name, res, fcport->port_name, fcport->node_name);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gnnid_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
@@ -4428,13 +4424,12 @@ static void qla2x00_async_gfpnid_sp_done(void *s, int res)
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_GFPNID_DONE;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
ql_dbg(ql_dbg_disc, vha, 0x204f,
|
|
|
3d7c23 |
"Async done-%s res %x, WWPN %8phC %8phC\n",
|
|
|
3d7c23 |
sp->name, res, fcport->port_name, fcport->fabric_port_name);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gfpnid_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
|
|
|
3d7c23 |
index 0b694da58017..9584da53e715 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_init.c
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_init.c
|
|
|
3d7c23 |
@@ -37,8 +37,8 @@ static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *);
|
|
|
3d7c23 |
static int qla84xx_init_chip(scsi_qla_host_t *);
|
|
|
3d7c23 |
static int qla25xx_init_queues(struct qla_hw_data *);
|
|
|
3d7c23 |
static int qla24xx_post_prli_work(struct scsi_qla_host*, fc_port_t *);
|
|
|
3d7c23 |
-static void qla24xx_handle_plogi_done_event(struct scsi_qla_host *,
|
|
|
3d7c23 |
- struct event_arg *);
|
|
|
3d7c23 |
+static void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha,
|
|
|
3d7c23 |
+ struct event_arg *ea);
|
|
|
3d7c23 |
static void qla24xx_handle_prli_done_event(struct scsi_qla_host *,
|
|
|
3d7c23 |
struct event_arg *);
|
|
|
3d7c23 |
static void __qla24xx_handle_gpdb_event(scsi_qla_host_t *, struct event_arg *);
|
|
|
3d7c23 |
@@ -266,14 +266,13 @@ qla2x00_async_login_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
|
|
|
3d7c23 |
if (!test_bit(UNLOADING, &vha->dpc_flags)) {
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_PLOGI_DONE;
|
|
|
3d7c23 |
ea.fcport = sp->fcport;
|
|
|
3d7c23 |
ea.data[0] = lio->u.logio.data[0];
|
|
|
3d7c23 |
ea.data[1] = lio->u.logio.data[1];
|
|
|
3d7c23 |
ea.iop[0] = lio->u.logio.iop[0];
|
|
|
3d7c23 |
ea.iop[1] = lio->u.logio.iop[1];
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_plogi_done_event(vha, &ea);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
@@ -542,7 +541,6 @@ qla2x00_async_adisc_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_ADISC_DONE;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
ea.data[0] = lio->u.logio.data[0];
|
|
|
3d7c23 |
ea.data[1] = lio->u.logio.data[1];
|
|
|
3d7c23 |
@@ -551,7 +549,7 @@ qla2x00_async_adisc_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
ea.fcport = sp->fcport;
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_adisc_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
@@ -971,7 +969,6 @@ qla24xx_async_gnl_sp_done(void *s, int res)
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_GNL_DONE;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
if (sp->u.iocb_cmd.u.mbx.in_mb[1] >=
|
|
|
3d7c23 |
sizeof(struct get_name_list_extended)) {
|
|
|
3d7c23 |
@@ -1010,7 +1007,7 @@ qla24xx_async_gnl_sp_done(void *s, int res)
|
|
|
3d7c23 |
spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gnl_done_event(vha, &ea);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
/* create new fcport if fw has knowledge of new sessions */
|
|
|
3d7c23 |
@@ -1157,11 +1154,10 @@ void qla24xx_async_gpdb_sp_done(void *s, int res)
|
|
|
3d7c23 |
|
|
|
3d7c23 |
fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_GPDB_DONE;
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_gpdb_event(vha, &ea);
|
|
|
3d7c23 |
|
|
|
3d7c23 |
dma_pool_free(ha->s_dma_pool, sp->u.iocb_cmd.u.mbx.in,
|
|
|
3d7c23 |
sp->u.iocb_cmd.u.mbx.in_dma);
|
|
|
3d7c23 |
@@ -1198,7 +1194,6 @@ qla2x00_async_prli_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
|
|
|
3d7c23 |
if (!test_bit(UNLOADING, &vha->dpc_flags)) {
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_PRLI_DONE;
|
|
|
3d7c23 |
ea.fcport = sp->fcport;
|
|
|
3d7c23 |
ea.data[0] = lio->u.logio.data[0];
|
|
|
3d7c23 |
ea.data[1] = lio->u.logio.data[1];
|
|
|
3d7c23 |
@@ -1206,7 +1201,7 @@ qla2x00_async_prli_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
ea.iop[1] = lio->u.logio.iop[1];
|
|
|
3d7c23 |
ea.sp = sp;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_prli_done_event(vha, &ea);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
sp->free(sp);
|
|
|
3d7c23 |
@@ -1673,12 +1668,34 @@ int qla24xx_post_newsess_work(struct scsi_qla_host *vha, port_id_t *id,
|
|
|
3d7c23 |
return qla2x00_post_work(vha, e);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
-static
|
|
|
3d7c23 |
+void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
|
|
|
3d7c23 |
+{
|
|
|
3d7c23 |
+ fc_port_t *fcport;
|
|
|
3d7c23 |
+ unsigned long flags;
|
|
|
3d7c23 |
+
|
|
|
3d7c23 |
+ fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
|
|
|
3d7c23 |
+ if (fcport) {
|
|
|
3d7c23 |
+ fcport->scan_needed = 1;
|
|
|
3d7c23 |
+ fcport->rscn_gen++;
|
|
|
3d7c23 |
+ }
|
|
|
3d7c23 |
+
|
|
|
3d7c23 |
+ spin_lock_irqsave(&vha->work_lock, flags);
|
|
|
3d7c23 |
+ if (vha->scan.scan_flags == 0) {
|
|
|
3d7c23 |
+ ql_dbg(ql_dbg_disc, vha, 0xffff, "%s: schedule\n", __func__);
|
|
|
3d7c23 |
+ vha->scan.scan_flags |= SF_QUEUED;
|
|
|
3d7c23 |
+ schedule_delayed_work(&vha->scan.scan_work, 5);
|
|
|
3d7c23 |
+ }
|
|
|
3d7c23 |
+ spin_unlock_irqrestore(&vha->work_lock, flags);
|
|
|
3d7c23 |
+}
|
|
|
3d7c23 |
+
|
|
|
3d7c23 |
void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
|
|
|
3d7c23 |
struct event_arg *ea)
|
|
|
3d7c23 |
{
|
|
|
3d7c23 |
fc_port_t *fcport = ea->fcport;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
+ if (test_bit(UNLOADING, &vha->dpc_flags))
|
|
|
3d7c23 |
+ return;
|
|
|
3d7c23 |
+
|
|
|
3d7c23 |
ql_dbg(ql_dbg_disc, vha, 0x2102,
|
|
|
3d7c23 |
"%s %8phC DS %d LS %d P %d del %d cnfl %p rscn %d|%d login %d|%d fl %x\n",
|
|
|
3d7c23 |
__func__, fcport->port_name, fcport->disc_state,
|
|
|
3d7c23 |
@@ -1698,89 +1715,6 @@ void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
|
|
|
3d7c23 |
qla24xx_fcport_handle_login(vha, fcport);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
-static void qla_handle_els_plogi_done(scsi_qla_host_t *vha,
|
|
|
3d7c23 |
- struct event_arg *ea)
|
|
|
3d7c23 |
-{
|
|
|
3d7c23 |
- ql_dbg(ql_dbg_disc, vha, 0x2118,
|
|
|
3d7c23 |
- "%s %d %8phC post PRLI\n",
|
|
|
3d7c23 |
- __func__, __LINE__, ea->fcport->port_name);
|
|
|
3d7c23 |
- qla24xx_post_prli_work(vha, ea->fcport);
|
|
|
3d7c23 |
-}
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
-void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
|
|
|
3d7c23 |
-{
|
|
|
3d7c23 |
- fc_port_t *fcport;
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
- switch (ea->event) {
|
|
|
3d7c23 |
- case FCME_RELOGIN:
|
|
|
3d7c23 |
- if (test_bit(UNLOADING, &vha->dpc_flags))
|
|
|
3d7c23 |
- return;
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
- qla24xx_handle_relogin_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_RSCN:
|
|
|
3d7c23 |
- if (test_bit(UNLOADING, &vha->dpc_flags))
|
|
|
3d7c23 |
- return;
|
|
|
3d7c23 |
- {
|
|
|
3d7c23 |
- unsigned long flags;
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
- fcport = qla2x00_find_fcport_by_nportid
|
|
|
3d7c23 |
- (vha, &ea->id, 1);
|
|
|
3d7c23 |
- if (fcport) {
|
|
|
3d7c23 |
- fcport->scan_needed = 1;
|
|
|
3d7c23 |
- fcport->rscn_gen++;
|
|
|
3d7c23 |
- }
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
- spin_lock_irqsave(&vha->work_lock, flags);
|
|
|
3d7c23 |
- if (vha->scan.scan_flags == 0) {
|
|
|
3d7c23 |
- ql_dbg(ql_dbg_disc, vha, 0xffff,
|
|
|
3d7c23 |
- "%s: schedule\n", __func__);
|
|
|
3d7c23 |
- vha->scan.scan_flags |= SF_QUEUED;
|
|
|
3d7c23 |
- schedule_delayed_work(&vha->scan.scan_work, 5);
|
|
|
3d7c23 |
- }
|
|
|
3d7c23 |
- spin_unlock_irqrestore(&vha->work_lock, flags);
|
|
|
3d7c23 |
- }
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GNL_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gnl_done_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GPSC_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gpsc_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_PLOGI_DONE: /* Initiator side sent LLIOCB */
|
|
|
3d7c23 |
- qla24xx_handle_plogi_done_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_PRLI_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_prli_done_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GPDB_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gpdb_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GPNID_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gpnid_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GFFID_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gffid_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_ADISC_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_adisc_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GNNID_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gnnid_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_GFPNID_DONE:
|
|
|
3d7c23 |
- qla24xx_handle_gfpnid_event(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- case FCME_ELS_PLOGI_DONE:
|
|
|
3d7c23 |
- qla_handle_els_plogi_done(vha, ea);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- default:
|
|
|
3d7c23 |
- BUG_ON(1);
|
|
|
3d7c23 |
- break;
|
|
|
3d7c23 |
- }
|
|
|
3d7c23 |
-}
|
|
|
3d7c23 |
-
|
|
|
3d7c23 |
/*
|
|
|
3d7c23 |
* RSCN(s) came in for this fcport, but the RSCN(s) was not able
|
|
|
3d7c23 |
* to be consumed by the fcport
|
|
|
3d7c23 |
@@ -1798,10 +1732,9 @@ void qla_rscn_replay(fc_port_t *fcport)
|
|
|
3d7c23 |
|
|
|
3d7c23 |
if (fcport->scan_needed) {
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_RSCN;
|
|
|
3d7c23 |
ea.id = fcport->d_id;
|
|
|
3d7c23 |
ea.id.b.rsvd_1 = RSCN_PORT_ADDR;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(fcport->vha, &ea);
|
|
|
3d7c23 |
+ qla2x00_handle_rscn(fcport->vha, &ea);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
@@ -1985,7 +1918,7 @@ qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
-static void
|
|
|
3d7c23 |
+void
|
|
|
3d7c23 |
qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
|
|
|
3d7c23 |
{
|
|
|
3d7c23 |
port_id_t cid; /* conflict Nport id */
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
|
|
|
3d7c23 |
index 4498cf78e156..702c72fe439b 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_iocb.c
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
|
|
|
3d7c23 |
@@ -2853,8 +2853,7 @@ qla2x00_els_dcmd2_sp_done(void *ptr, int res)
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
ea.rc = res;
|
|
|
3d7c23 |
- ea.event = FCME_ELS_PLOGI_DONE;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_plogi_done_event(vha, &ea);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
|
|
|
3d7c23 |
e = qla2x00_alloc_work(vha, QLA_EVT_UNMAP);
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
|
|
|
3d7c23 |
index 7c58e04c5d70..873fcffb5dd7 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_isr.c
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_isr.c
|
|
|
3d7c23 |
@@ -1118,10 +1118,9 @@ global_port_update:
|
|
|
3d7c23 |
struct event_arg ea;
|
|
|
3d7c23 |
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_RSCN;
|
|
|
3d7c23 |
ea.id.b24 = rscn_entry;
|
|
|
3d7c23 |
ea.id.b.rsvd_1 = rscn_entry >> 24;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla2x00_handle_rscn(vha, &ea);
|
|
|
3d7c23 |
qla2x00_post_aen_work(vha, FCH_EVT_RSCN, rscn_entry);
|
|
|
3d7c23 |
}
|
|
|
3d7c23 |
break;
|
|
|
3d7c23 |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
|
|
|
3d7c23 |
index 371070eea2d1..95d54bbc48c0 100644
|
|
|
3d7c23 |
--- a/drivers/scsi/qla2xxx/qla_os.c
|
|
|
3d7c23 |
+++ b/drivers/scsi/qla2xxx/qla_os.c
|
|
|
3d7c23 |
@@ -5434,9 +5434,8 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
|
|
|
3d7c23 |
} else {
|
|
|
3d7c23 |
if (vha->hw->current_topology != ISP_CFG_NL) {
|
|
|
3d7c23 |
memset(&ea, 0, sizeof(ea));
|
|
|
3d7c23 |
- ea.event = FCME_RELOGIN;
|
|
|
3d7c23 |
ea.fcport = fcport;
|
|
|
3d7c23 |
- qla2x00_fcport_event_handler(vha, &ea);
|
|
|
3d7c23 |
+ qla24xx_handle_relogin_event(vha, &ea);
|
|
|
3d7c23 |
} else if (vha->hw->current_topology ==
|
|
|
3d7c23 |
ISP_CFG_NL) {
|
|
|
3d7c23 |
fcport->login_retry--;
|
|
|
3d7c23 |
--
|
|
|
3d7c23 |
2.13.6
|
|
|
3d7c23 |
|