lpfc 8.3.28: Add support for ABTS failure handling
Subsystems (2)
PATCH 3/7 lpfc 8.3.28: Add support for ABTS failure handling
Add support for ABTS failure handling:
- Add asynchronous ABTS notification event feature to driver (CR 124578)
- Change driver message 3092 and 3116 to KERN_WARNING (CR 124768)
- Alter the SCR ELS command to use the temporary RPI and the Destination DID for SLI4-FC (CR 126070)
Signed-off-by Alex Iannicelli <[email protected]>
Signed-off-by James Smart <[email protected]>
---
lpfc_crtn.h | 4 - lpfc_els.c | 50 ------------- lpfc_hbadisc.c | 67 +++++++++++++++++ lpfc_hw.h | 13 ++- lpfc_mbox.c | 4 + lpfc_scsi.c | 4 - lpfc_sli.c | 214 +++++++++++++++++++++++++++++++++++++++++++++++---------- 7 files changed, 263 insertions(+), 93 deletions(-)
drivers/scsi/lpfc/lpfc_crtn.h +3 -1
@@ -106,7 +106,7 @@ void lpfc_cleanup(struct lpfc_vport *);void lpfc_disc_timeout (unsigned long );struct lpfc_nodelist *__lpfc_findnode_rpi (struct lpfc_vport *,uint16_t ); - +struct lpfc_nodelist *lpfc_findnode_rpi (struct lpfc_vport *,uint16_t );void lpfc_worker_wake_up (struct lpfc_hba *);int lpfc_workq_post_event (struct lpfc_hba *,void *,void *,uint32_t );int lpfc_do_work (void *);
@@ -455,3 +455,5 @@ int lpfc_sli4_queue_create(struct lpfc_hvoid lpfc_sli4_queue_destroy (struct lpfc_hba *);int lpfc_sli4_read_config (struct lpfc_hba *phba);int lpfc_scsi_buf_update (struct lpfc_hba *phba); +void lpfc_sli4_abts_err_handler (struct lpfc_hba *,struct lpfc_nodelist *, +struct sli4_wcqe_xri_aborted *);
drivers/scsi/lpfc/lpfc_els.c +0 -50
56 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_hbadisc.c +67 -0
73 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_hw.h +9 -4
@@ -2819,7 +2819,8 @@ typedef struct {#ifdef __BIG_ENDIAN_BITFIELD uint32_t rsvd1 : 19; /* Reserved */ uint32_t cdss : 1; /* Configure Data Security SLI */ - uint32_t rsvd2 : 3; /* Reserved */ + uint32_t casabt : 1; /* Configure async abts status notice */ + uint32_t rsvd2 : 2; /* Reserved */ uint32_t cbg : 1; /* Configure BlockGuard */ uint32_t cmv : 1; /* Configure Max VPIs */ uint32_t ccrp : 1; /* Config Command Ring Polling */
@@ -2839,14 +2840,16 @@ typedef struct { uint32_t ccrp : 1; /* Config Command Ring Polling */ uint32_t cmv : 1; /* Configure Max VPIs */ uint32_t cbg : 1; /* Configure BlockGuard */ - uint32_t rsvd2 : 3; /* Reserved */ + uint32_t rsvd2 : 2; /* Reserved */ + uint32_t casabt : 1; /* Configure async abts status notice */ uint32_t cdss : 1; /* Configure Data Security SLI */ uint32_t rsvd1 : 19; /* Reserved */#endif #ifdef __BIG_ENDIAN_BITFIELD uint32_t rsvd3 : 19; /* Reserved */ uint32_t gdss : 1; /* Configure Data Security SLI */ - uint32_t rsvd4 : 3; /* Reserved */ + uint32_t gasabt : 1; /* Grant async abts status notice */ + uint32_t rsvd4 : 2; /* Reserved */ uint32_t gbg : 1; /* Grant BlockGuard */ uint32_t gmv : 1; /* Grant Max VPIs */ uint32_t gcrp : 1; /* Grant Command Ring Polling */
@@ -2866,7 +2869,8 @@ typedef struct { uint32_t gcrp : 1; /* Grant Command Ring Polling */ uint32_t gmv : 1; /* Grant Max VPIs */ uint32_t gbg : 1; /* Grant BlockGuard */ - uint32_t rsvd4 : 3; /* Reserved */ + uint32_t rsvd4 : 2; /* Reserved */ + uint32_t gasabt : 1; /* Grant async abts status notice */ uint32_t gdss : 1; /* Configure Data Security SLI */ uint32_t rsvd3 : 19; /* Reserved */#endif
@@ -3465,6 +3469,7 @@ typedef struct { }ASYNCSTAT_FIELDS ;#define ASYNC_TEMP_WARN 0x100#define ASYNC_TEMP_SAFE 0x101 +#define ASYNC_STATUS_CN 0x102/* IOCB Command template for CMD_IOCB_RCV_ELS64_CX (0xB7) or CMD_IOCB_RCV_SEQ64_CX (0xB5) */
drivers/scsi/lpfc/lpfc_mbox.c +4 -0
@@ -1293,6 +1293,10 @@ lpfc_config_port(struct lpfc_hba *phba, phba->sli_rev =LPFC_SLI_REV2 ; mb->un.varCfgPort.sli_mode = phba->sli_rev; +/* If this is an SLI3 port, configure async status notification. */ +if (phba->sli_rev ==LPFC_SLI_REV3 ) + mb->un.varCfgPort.casabt =1 ; +/* Now setup pcb */ phba->pcb->type =TYPE_NATIVE_SLI2 ; phba->pcb->feature =FEATURE_INITIAL_SLI2 ;
drivers/scsi/lpfc/lpfc_scsi.c +3 -1
@@ -681,8 +681,10 @@ lpfc_sli4_fcp_xri_aborted(struct lpfc_hb rrq_empty =list_empty (&phba->active_rrq_list);spin_unlock_irqrestore (&phba->hbalock, iflag); -if (ndlp) +if (ndlp) {lpfc_set_rrq_active (phba, ndlp, xri, rxid,1 ); +lpfc_sli4_abts_err_handler (phba, ndlp, axri); + }lpfc_release_scsi_buf_s4 (phba, psb);if (rrq_empty)lpfc_worker_wake_up (phba);
drivers/scsi/lpfc/lpfc_sli.c +177 -37
264 lines not on this page · raw message