scsi: lpfc: Code cleanup for 128byte wqe data type
The driver is very sloppy about the WQE structure passed between routines. The base struct type is a 64byte wqe. But in many routines they typecast and access 128byte wqes. There were a couple of cases in the past (corrected already) where the typecasts were incorrectly done and the 64byte buffer was accessed as a 128 byte buffer. Clean this up by properly declaring wqe's as 128byte wqe's and removing the typecasts. 64byte wqes are considered a subset of the 128byte wqes. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <james.smart@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
0709263abe
Коммит
205e8240a1
|
@ -4601,11 +4601,18 @@ union lpfc_wqe128 {
|
||||||
struct fcp_icmnd64_wqe fcp_icmd;
|
struct fcp_icmnd64_wqe fcp_icmd;
|
||||||
struct fcp_iread64_wqe fcp_iread;
|
struct fcp_iread64_wqe fcp_iread;
|
||||||
struct fcp_iwrite64_wqe fcp_iwrite;
|
struct fcp_iwrite64_wqe fcp_iwrite;
|
||||||
|
struct abort_cmd_wqe abort_cmd;
|
||||||
|
struct create_xri_wqe create_xri;
|
||||||
|
struct xmit_bcast64_wqe xmit_bcast64;
|
||||||
|
struct xmit_seq64_wqe xmit_sequence;
|
||||||
|
struct xmit_bls_rsp64_wqe xmit_bls_rsp;
|
||||||
|
struct xmit_els_rsp64_wqe xmit_els_rsp;
|
||||||
|
struct els_request64_wqe els_req;
|
||||||
|
struct gen_req64_wqe gen_req;
|
||||||
struct fcp_trsp64_wqe fcp_trsp;
|
struct fcp_trsp64_wqe fcp_trsp;
|
||||||
struct fcp_tsend64_wqe fcp_tsend;
|
struct fcp_tsend64_wqe fcp_tsend;
|
||||||
struct fcp_treceive64_wqe fcp_treceive;
|
struct fcp_treceive64_wqe fcp_treceive;
|
||||||
struct xmit_seq64_wqe xmit_sequence;
|
struct send_frame_wqe send_frame;
|
||||||
struct gen_req64_wqe gen_req;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lpfc_grp_hdr {
|
struct lpfc_grp_hdr {
|
||||||
|
|
|
@ -275,14 +275,14 @@ lpfc_nvme_cmpl_gen_req(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
|
||||||
static int
|
static int
|
||||||
lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
|
lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
|
||||||
struct lpfc_dmabuf *inp,
|
struct lpfc_dmabuf *inp,
|
||||||
struct nvmefc_ls_req *pnvme_lsreq,
|
struct nvmefc_ls_req *pnvme_lsreq,
|
||||||
void (*cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
|
void (*cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
|
||||||
struct lpfc_wcqe_complete *),
|
struct lpfc_wcqe_complete *),
|
||||||
struct lpfc_nodelist *ndlp, uint32_t num_entry,
|
struct lpfc_nodelist *ndlp, uint32_t num_entry,
|
||||||
uint32_t tmo, uint8_t retry)
|
uint32_t tmo, uint8_t retry)
|
||||||
{
|
{
|
||||||
struct lpfc_hba *phba = vport->phba;
|
struct lpfc_hba *phba = vport->phba;
|
||||||
union lpfc_wqe *wqe;
|
union lpfc_wqe128 *wqe;
|
||||||
struct lpfc_iocbq *genwqe;
|
struct lpfc_iocbq *genwqe;
|
||||||
struct ulp_bde64 *bpl;
|
struct ulp_bde64 *bpl;
|
||||||
struct ulp_bde64 bde;
|
struct ulp_bde64 bde;
|
||||||
|
@ -628,8 +628,7 @@ lpfc_nvme_adj_fcp_sgls(struct lpfc_vport *vport,
|
||||||
* the dma address.
|
* the dma address.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* 128 byte wqe support here */
|
wqe = &lpfc_ncmd->cur_iocbq.wqe;
|
||||||
wqe = (union lpfc_wqe128 *)&lpfc_ncmd->cur_iocbq.wqe;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adjust the FCP_CMD and FCP_RSP DMA data and sge_len to
|
* Adjust the FCP_CMD and FCP_RSP DMA data and sge_len to
|
||||||
|
@ -1048,7 +1047,7 @@ lpfc_nvme_prep_io_cmd(struct lpfc_vport *vport,
|
||||||
struct lpfc_hba *phba = vport->phba;
|
struct lpfc_hba *phba = vport->phba;
|
||||||
struct nvmefc_fcp_req *nCmd = lpfc_ncmd->nvmeCmd;
|
struct nvmefc_fcp_req *nCmd = lpfc_ncmd->nvmeCmd;
|
||||||
struct lpfc_iocbq *pwqeq = &(lpfc_ncmd->cur_iocbq);
|
struct lpfc_iocbq *pwqeq = &(lpfc_ncmd->cur_iocbq);
|
||||||
union lpfc_wqe128 *wqe = (union lpfc_wqe128 *)&pwqeq->wqe;
|
union lpfc_wqe128 *wqe = &pwqeq->wqe;
|
||||||
uint32_t req_len;
|
uint32_t req_len;
|
||||||
|
|
||||||
if (!pnode || !NLP_CHK_NODE_ACT(pnode))
|
if (!pnode || !NLP_CHK_NODE_ACT(pnode))
|
||||||
|
@ -1187,7 +1186,7 @@ lpfc_nvme_prep_io_dma(struct lpfc_vport *vport,
|
||||||
{
|
{
|
||||||
struct lpfc_hba *phba = vport->phba;
|
struct lpfc_hba *phba = vport->phba;
|
||||||
struct nvmefc_fcp_req *nCmd = lpfc_ncmd->nvmeCmd;
|
struct nvmefc_fcp_req *nCmd = lpfc_ncmd->nvmeCmd;
|
||||||
union lpfc_wqe128 *wqe = (union lpfc_wqe128 *)&lpfc_ncmd->cur_iocbq.wqe;
|
union lpfc_wqe128 *wqe = &lpfc_ncmd->cur_iocbq.wqe;
|
||||||
struct sli4_sge *sgl = lpfc_ncmd->nvme_sgl;
|
struct sli4_sge *sgl = lpfc_ncmd->nvme_sgl;
|
||||||
struct scatterlist *data_sg;
|
struct scatterlist *data_sg;
|
||||||
struct sli4_sge *first_data_sgl;
|
struct sli4_sge *first_data_sgl;
|
||||||
|
@ -1595,7 +1594,7 @@ lpfc_nvme_fcp_abort(struct nvme_fc_local_port *pnvme_lport,
|
||||||
struct lpfc_iocbq *abts_buf;
|
struct lpfc_iocbq *abts_buf;
|
||||||
struct lpfc_iocbq *nvmereq_wqe;
|
struct lpfc_iocbq *nvmereq_wqe;
|
||||||
struct lpfc_nvme_fcpreq_priv *freqpriv;
|
struct lpfc_nvme_fcpreq_priv *freqpriv;
|
||||||
union lpfc_wqe *abts_wqe;
|
union lpfc_wqe128 *abts_wqe;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int ret_val;
|
int ret_val;
|
||||||
|
|
||||||
|
@ -2139,7 +2138,7 @@ lpfc_new_nvme_buf(struct lpfc_vport *vport, int num_to_alloc)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pwqeq = &(lpfc_ncmd->cur_iocbq);
|
pwqeq = &(lpfc_ncmd->cur_iocbq);
|
||||||
wqe = (union lpfc_wqe128 *)&pwqeq->wqe;
|
wqe = &pwqeq->wqe;
|
||||||
|
|
||||||
/* Allocate iotag for lpfc_ncmd->cur_iocbq. */
|
/* Allocate iotag for lpfc_ncmd->cur_iocbq. */
|
||||||
iotag = lpfc_sli_next_iotag(phba, pwqeq);
|
iotag = lpfc_sli_next_iotag(phba, pwqeq);
|
||||||
|
|
|
@ -1151,7 +1151,7 @@ lpfc_nvmet_setup_io_context(struct lpfc_hba *phba)
|
||||||
}
|
}
|
||||||
ctx_buf->iocbq->iocb_flag = LPFC_IO_NVMET;
|
ctx_buf->iocbq->iocb_flag = LPFC_IO_NVMET;
|
||||||
nvmewqe = ctx_buf->iocbq;
|
nvmewqe = ctx_buf->iocbq;
|
||||||
wqe = (union lpfc_wqe128 *)&nvmewqe->wqe;
|
wqe = &nvmewqe->wqe;
|
||||||
/* Initialize WQE */
|
/* Initialize WQE */
|
||||||
memset(wqe, 0, sizeof(union lpfc_wqe));
|
memset(wqe, 0, sizeof(union lpfc_wqe));
|
||||||
/* Word 7 */
|
/* Word 7 */
|
||||||
|
@ -2025,7 +2025,7 @@ lpfc_nvmet_prep_ls_wqe(struct lpfc_hba *phba,
|
||||||
{
|
{
|
||||||
struct lpfc_nodelist *ndlp;
|
struct lpfc_nodelist *ndlp;
|
||||||
struct lpfc_iocbq *nvmewqe;
|
struct lpfc_iocbq *nvmewqe;
|
||||||
union lpfc_wqe *wqe;
|
union lpfc_wqe128 *wqe;
|
||||||
|
|
||||||
if (!lpfc_is_link_up(phba)) {
|
if (!lpfc_is_link_up(phba)) {
|
||||||
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC,
|
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_DISC,
|
||||||
|
@ -2208,7 +2208,7 @@ lpfc_nvmet_prep_fcp_wqe(struct lpfc_hba *phba,
|
||||||
if (((ctxp->state == LPFC_NVMET_STE_RCV) &&
|
if (((ctxp->state == LPFC_NVMET_STE_RCV) &&
|
||||||
(ctxp->entry_cnt == 1)) ||
|
(ctxp->entry_cnt == 1)) ||
|
||||||
(ctxp->state == LPFC_NVMET_STE_DATA)) {
|
(ctxp->state == LPFC_NVMET_STE_DATA)) {
|
||||||
wqe = (union lpfc_wqe128 *)&nvmewqe->wqe;
|
wqe = &nvmewqe->wqe;
|
||||||
} else {
|
} else {
|
||||||
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
|
lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
|
||||||
"6111 Wrong state NVMET FCP: %d cnt %d\n",
|
"6111 Wrong state NVMET FCP: %d cnt %d\n",
|
||||||
|
@ -2750,7 +2750,7 @@ lpfc_nvmet_unsol_issue_abort(struct lpfc_hba *phba,
|
||||||
{
|
{
|
||||||
struct lpfc_nvmet_tgtport *tgtp;
|
struct lpfc_nvmet_tgtport *tgtp;
|
||||||
struct lpfc_iocbq *abts_wqeq;
|
struct lpfc_iocbq *abts_wqeq;
|
||||||
union lpfc_wqe *wqe_abts;
|
union lpfc_wqe128 *wqe_abts;
|
||||||
struct lpfc_nodelist *ndlp;
|
struct lpfc_nodelist *ndlp;
|
||||||
|
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS,
|
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS,
|
||||||
|
@ -2845,7 +2845,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
|
||||||
{
|
{
|
||||||
struct lpfc_nvmet_tgtport *tgtp;
|
struct lpfc_nvmet_tgtport *tgtp;
|
||||||
struct lpfc_iocbq *abts_wqeq;
|
struct lpfc_iocbq *abts_wqeq;
|
||||||
union lpfc_wqe *abts_wqe;
|
union lpfc_wqe128 *abts_wqe;
|
||||||
struct lpfc_nodelist *ndlp;
|
struct lpfc_nodelist *ndlp;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -3035,7 +3035,7 @@ lpfc_nvmet_unsol_ls_issue_abort(struct lpfc_hba *phba,
|
||||||
{
|
{
|
||||||
struct lpfc_nvmet_tgtport *tgtp;
|
struct lpfc_nvmet_tgtport *tgtp;
|
||||||
struct lpfc_iocbq *abts_wqeq;
|
struct lpfc_iocbq *abts_wqeq;
|
||||||
union lpfc_wqe *wqe_abts;
|
union lpfc_wqe128 *wqe_abts;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ lpfc_get_iocb_from_iocbq(struct lpfc_iocbq *iocbq)
|
||||||
* The caller is expected to hold the hbalock when calling this routine.
|
* The caller is expected to hold the hbalock when calling this routine.
|
||||||
**/
|
**/
|
||||||
static int
|
static int
|
||||||
lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
|
lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe128 *wqe)
|
||||||
{
|
{
|
||||||
union lpfc_wqe *temp_wqe;
|
union lpfc_wqe *temp_wqe;
|
||||||
struct lpfc_register doorbell;
|
struct lpfc_register doorbell;
|
||||||
|
@ -8881,7 +8881,7 @@ lpfc_sli4_bpl2sgl(struct lpfc_hba *phba, struct lpfc_iocbq *piocbq,
|
||||||
**/
|
**/
|
||||||
static int
|
static int
|
||||||
lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
||||||
union lpfc_wqe *wqe)
|
union lpfc_wqe128 *wqe)
|
||||||
{
|
{
|
||||||
uint32_t xmit_len = 0, total_len = 0;
|
uint32_t xmit_len = 0, total_len = 0;
|
||||||
uint8_t ct = 0;
|
uint8_t ct = 0;
|
||||||
|
@ -9096,29 +9096,27 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
||||||
if (phba->fcp_embed_io) {
|
if (phba->fcp_embed_io) {
|
||||||
struct lpfc_scsi_buf *lpfc_cmd;
|
struct lpfc_scsi_buf *lpfc_cmd;
|
||||||
struct sli4_sge *sgl;
|
struct sli4_sge *sgl;
|
||||||
union lpfc_wqe128 *wqe128;
|
|
||||||
struct fcp_cmnd *fcp_cmnd;
|
struct fcp_cmnd *fcp_cmnd;
|
||||||
uint32_t *ptr;
|
uint32_t *ptr;
|
||||||
|
|
||||||
/* 128 byte wqe support here */
|
/* 128 byte wqe support here */
|
||||||
wqe128 = (union lpfc_wqe128 *)wqe;
|
|
||||||
|
|
||||||
lpfc_cmd = iocbq->context1;
|
lpfc_cmd = iocbq->context1;
|
||||||
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
||||||
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
||||||
|
|
||||||
/* Word 0-2 - FCP_CMND */
|
/* Word 0-2 - FCP_CMND */
|
||||||
wqe128->generic.bde.tus.f.bdeFlags =
|
wqe->generic.bde.tus.f.bdeFlags =
|
||||||
BUFF_TYPE_BDE_IMMED;
|
BUFF_TYPE_BDE_IMMED;
|
||||||
wqe128->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
wqe->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
||||||
wqe128->generic.bde.addrHigh = 0;
|
wqe->generic.bde.addrHigh = 0;
|
||||||
wqe128->generic.bde.addrLow = 88; /* Word 22 */
|
wqe->generic.bde.addrLow = 88; /* Word 22 */
|
||||||
|
|
||||||
bf_set(wqe_wqes, &wqe128->fcp_iwrite.wqe_com, 1);
|
bf_set(wqe_wqes, &wqe->fcp_iwrite.wqe_com, 1);
|
||||||
bf_set(wqe_dbde, &wqe128->fcp_iwrite.wqe_com, 0);
|
bf_set(wqe_dbde, &wqe->fcp_iwrite.wqe_com, 0);
|
||||||
|
|
||||||
/* Word 22-29 FCP CMND Payload */
|
/* Word 22-29 FCP CMND Payload */
|
||||||
ptr = &wqe128->words[22];
|
ptr = &wqe->words[22];
|
||||||
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -9162,29 +9160,27 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
||||||
if (phba->fcp_embed_io) {
|
if (phba->fcp_embed_io) {
|
||||||
struct lpfc_scsi_buf *lpfc_cmd;
|
struct lpfc_scsi_buf *lpfc_cmd;
|
||||||
struct sli4_sge *sgl;
|
struct sli4_sge *sgl;
|
||||||
union lpfc_wqe128 *wqe128;
|
|
||||||
struct fcp_cmnd *fcp_cmnd;
|
struct fcp_cmnd *fcp_cmnd;
|
||||||
uint32_t *ptr;
|
uint32_t *ptr;
|
||||||
|
|
||||||
/* 128 byte wqe support here */
|
/* 128 byte wqe support here */
|
||||||
wqe128 = (union lpfc_wqe128 *)wqe;
|
|
||||||
|
|
||||||
lpfc_cmd = iocbq->context1;
|
lpfc_cmd = iocbq->context1;
|
||||||
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
||||||
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
||||||
|
|
||||||
/* Word 0-2 - FCP_CMND */
|
/* Word 0-2 - FCP_CMND */
|
||||||
wqe128->generic.bde.tus.f.bdeFlags =
|
wqe->generic.bde.tus.f.bdeFlags =
|
||||||
BUFF_TYPE_BDE_IMMED;
|
BUFF_TYPE_BDE_IMMED;
|
||||||
wqe128->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
wqe->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
||||||
wqe128->generic.bde.addrHigh = 0;
|
wqe->generic.bde.addrHigh = 0;
|
||||||
wqe128->generic.bde.addrLow = 88; /* Word 22 */
|
wqe->generic.bde.addrLow = 88; /* Word 22 */
|
||||||
|
|
||||||
bf_set(wqe_wqes, &wqe128->fcp_iread.wqe_com, 1);
|
bf_set(wqe_wqes, &wqe->fcp_iread.wqe_com, 1);
|
||||||
bf_set(wqe_dbde, &wqe128->fcp_iread.wqe_com, 0);
|
bf_set(wqe_dbde, &wqe->fcp_iread.wqe_com, 0);
|
||||||
|
|
||||||
/* Word 22-29 FCP CMND Payload */
|
/* Word 22-29 FCP CMND Payload */
|
||||||
ptr = &wqe128->words[22];
|
ptr = &wqe->words[22];
|
||||||
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -9221,29 +9217,27 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
||||||
if (phba->fcp_embed_io) {
|
if (phba->fcp_embed_io) {
|
||||||
struct lpfc_scsi_buf *lpfc_cmd;
|
struct lpfc_scsi_buf *lpfc_cmd;
|
||||||
struct sli4_sge *sgl;
|
struct sli4_sge *sgl;
|
||||||
union lpfc_wqe128 *wqe128;
|
|
||||||
struct fcp_cmnd *fcp_cmnd;
|
struct fcp_cmnd *fcp_cmnd;
|
||||||
uint32_t *ptr;
|
uint32_t *ptr;
|
||||||
|
|
||||||
/* 128 byte wqe support here */
|
/* 128 byte wqe support here */
|
||||||
wqe128 = (union lpfc_wqe128 *)wqe;
|
|
||||||
|
|
||||||
lpfc_cmd = iocbq->context1;
|
lpfc_cmd = iocbq->context1;
|
||||||
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
sgl = (struct sli4_sge *)lpfc_cmd->fcp_bpl;
|
||||||
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
fcp_cmnd = lpfc_cmd->fcp_cmnd;
|
||||||
|
|
||||||
/* Word 0-2 - FCP_CMND */
|
/* Word 0-2 - FCP_CMND */
|
||||||
wqe128->generic.bde.tus.f.bdeFlags =
|
wqe->generic.bde.tus.f.bdeFlags =
|
||||||
BUFF_TYPE_BDE_IMMED;
|
BUFF_TYPE_BDE_IMMED;
|
||||||
wqe128->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
wqe->generic.bde.tus.f.bdeSize = sgl->sge_len;
|
||||||
wqe128->generic.bde.addrHigh = 0;
|
wqe->generic.bde.addrHigh = 0;
|
||||||
wqe128->generic.bde.addrLow = 88; /* Word 22 */
|
wqe->generic.bde.addrLow = 88; /* Word 22 */
|
||||||
|
|
||||||
bf_set(wqe_wqes, &wqe128->fcp_icmd.wqe_com, 1);
|
bf_set(wqe_wqes, &wqe->fcp_icmd.wqe_com, 1);
|
||||||
bf_set(wqe_dbde, &wqe128->fcp_icmd.wqe_com, 0);
|
bf_set(wqe_dbde, &wqe->fcp_icmd.wqe_com, 0);
|
||||||
|
|
||||||
/* Word 22-29 FCP CMND Payload */
|
/* Word 22-29 FCP CMND Payload */
|
||||||
ptr = &wqe128->words[22];
|
ptr = &wqe->words[22];
|
||||||
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
memcpy(ptr, fcp_cmnd, sizeof(struct fcp_cmnd));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -9481,8 +9475,7 @@ __lpfc_sli_issue_iocb_s4(struct lpfc_hba *phba, uint32_t ring_number,
|
||||||
struct lpfc_iocbq *piocb, uint32_t flag)
|
struct lpfc_iocbq *piocb, uint32_t flag)
|
||||||
{
|
{
|
||||||
struct lpfc_sglq *sglq;
|
struct lpfc_sglq *sglq;
|
||||||
union lpfc_wqe *wqe;
|
union lpfc_wqe128 wqe;
|
||||||
union lpfc_wqe128 wqe128;
|
|
||||||
struct lpfc_queue *wq;
|
struct lpfc_queue *wq;
|
||||||
struct lpfc_sli_ring *pring;
|
struct lpfc_sli_ring *pring;
|
||||||
|
|
||||||
|
@ -9502,9 +9495,7 @@ __lpfc_sli_issue_iocb_s4(struct lpfc_hba *phba, uint32_t ring_number,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The WQE can be either 64 or 128 bytes,
|
* The WQE can be either 64 or 128 bytes,
|
||||||
* so allocate space on the stack assuming the largest.
|
|
||||||
*/
|
*/
|
||||||
wqe = (union lpfc_wqe *)&wqe128;
|
|
||||||
|
|
||||||
lockdep_assert_held(&phba->hbalock);
|
lockdep_assert_held(&phba->hbalock);
|
||||||
|
|
||||||
|
@ -9554,10 +9545,10 @@ __lpfc_sli_issue_iocb_s4(struct lpfc_hba *phba, uint32_t ring_number,
|
||||||
return IOCB_ERROR;
|
return IOCB_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpfc_sli4_iocb2wqe(phba, piocb, wqe))
|
if (lpfc_sli4_iocb2wqe(phba, piocb, &wqe))
|
||||||
return IOCB_ERROR;
|
return IOCB_ERROR;
|
||||||
|
|
||||||
if (lpfc_sli4_wq_put(wq, wqe))
|
if (lpfc_sli4_wq_put(wq, &wqe))
|
||||||
return IOCB_ERROR;
|
return IOCB_ERROR;
|
||||||
lpfc_sli_ringtxcmpl_put(phba, pring, piocb);
|
lpfc_sli_ringtxcmpl_put(phba, pring, piocb);
|
||||||
|
|
||||||
|
@ -10927,7 +10918,7 @@ lpfc_sli4_abort_nvme_io(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
|
||||||
{
|
{
|
||||||
struct lpfc_vport *vport = cmdiocb->vport;
|
struct lpfc_vport *vport = cmdiocb->vport;
|
||||||
struct lpfc_iocbq *abtsiocbp;
|
struct lpfc_iocbq *abtsiocbp;
|
||||||
union lpfc_wqe *abts_wqe;
|
union lpfc_wqe128 *abts_wqe;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19048,8 +19039,7 @@ lpfc_drain_txq(struct lpfc_hba *phba)
|
||||||
unsigned long iflags = 0;
|
unsigned long iflags = 0;
|
||||||
char *fail_msg = NULL;
|
char *fail_msg = NULL;
|
||||||
struct lpfc_sglq *sglq;
|
struct lpfc_sglq *sglq;
|
||||||
union lpfc_wqe128 wqe128;
|
union lpfc_wqe128 wqe;
|
||||||
union lpfc_wqe *wqe = (union lpfc_wqe *) &wqe128;
|
|
||||||
uint32_t txq_cnt = 0;
|
uint32_t txq_cnt = 0;
|
||||||
|
|
||||||
pring = lpfc_phba_elsring(phba);
|
pring = lpfc_phba_elsring(phba);
|
||||||
|
@ -19092,9 +19082,9 @@ lpfc_drain_txq(struct lpfc_hba *phba)
|
||||||
piocbq->sli4_xritag = sglq->sli4_xritag;
|
piocbq->sli4_xritag = sglq->sli4_xritag;
|
||||||
if (NO_XRI == lpfc_sli4_bpl2sgl(phba, piocbq, sglq))
|
if (NO_XRI == lpfc_sli4_bpl2sgl(phba, piocbq, sglq))
|
||||||
fail_msg = "to convert bpl to sgl";
|
fail_msg = "to convert bpl to sgl";
|
||||||
else if (lpfc_sli4_iocb2wqe(phba, piocbq, wqe))
|
else if (lpfc_sli4_iocb2wqe(phba, piocbq, &wqe))
|
||||||
fail_msg = "to convert iocb to wqe";
|
fail_msg = "to convert iocb to wqe";
|
||||||
else if (lpfc_sli4_wq_put(phba->sli4_hba.els_wq, wqe))
|
else if (lpfc_sli4_wq_put(phba->sli4_hba.els_wq, &wqe))
|
||||||
fail_msg = " - Wq is full";
|
fail_msg = " - Wq is full";
|
||||||
else
|
else
|
||||||
lpfc_sli_ringtxcmpl_put(phba, pring, piocbq);
|
lpfc_sli_ringtxcmpl_put(phba, pring, piocbq);
|
||||||
|
@ -19144,7 +19134,7 @@ lpfc_wqe_bpl2sgl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeq,
|
||||||
struct ulp_bde64 bde;
|
struct ulp_bde64 bde;
|
||||||
struct sli4_sge *sgl = NULL;
|
struct sli4_sge *sgl = NULL;
|
||||||
struct lpfc_dmabuf *dmabuf;
|
struct lpfc_dmabuf *dmabuf;
|
||||||
union lpfc_wqe *wqe;
|
union lpfc_wqe128 *wqe;
|
||||||
int numBdes = 0;
|
int numBdes = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
uint32_t offset = 0; /* accumulated offset in the sg request list */
|
uint32_t offset = 0; /* accumulated offset in the sg request list */
|
||||||
|
@ -19253,7 +19243,7 @@ int
|
||||||
lpfc_sli4_issue_wqe(struct lpfc_hba *phba, uint32_t ring_number,
|
lpfc_sli4_issue_wqe(struct lpfc_hba *phba, uint32_t ring_number,
|
||||||
struct lpfc_iocbq *pwqe)
|
struct lpfc_iocbq *pwqe)
|
||||||
{
|
{
|
||||||
union lpfc_wqe *wqe = &pwqe->wqe;
|
union lpfc_wqe128 *wqe = &pwqe->wqe;
|
||||||
struct lpfc_nvmet_rcv_ctx *ctxp;
|
struct lpfc_nvmet_rcv_ctx *ctxp;
|
||||||
struct lpfc_queue *wq;
|
struct lpfc_queue *wq;
|
||||||
struct lpfc_sglq *sglq;
|
struct lpfc_sglq *sglq;
|
||||||
|
|
|
@ -61,9 +61,8 @@ struct lpfc_iocbq {
|
||||||
struct lpfc_wcqe_complete wcqe_cmpl; /* WQE cmpl */
|
struct lpfc_wcqe_complete wcqe_cmpl; /* WQE cmpl */
|
||||||
uint64_t isr_timestamp;
|
uint64_t isr_timestamp;
|
||||||
|
|
||||||
/* Be careful here */
|
union lpfc_wqe128 wqe; /* SLI-4 */
|
||||||
union lpfc_wqe wqe; /* WQE cmd */
|
IOCB_t iocb; /* SLI-3 */
|
||||||
IOCB_t iocb; /* For IOCB cmd or if we want 128 byte WQE */
|
|
||||||
|
|
||||||
uint8_t rsvd2;
|
uint8_t rsvd2;
|
||||||
uint8_t priority; /* OAS priority */
|
uint8_t priority; /* OAS priority */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче