mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
scsi: lpfc: Refactor lpfc_nvmet_prep_abort_wqe() into lpfc_sli_prep_abort_xri()
lpfc_nvmet_prep_abort_wqe() has a lot of common code with lpfc_sli_prep_abort_xri(). Delete lpfc_nvmet_prep_abort_wqe() as the wqe can be filled out using the generic lpfc_sli_prep_abort_xri routine(). Add the wqec option to lpfc_sli_prep_abort_xri() for lpfc_nvmet_prep_abort_wqe(). Link: https://lore.kernel.org/r/20220701211425.2708-10-jsmart2021@gmail.com Co-developed-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
ffc566411a
commit
b21c9deb14
@ -986,7 +986,8 @@ struct lpfc_hba {
|
||||
u8 last_seq, u8 cr_cx_cmd);
|
||||
void (*__lpfc_sli_prep_abort_xri)(struct lpfc_iocbq *cmdiocbq,
|
||||
u16 ulp_context, u16 iotag,
|
||||
u8 ulp_class, u16 cqid, bool ia);
|
||||
u8 ulp_class, u16 cqid, bool ia,
|
||||
bool wqec);
|
||||
|
||||
/* expedite pool */
|
||||
struct lpfc_epd_pool epd_pool;
|
||||
|
@ -370,7 +370,7 @@ void lpfc_sli_prep_xmit_seq64(struct lpfc_hba *phba,
|
||||
u8 cr_cx_cmd);
|
||||
void lpfc_sli_prep_abort_xri(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocbq,
|
||||
u16 ulp_context, u16 iotag, u8 ulp_class, u16 cqid,
|
||||
bool ia);
|
||||
bool ia, bool wqec);
|
||||
struct lpfc_sglq *__lpfc_clear_active_sglq(struct lpfc_hba *phba, uint16_t xri);
|
||||
struct lpfc_sglq *__lpfc_sli_get_nvmet_sglq(struct lpfc_hba *phba,
|
||||
struct lpfc_iocbq *piocbq);
|
||||
|
@ -4736,7 +4736,6 @@ struct create_xri_wqe {
|
||||
uint32_t rsvd_12_15[4]; /* word 12-15 */
|
||||
};
|
||||
|
||||
#define INHIBIT_ABORT 1
|
||||
#define T_REQUEST_TAG 3
|
||||
#define T_XRI_TAG 1
|
||||
|
||||
|
@ -3335,46 +3335,6 @@ lpfc_nvmet_unsol_issue_abort(struct lpfc_hba *phba,
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* lpfc_nvmet_prep_abort_wqe - set up 'abort' work queue entry.
|
||||
* @pwqeq: Pointer to command iocb.
|
||||
* @xritag: Tag that uniqely identifies the local exchange resource.
|
||||
* @opt: Option bits -
|
||||
* bit 0 = inhibit sending abts on the link
|
||||
*
|
||||
* This function is called with hbalock held.
|
||||
**/
|
||||
static void
|
||||
lpfc_nvmet_prep_abort_wqe(struct lpfc_iocbq *pwqeq, u16 xritag, u8 opt)
|
||||
{
|
||||
union lpfc_wqe128 *wqe = &pwqeq->wqe;
|
||||
|
||||
/* WQEs are reused. Clear stale data and set key fields to
|
||||
* zero like ia, iaab, iaar, xri_tag, and ctxt_tag.
|
||||
*/
|
||||
memset(wqe, 0, sizeof(*wqe));
|
||||
|
||||
if (opt & INHIBIT_ABORT)
|
||||
bf_set(abort_cmd_ia, &wqe->abort_cmd, 1);
|
||||
/* Abort specified xri tag, with the mask deliberately zeroed */
|
||||
bf_set(abort_cmd_criteria, &wqe->abort_cmd, T_XRI_TAG);
|
||||
|
||||
bf_set(wqe_cmnd, &wqe->abort_cmd.wqe_com, CMD_ABORT_XRI_CX);
|
||||
|
||||
/* Abort the I/O associated with this outstanding exchange ID. */
|
||||
wqe->abort_cmd.wqe_com.abort_tag = xritag;
|
||||
|
||||
/* iotag for the wqe completion. */
|
||||
bf_set(wqe_reqtag, &wqe->abort_cmd.wqe_com, pwqeq->iotag);
|
||||
|
||||
bf_set(wqe_qosd, &wqe->abort_cmd.wqe_com, 1);
|
||||
bf_set(wqe_lenloc, &wqe->abort_cmd.wqe_com, LPFC_WQE_LENLOC_NONE);
|
||||
|
||||
bf_set(wqe_cmd_type, &wqe->abort_cmd.wqe_com, OTHER_COMMAND);
|
||||
bf_set(wqe_wqec, &wqe->abort_cmd.wqe_com, 1);
|
||||
bf_set(wqe_cqid, &wqe->abort_cmd.wqe_com, LPFC_WQE_CQ_ID_DEFAULT);
|
||||
}
|
||||
|
||||
static int
|
||||
lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
|
||||
struct lpfc_async_xchg_ctx *ctxp,
|
||||
@ -3384,7 +3344,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
|
||||
struct lpfc_iocbq *abts_wqeq;
|
||||
struct lpfc_nodelist *ndlp;
|
||||
unsigned long flags;
|
||||
u8 opt;
|
||||
bool ia;
|
||||
int rc;
|
||||
|
||||
tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
|
||||
@ -3424,7 +3384,7 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
|
||||
}
|
||||
abts_wqeq = ctxp->abort_wqeq;
|
||||
ctxp->state = LPFC_NVME_STE_ABORT;
|
||||
opt = (ctxp->flag & LPFC_NVME_ABTS_RCV) ? INHIBIT_ABORT : 0;
|
||||
ia = (ctxp->flag & LPFC_NVME_ABTS_RCV) ? true : false;
|
||||
spin_unlock_irqrestore(&ctxp->ctxlock, flags);
|
||||
|
||||
/* Announce entry to new IO submit field. */
|
||||
@ -3470,7 +3430,9 @@ lpfc_nvmet_sol_fcp_issue_abort(struct lpfc_hba *phba,
|
||||
/* Ready - mark outstanding as aborted by driver. */
|
||||
abts_wqeq->cmd_flag |= LPFC_DRIVER_ABORTED;
|
||||
|
||||
lpfc_nvmet_prep_abort_wqe(abts_wqeq, ctxp->wqeq->sli4_xritag, opt);
|
||||
lpfc_sli_prep_abort_xri(phba, abts_wqeq, ctxp->wqeq->sli4_xritag,
|
||||
abts_wqeq->iotag, CLASS3,
|
||||
LPFC_WQE_CQ_ID_DEFAULT, ia, true);
|
||||
|
||||
/* ABTS WQE must go to the same WQ as the WQE to be aborted */
|
||||
abts_wqeq->hba_wqidx = ctxp->wqeq->hba_wqidx;
|
||||
|
@ -10863,7 +10863,8 @@ lpfc_sli_prep_xmit_seq64(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocbq,
|
||||
|
||||
static void
|
||||
__lpfc_sli_prep_abort_xri_s3(struct lpfc_iocbq *cmdiocbq, u16 ulp_context,
|
||||
u16 iotag, u8 ulp_class, u16 cqid, bool ia)
|
||||
u16 iotag, u8 ulp_class, u16 cqid, bool ia,
|
||||
bool wqec)
|
||||
{
|
||||
IOCB_t *icmd = NULL;
|
||||
|
||||
@ -10892,7 +10893,8 @@ __lpfc_sli_prep_abort_xri_s3(struct lpfc_iocbq *cmdiocbq, u16 ulp_context,
|
||||
|
||||
static void
|
||||
__lpfc_sli_prep_abort_xri_s4(struct lpfc_iocbq *cmdiocbq, u16 ulp_context,
|
||||
u16 iotag, u8 ulp_class, u16 cqid, bool ia)
|
||||
u16 iotag, u8 ulp_class, u16 cqid, bool ia,
|
||||
bool wqec)
|
||||
{
|
||||
union lpfc_wqe128 *wqe;
|
||||
|
||||
@ -10919,6 +10921,8 @@ __lpfc_sli_prep_abort_xri_s4(struct lpfc_iocbq *cmdiocbq, u16 ulp_context,
|
||||
bf_set(wqe_qosd, &wqe->abort_cmd.wqe_com, 1);
|
||||
|
||||
/* Word 11 */
|
||||
if (wqec)
|
||||
bf_set(wqe_wqec, &wqe->abort_cmd.wqe_com, 1);
|
||||
bf_set(wqe_cqid, &wqe->abort_cmd.wqe_com, cqid);
|
||||
bf_set(wqe_cmd_type, &wqe->abort_cmd.wqe_com, OTHER_COMMAND);
|
||||
}
|
||||
@ -10926,10 +10930,10 @@ __lpfc_sli_prep_abort_xri_s4(struct lpfc_iocbq *cmdiocbq, u16 ulp_context,
|
||||
void
|
||||
lpfc_sli_prep_abort_xri(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocbq,
|
||||
u16 ulp_context, u16 iotag, u8 ulp_class, u16 cqid,
|
||||
bool ia)
|
||||
bool ia, bool wqec)
|
||||
{
|
||||
phba->__lpfc_sli_prep_abort_xri(cmdiocbq, ulp_context, iotag, ulp_class,
|
||||
cqid, ia);
|
||||
cqid, ia, wqec);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -12207,7 +12211,7 @@ lpfc_sli_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
|
||||
|
||||
lpfc_sli_prep_abort_xri(phba, abtsiocbp, ulp_context, iotag,
|
||||
cmdiocb->iocb.ulpClass,
|
||||
LPFC_WQE_CQ_ID_DEFAULT, ia);
|
||||
LPFC_WQE_CQ_ID_DEFAULT, ia, false);
|
||||
|
||||
abtsiocbp->vport = vport;
|
||||
|
||||
@ -12667,7 +12671,7 @@ lpfc_sli_abort_taskmgmt(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
|
||||
|
||||
lpfc_sli_prep_abort_xri(phba, abtsiocbq, ulp_context, iotag,
|
||||
iocbq->iocb.ulpClass, cqid,
|
||||
ia);
|
||||
ia, false);
|
||||
|
||||
abtsiocbq->vport = vport;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user