lpfc 8.2.3 : Internal loopback fixes
Subsystems (2)
PATCH 7/9 lpfc 8.2.3 : Internal loopback fixes
Internal loopback fixes:
- Use HBQs rather than Q_RING_BUFF
- Correct HBQs continuation entries
- Update CT handler to SLI3 iocbs
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_crtn.h +5 -0
@@ -211,6 +211,11 @@ int lpfc_sli_ringpostbuf_put(struct lpfcstruct lpfc_dmabuf *lpfc_sli_ringpostbuf_get (struct lpfc_hba *,struct lpfc_sli_ring *,dma_addr_t ); + +uint32_t lpfc_sli_get_buffer_tag (struct lpfc_hba *); +struct lpfc_dmabuf *lpfc_sli_ring_taggedbuf_get (struct lpfc_hba *, +struct lpfc_sli_ring *,uint32_t ); +int lpfc_sli_hbq_count (void );int lpfc_sli_hbqbuf_init_hbqs (struct lpfc_hba *,uint32_t );int lpfc_sli_hbqbuf_add_hbqs (struct lpfc_hba *,uint32_t );
drivers/scsi/lpfc/lpfc.h +7 -0
@@ -68,6 +68,7 @@ struct lpfc_dmabuf {struct list_head list;void *virt;/* virtual address ptr */ dma_addr_t phys;/* mapped address */ +uint32_t buffer_tag;/* used for tagged queue ring */ };struct lpfc_dma_pool {
@@ -582,6 +583,12 @@ struct lpfc_hba {unsigned long last_completion_time;struct timer_list hb_tmofunc;uint8_t hb_outstanding; +/* +* Following bit will be set for all buffer tags which are not +* associated with any HBQ. +*/ +#define QUE_BUFTAG_BIT (1<<31) +uint32_t buffer_tag_count; }; static inline struct Scsi_Host *
drivers/scsi/lpfc/lpfc_hw.h +25 -6
@@ -1373,6 +1373,7 @@ typedef struct { /* FireFly BIU registe#define CMD_FCP_TRECEIVE64_CX 0xA1#define CMD_FCP_TRSP64_CX 0xA3 +#define CMD_QUE_XRI64_CX 0xB3#define CMD_IOCB_RCV_SEQ64_CX 0xB5#define CMD_IOCB_RCV_ELS64_CX 0xB7#define CMD_IOCB_RCV_CONT64_CX 0xBB
@@ -3039,7 +3040,26 @@ struct rcv_sli3 {struct ulp_bde64 bde2; }; +/* Structure used for a single HBQ entry */ +struct lpfc_hbq_entry { +struct ulp_bde64 bde; +uint32_t buffer_tag; +}; +/* IOCB Command template for QUE_XRI64_CX (0xB3) command */ +typedef struct { +struct lpfc_hbq_entry buff; +uint32_t rsvd; +uint32_t rsvd1; +}QUE_XRI64_CX_FIELDS ; + +struct que_xri64cx_ext_fields { +uint32_t iotag64_low; +uint32_t iotag64_high; +uint32_t ebde_count; +uint32_t rsvd; +struct lpfc_hbq_entry buff[5 ]; +}; typedef struct _IOCB { /* IOCB structure */ union {
@@ -3064,6 +3084,7 @@ typedef struct _IOCB { /* IOCB structureFCPI_FIELDS64 fcpi64;/* FCP 64 bit Initiator template */ FCPT_FIELDS64 fcpt64;/* FCP 64 bit target template */ ASYNCSTAT_FIELDS asyncstat;/* async_status iocb */ +QUE_XRI64_CX_FIELDS quexri64cx;/* que_xri64_cx fields */ uint32_t ulpWord[IOCB_WORD_SZ -2 ];/* generic 6 'words' */ } un;
@@ -3121,6 +3142,10 @@ typedef struct _IOCB { /* IOCB structureunion {struct rcv_sli3 rcvsli3;/* words 8 - 15 */ + +/* words 8-31 used for que_xri_cx iocb */ +struct que_xri64cx_ext_fields que_xri64cx_ext_words; +uint32_t sli3Words[24 ];/* 96 extra bytes for SLI-3 */ } unsli3;
@@ -3160,12 +3185,6 @@ typedef struct _IOCB { /* IOCB structure } IOCB_t; -/* Structure used for a single HBQ entry */ -struct lpfc_hbq_entry { -struct ulp_bde64 bde; -uint32_t buffer_tag; -}; -#define SLI1_SLIM_SIZE (4 * 1024)
drivers/scsi/lpfc/lpfc_sli.c +116 -7
167 lines not on this page · raw message