lpfc 8.3.5: MIsc patch set part 3
Subsystems (2)
PATCH 3/6 lpfc 8.3.5: MIsc patch set part 3
This patch include the following fixes and changes:
- Fix crash when "error" is echoed to board_mode sysfs parameter
- Fix FCoE Parameter parsing in regions 23
- Fix driver crash when creating vport with large number of targets on SLI4
- Fix bug with npiv message being logged when it is not supported by the adapter
- Fix a potential dereferencing mailbox structure after free bug
- Fix firmware crash after vport create with high target count
- Error out requests to set board_mode to warm restart via sysfs on SLI4 HBAs
- Fix Block guard logging
- Fix a memory corruption issue during GID_FT IO prep
- Fix crash while processing unsolicited FC frames
- Fix failed to allocate XRI message is not a critical failure
- Update and fix formatting in some log messages
- Fix missing new line characters in log messages
- Removed the use of the locally defined FC transport layer related macros
- Check the rsplen in lpfc_handle_fcp_err function before using rsplen
---
lpfc_attr.c | 15 +++- lpfc_bsg.c | 5 - lpfc_ct.c | 19 ++++-- lpfc_debugfs.c | 10 +-- lpfc_disc.h | 2 lpfc_hbadisc.c | 13 ++-- lpfc_hw.h | 15 ---- lpfc_init.c | 54 +++++++++-------- lpfc_mbox.c | 11 ++- lpfc_scsi.c | 180 +++++++++++++++++++++++++++++++++------------------------ lpfc_sli.c | 85 +++++++++----------------- lpfc_sli4.h | 2 12 files changed, 214 insertions(+), 197 deletions(-)
drivers/scsi/lpfc/lpfc_attr.c +11 -4
@@ -29,6 +29,7 @@#include <scsi/scsi_host.h> #include <scsi/scsi_tcq.h> #include <scsi/scsi_transport_fc.h> +#include <scsi/fc/fc_fs.h> #include "lpfc_hw4.h" #include "lpfc_hw.h"
@@ -762,9 +763,15 @@ lpfc_board_mode_store(struct device *dev }else if (strncmp (buf,"offline" ,sizeof ("offline" ) -1 ) ==0 ) status =lpfc_do_offline (phba,LPFC_EVT_OFFLINE );else if (strncmp (buf,"warm" ,sizeof ("warm" ) -1 ) ==0 ) - status =lpfc_do_offline (phba,LPFC_EVT_WARM_START ); +if (phba->sli_rev ==LPFC_SLI_REV4 ) +return -EINVAL ; +else + status =lpfc_do_offline (phba,LPFC_EVT_WARM_START );else if (strncmp (buf,"error" ,sizeof ("error" ) -1 ) ==0 ) - status =lpfc_do_offline (phba,LPFC_EVT_KILL ); +if (phba->sli_rev ==LPFC_SLI_REV4 ) +return -EINVAL ; +else + status =lpfc_do_offline (phba,LPFC_EVT_KILL );else return -EINVAL ;
@@ -2846,7 +2853,7 @@ LPFC_ATTR_R(multi_ring_support, 1, 1, 2,# identifies what rctl value to configure the additional ring for. # Value range is [1,0xff]. Default value is 4 (Unsolicated Data). */ -LPFC_ATTR_R (multi_ring_rctl,FC_UNSOL_DATA ,1 , +LPFC_ATTR_R (multi_ring_rctl,FC_RCTL_DD_UNSOL_DATA ,1 ,255 ,"Identifies RCTL for additional ring configuration" );/*
@@ -2854,7 +2861,7 @@ LPFC_ATTR_R(multi_ring_rctl, FC_UNSOL_DA# identifies what type value to configure the additional ring for. # Value range is [1,0xff]. Default value is 5 (LLC/SNAP). */ -LPFC_ATTR_R (multi_ring_type,FC_LLC_SNAP ,1 , +LPFC_ATTR_R (multi_ring_type,FC_TYPE_IP ,1 ,255 ,"Identifies TYPE for additional ring configuration" );/*
drivers/scsi/lpfc/lpfc_bsg.c +3 -2
@@ -26,6 +26,7 @@#include <scsi/scsi_host.h> #include <scsi/scsi_transport_fc.h> #include <scsi/scsi_bsg_fc.h> +#include <scsi/fc/fc_fs.h> #include "lpfc_hw4.h" #include "lpfc_hw.h"
@@ -148,8 +149,8 @@ lpfc_bsg_rport_ct(struct fc_bsg_job *job cmd->ulpCommand =CMD_GEN_REQUEST64_CR ; cmd->un.genreq64.w5.hcsw.Fctl = (SI |LA ); cmd->un.genreq64.w5.hcsw.Dfctl =0 ; - cmd->un.genreq64.w5.hcsw.Rctl =FC_UNSOL_CTL ; - cmd->un.genreq64.w5.hcsw.Type =FC_COMMON_TRANSPORT_ULP ; + cmd->un.genreq64.w5.hcsw.Rctl =FC_RCTL_DD_UNSOL_CTL ; + cmd->un.genreq64.w5.hcsw.Type =FC_TYPE_CT ; cmd->ulpBdeCount =1 ; cmd->ulpLe =1 ; cmd->ulpClass =CLASS3 ;
drivers/scsi/lpfc/lpfc_ct.c +14 -5
@@ -31,6 +31,7 @@#include <scsi/scsi_device.h> #include <scsi/scsi_host.h> #include <scsi/scsi_transport_fc.h> +#include <scsi/fc/fc_fs.h> #include "lpfc_hw4.h" #include "lpfc_hw.h"
@@ -336,8 +337,8 @@ lpfc_gen_req(struct lpfc_vport *vport, s/* Fill in rest of iocb */ icmd->un.genreq64.w5.hcsw.Fctl = (SI |LA ); icmd->un.genreq64.w5.hcsw.Dfctl =0 ; - icmd->un.genreq64.w5.hcsw.Rctl =FC_UNSOL_CTL ; - icmd->un.genreq64.w5.hcsw.Type =FC_COMMON_TRANSPORT_ULP ; + icmd->un.genreq64.w5.hcsw.Rctl =FC_RCTL_DD_UNSOL_CTL ; + icmd->un.genreq64.w5.hcsw.Type =FC_TYPE_CT ;if (!tmo) {/* FC spec states we need 3 * ratov for CT requests */
@@ -395,9 +396,14 @@ lpfc_ct_cmd(struct lpfc_vport *vport, st outmp =lpfc_alloc_ct_rsp (phba, cmdcode, bpl, rsp_size, &cnt);if (!outmp)return -ENOMEM ; - +/* +* Form the CT IOCB. The total number of BDEs in this IOCB +* is the single command plus response count from +* lpfc_alloc_ct_rsp. +*/ + cnt +=1 ; status =lpfc_gen_req (vport, bmp, inmp, outmp, cmpl, ndlp,0 , - cnt+1 ,0 , retry); + cnt,0 , retry);if (status) {lpfc_free_ct_rsp (phba, outmp);return -ENOMEM ;
@@ -533,6 +539,9 @@ lpfc_ns_rsp(struct lpfc_vport *vport, st SLI_CTNS_GFF_ID, 0, Did) == 0) vport->num_disc_nodes++; + else +lpfc_setup_disc_node + (vport ,Did ); }else { lpfc_debugfs_disc_trc(vport,
@@ -1241,7 +1250,7 @@ lpfc_ns_cmd(struct lpfc_vport *vport, inbe16_to_cpu (SLI_CTNS_RFF_ID ); CtReq->un.rff.PortId =cpu_to_be32 (vport->fc_myDID);; CtReq->un.rff.fbits =FC4_FEATURE_INIT ; - CtReq->un.rff.type_code =FC_FCP_DATA ; + CtReq->un.rff.type_code =FC_TYPE_FCP ; cmpl = lpfc_cmpl_ct_cmd_rff_id;break ; }
drivers/scsi/lpfc/lpfc_debugfs.c +5 -5
@@ -926,7 +926,7 @@ lpfc_debugfs_dumpData_open(struct inode goto out;/* Round to page boundry */ -printk (KERN_ERR "BLKGRD %s: _dump_buf_data=0x%p\n" , +printk (KERN_ERR "9059 BLKGRD: %s: _dump_buf_data=0x%p\n" , __func__, _dump_buf_data); debug->buffer = _dump_buf_data;if (!debug->buffer) {
@@ -956,8 +956,8 @@ lpfc_debugfs_dumpDif_open(struct inode * goto out;/* Round to page boundry */ -printk (KERN_ERR "BLKGRD %s: _dump_buf_dif=0x%p file=%s\n" , __func__, - _dump_buf_dif, file->f_dentry->d_name.name); +printk (KERN_ERR "9060 BLKGRD: %s: _dump_buf_dif=0x%p file=%s\n" , + __func__, _dump_buf_dif, file->f_dentry->d_name.name); debug->buffer = _dump_buf_dif;if (!debug->buffer) {kfree (debug);
@@ -1377,7 +1377,7 @@ lpfc_debugfs_initialize(struct lpfc_vpordebugfs_create_dir (name, phba->hba_debugfs_root);if (!vport->vport_debugfs_root) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT , -"0417 Cant create debugfs" ); +"0417 Cant create debugfs\n" ); goto debug_failed; }atomic_inc (&phba->debugfs_vport_count);
@@ -1430,7 +1430,7 @@ lpfc_debugfs_initialize(struct lpfc_vpor vport, &lpfc_debugfs_op_nodelist);if (!vport->debug_nodelist) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT , -"0409 Cant create debugfs nodelist" ); +"0409 Cant create debugfs nodelist\n" ); goto debug_failed; } debug_failed:
drivers/scsi/lpfc/lpfc_disc.h +1 -1
@@ -19,7 +19,7 @@*******************************************************************/ #define FC_MAX_HOLD_RSCN 32/* max number of deferred RSCNs */ -#define FC_MAX_NS_RSP 65536/* max size NameServer rsp */ +#define FC_MAX_NS_RSP 64512/* max size NameServer rsp */ #define FC_MAXLOOP 126/* max devices supported on a fc loop */ #define LPFC_DISC_FLOGI_TMO 10/* Discovery FLOGI ratov */
drivers/scsi/lpfc/lpfc_hbadisc.c +7 -6
@@ -1699,9 +1699,8 @@ lpfc_init_vpi_cmpl(struct lpfc_hba *phbalpfc_initial_fdisc (vport); else {lpfc_vport_set_state (vport,FC_VPORT_NO_FABRIC_SUPP ); -lpfc_printf_vlog (vport,KERN_ERR , -LOG_ELS , -"2606 No NPIV Fabric support\n" ); +lpfc_printf_vlog (vport,KERN_ERR ,LOG_ELS , +"2606 No NPIV Fabric support\n" ); }return ; }
@@ -1901,7 +1900,10 @@ lpfc_mbx_process_link_up(struct lpfc_hbaif (phba->fc_topology ==TOPOLOGY_LOOP ) { phba->sli3_options &= ~LPFC_SLI3_NPIV_ENABLED ; -if (phba->cfg_enable_npiv) +/* if npiv is enabled and this adapter supports npiv log +* a message that npiv is not supported in this topology +*/ +if (phba->cfg_enable_npiv && phba->max_vpi)lpfc_printf_log (phba,KERN_ERR ,LOG_LINK_EVENT ,"1309 Link Up Event npiv not supported in loop " "topology\n" );
@@ -3118,7 +3120,7 @@ lpfc_no_rpi(struct lpfc_hba *phba, strucstruct lpfc_sli *psli;struct lpfc_sli_ring *pring;struct lpfc_iocbq *iocb, *next_iocb; -uint32_t rpi, i; +uint32_t i;lpfc_fabric_abort_nport (ndlp);
@@ -3127,7 +3129,6 @@ lpfc_no_rpi(struct lpfc_hba *phba, struc* by firmware with a no rpi error. */ psli = &phba->sli; - rpi = ndlp->nlp_rpi;if (ndlp->nlp_flag &NLP_RPI_VALID ) {/* Now process each ring */ for (i =0 ; i < psli->num_rings; i++) {
drivers/scsi/lpfc/lpfc_hw.h +0 -15
@@ -1124,21 +1124,6 @@ typedef struct {/* Number of 4-byte words in an IOCB. */ #define IOCB_WORD_SZ 8 -/* defines for type field in fc header */ -#define FC_ELS_DATA 0x1 -#define FC_LLC_SNAP 0x5 -#define FC_FCP_DATA 0x8 -#define FC_COMMON_TRANSPORT_ULP 0x20 - -/* defines for rctl field in fc header */ -#define FC_DEV_DATA 0x0 -#define FC_UNSOL_CTL 0x2 -#define FC_SOL_CTL 0x3 -#define FC_UNSOL_DATA 0x4 -#define FC_FCP_CMND 0x6 -#define FC_ELS_REQ 0x22 -#define FC_ELS_RSP 0x23 -/* network headers for Dfctl field */ #define FC_NET_HDR 0x20
drivers/scsi/lpfc/lpfc_init.c +29 -25
129 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_mbox.c +7 -4
@@ -25,8 +25,8 @@#include <scsi/scsi_device.h> #include <scsi/scsi_transport_fc.h> -#include <scsi/scsi.h> +#include <scsi/fc/fc_fs.h> #include "lpfc_hw4.h" #include "lpfc_hw.h"
@@ -1135,7 +1135,7 @@ lpfc_config_ring(struct lpfc_hba * phba,/* Otherwise we setup specific rctl / type masks for this ring */ for (i =0 ; i < pring->num_mask; i++) { mb->un.varCfgRing.rrRegs[i].rval = pring->prt[i].rctl; -if (mb->un.varCfgRing.rrRegs[i].rval !=FC_ELS_REQ ) +if (mb->un.varCfgRing.rrRegs[i].rval !=FC_RCTL_ELS_REQ ) mb->un.varCfgRing.rrRegs[i].rmask =0xff ;else mb->un.varCfgRing.rrRegs[i].rmask =0xfe ;
@@ -1657,9 +1657,12 @@ lpfc_sli4_config(struct lpfc_hba *phba,/* Allocate record for keeping SGE virtual addresses */ mbox->sge_array =kmalloc (sizeof (struct lpfc_mbx_nembed_sge_virt ),GFP_KERNEL ); -if (!mbox->sge_array) +if (!mbox->sge_array) { +lpfc_printf_log (phba,KERN_ERR ,LOG_MBOX , +"2527 Failed to allocate non-embedded SGE " +"array.\n" );return 0 ; - + }for (pagen =0 , alloc_len =0 ; pagen < pcount; pagen++) {/* The DMA memory is always allocated in the length of a * page even though the last SGE might not fill up to a
drivers/scsi/lpfc/lpfc_scsi.c +107 -73
391 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_sli4.h +1 -1
@@ -159,7 +159,7 @@ struct lpfc_fip_param_hdr {#define lpfc_fip_param_hdr_fipp_mode_SHIFT 6#define lpfc_fip_param_hdr_fipp_mode_MASK 0x3#define lpfc_fip_param_hdr_fipp_mode_WORD parm_flags -#define FIPP_MODE_ON 0x2 +#define FIPP_MODE_ON 0x1#define FIPP_MODE_OFF 0x0#define FIPP_VLAN_VALID 0x1 };
drivers/scsi/lpfc/lpfc_sli.c +29 -56
208 lines not on this page · raw message