bfa: LUN discovery issue in direct attach mode
Subsystems (2)
PATCH RESEND 3/8 bfa: LUN discovery issue in direct attach mode
From: Vijaya Mohan Guvva <[email protected]>
In direct attach mode, if port features like QoS/Trunk/FEC/CR are enabled, driver can receive PLOGI from the target before firmware notifies lport online to the driver. In case the lport is not yet online and a PLOGI is received, send a reject to the peer port, instead of dropping it on the floor.
--- drivers/scsi/bfa/bfa_fcs_lport.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
drivers/scsi/bfa/bfa_fcs_lport.c +14 -1
@@ -773,7 +773,20 @@ bfa_fcs_lport_uf_recv(struct bfa_fcs_lport_s *lport,bfa_trc (lport->fcs, fchs->type);if (!bfa_fcs_lport_is_online (lport)) { -bfa_stats (lport, uf_recv_drops); +/* +* In direct attach topology, it is possible to get a PLOGI +* before the lport is online due to port feature +* (QoS/Trunk/FEC/CR), so send a rjt +*/ +if ((fchs->type ==FC_TYPE_ELS ) && + (els_cmd->els_code ==FC_ELS_PLOGI )) { +bfa_fcs_lport_send_ls_rjt (lport, fchs, +FC_LS_RJT_RSN_UNABLE_TO_PERF_CMD , +FC_LS_RJT_EXP_NO_ADDL_INFO ); +bfa_stats (lport, plogi_rcvd); + }else +bfa_stats (lport, uf_recv_drops); +return ; }
Signature · 1 line
1.8.2.1
PATCH RESEND 4/8 bfa: Fix for bcu or hcm faa query hang
From: Vijaya Mohan Guvva <[email protected]>
This patch set fixes the issue of brocade management utility hang (bcu/HCM) when faa attributes are queried from multiple application threads. Hang was due to race between the threads and completion handler corruption.
--- drivers/scsi/bfa/bfa_core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/scsi/bfa/bfa_core.c +4 -4
@@ -1367,10 +1367,6 @@ bfa_faa_query(struct bfa_s *bfa, struct bfa_faa_attr_s *attr,struct bfa_iocfc_s *iocfc = &bfa->iocfc;bfa_status_t status; - iocfc->faa_args.faa_attr = attr; - iocfc->faa_args.faa_cb.faa_cbfn = cbfn; - iocfc->faa_args.faa_cb.faa_cbarg = cbarg; - status =bfa_faa_validate_request (bfa);if (status !=BFA_STATUS_OK )return status;
@@ -1378,6 +1374,10 @@ bfa_faa_query(struct bfa_s *bfa, struct bfa_faa_attr_s *attr,if (iocfc->faa_args.busy ==BFA_TRUE )return BFA_STATUS_DEVBUSY ; + iocfc->faa_args.faa_attr = attr; + iocfc->faa_args.faa_cb.faa_cbfn = cbfn; + iocfc->faa_args.faa_cb.faa_cbarg = cbarg; + iocfc->faa_args.busy =BFA_TRUE ;memset (&faa_attr_req,0 ,sizeof (struct bfi_faa_query_s )); bfi_h2i_set(faa_attr_req.mh, BFI_MC_IOCFC,
Signature · 1 line
1.8.2.1
PATCH RESEND 5/8 bfa: Observed auto D-port mode instead of manual
In reply to [email protected]From: Vijaya Mohan Guvva <[email protected]>
Observed Auto mode in the HBA side while doing manual D-Port test on the switch side. Mode is not passed to BFA from firmware when the test is triggered by switch side. BFA just blindly using Auto mode.
--- drivers/scsi/bfa/bfa_svc.c | 2 +- drivers/scsi/bfa/bfi.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/bfa/bfa_svc.c +1 -1
@@ -6758,7 +6758,7 @@ bfa_dport_scn(struct bfa_dport_s *dport, struct bfi_diag_dport_scn_s *msg) dport->rp_pwwn = msg->info.teststart.pwwn; dport->rp_nwwn = msg->info.teststart.nwwn; dport->lpcnt =cpu_to_be32 (msg->info.teststart.numfrm); -bfa_dport_result_start (dport,BFA_DPORT_OPMODE_AUTO ); +bfa_dport_result_start (dport, msg->info.teststart.mode);break ;case BFI_DPORT_SCN_SUBTESTSTART :
drivers/scsi/bfa/bfi.h +2 -1
@@ -1144,7 +1144,8 @@ struct bfi_diag_dport_scn_teststart_s {wwn_t pwwn;/* switch port wwn. 8 bytes */ wwn_t nwwn;/* switch node wwn. 8 bytes */ u8 type;/* bfa_diag_dport_test_type_e */ -u8 rsvd[3 ]; +u8 mode;/* bfa_diag_dport_test_opmode */ +u8 rsvd[2 ];u32 numfrm;/* from switch uint in 1M */ };
Signature · 1 line
1.8.2.1
PATCH RESEND 6/8 bfa: change FC_ELS_TOV to 20sec
In reply to [email protected]From: Vijaya Mohan Guvva <[email protected]>
As per the FCP specs, the timeout for issuing ABTS is 20 sec; not 21 sec. Hence setting the TOV to 20 sec.
--- drivers/scsi/bfa/bfa_fc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/bfa/bfa_fc.h +1 -1
@@ -1026,7 +1026,7 @@ struct fc_alpabm_s {#define FC_ED_TOV 2#define FC_REC_TOV (FC_ED_TOV + 1)#define FC_RA_TOV 10 -#define FC_ELS_TOV ((2 * FC_RA_TOV) + 1) +#define FC_ELS_TOV (2 * FC_RA_TOV)#define FC_FCCT_TOV (3 * FC_RA_TOV)/*
Signature · 1 line
1.8.2.1
PATCH RESEND 7/8 bfa: Fix crash when symb name set for offline vport
In reply to [email protected]From: Vijaya Mohan Guvva <[email protected]>
This patch fixes a crash when tried setting symbolic name for an offline vport through sysfs. Crash is due to uninitialized pointer lport->ns, which gets initialized only on linkup (port online).
--- drivers/scsi/bfa/bfa_fcs.h | 1 + drivers/scsi/bfa/bfa_fcs_lport.c | 14 +++++++++++--- drivers/scsi/bfa/bfad_attr.c | 7 ++----- 3 files changed, 14 insertions(+), 8 deletions(-)
drivers/scsi/bfa/bfa_fcs.h +1 -0
@@ -296,6 +296,7 @@ wwn_t bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn,struct bfa_fcs_lport_s *bfa_fcs_lookup_port (struct bfa_fcs_s *fcs,u16 vf_id,wwn_t lpwwn); +void bfa_fcs_lport_set_symname (struct bfa_fcs_lport_s *port,char *symname);void bfa_fcs_lport_get_info (struct bfa_fcs_lport_s *port,struct bfa_lport_info_s *port_info); void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
drivers/scsi/bfa/bfa_fcs_lport.c +11 -3
@@ -1110,6 +1110,17 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,bfa_sm_send_event (lport,BFA_FCS_PORT_SM_CREATE ); } +void +bfa_fcs_lport_set_symname (struct bfa_fcs_lport_s *port, +char *symname) +{ +strcpy (port->port_cfg.sym_name.symname, symname); + +if (bfa_sm_cmp_state (port, bfa_fcs_lport_sm_online)) +bfa_fcs_lport_ns_util_send_rspn_id ( +BFA_FCS_GET_NS_FROM_PORT (port),NULL ); +} +/* * fcs_lport_api */
@@ -5153,9 +5164,6 @@ bfa_fcs_lport_ns_util_send_rspn_id(void *cbarg, struct bfa_fcxp_s *fcxp_alloced)u8 *psymbl = &symbl[0 ];int len; -if (!bfa_sm_cmp_state (port, bfa_fcs_lport_sm_online)) -return ; -/* Avoid sending RSPN in the following states. */ if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) || bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
drivers/scsi/bfa/bfad_attr.c +2 -5
@@ -593,11 +593,8 @@ bfad_im_vport_set_symbolic_name(struct fc_vport *fc_vport)return ;spin_lock_irqsave (&bfad->bfad_lock, flags); -if (strlen (sym_name) >0 ) { -strcpy (fcs_vport->lport.port_cfg.sym_name.symname, sym_name); -bfa_fcs_lport_ns_util_send_rspn_id ( -BFA_FCS_GET_NS_FROM_PORT ((&fcs_vport->lport)),NULL ); - } +if (strlen (sym_name) >0 ) +bfa_fcs_lport_set_symname (&fcs_vport->lport, sym_name);spin_unlock_irqrestore (&bfad->bfad_lock, flags); }
Signature · 1 line
1.8.2.1
PATCH RESEND 8/8 bfa: Driver version upgrade to 3.2.23.0
In reply to [email protected]From: Vijaya Mohan Guvva <[email protected]>
Patch includes changes to upgrade bfa driver version to 3.2.23.0 and use firmware version 3.2.3.0
--- drivers/scsi/bfa/bfad.c | 6 +++--- drivers/scsi/bfa/bfad_drv.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/scsi/bfa/bfad.c +3 -3
@@ -63,9 +63,9 @@ int max_rport_logins = BFA_FCS_MAX_RPORT_LOGINS;u32 bfi_image_cb_size, bfi_image_ct_size, bfi_image_ct2_size;u32 *bfi_image_cb, *bfi_image_ct, *bfi_image_ct2; -#define BFAD_FW_FILE_CB "cbfw-3.2.1.1.bin" -#define BFAD_FW_FILE_CT "ctfw-3.2.1.1.bin" -#define BFAD_FW_FILE_CT2 "ct2fw-3.2.1.1.bin" +#define BFAD_FW_FILE_CB "cbfw-3.2.3.0.bin" +#define BFAD_FW_FILE_CT "ctfw-3.2.3.0.bin" +#define BFAD_FW_FILE_CT2 "ct2fw-3.2.3.0.bin"static u32 *bfad_load_fwimg (struct pci_dev *pdev);static void bfad_free_fwimg (void );
drivers/scsi/bfa/bfad_drv.h +1 -1
@@ -57,7 +57,7 @@#ifdef BFA_DRIVER_VERSION #define BFAD_DRIVER_VERSION BFA_DRIVER_VERSION#else -#define BFAD_DRIVER_VERSION "3.2.21.1" +#define BFAD_DRIVER_VERSION "3.2.23.0"#endif #define BFAD_PROTO_NAME FCPI_NAME
Signature · 1 line
1.8.2.1