scsi: lpfc: refactor mailbox structure context fields

The driver data structure for managing a mailbox command contained two
context fields. Unfortunately, the context were considered "generic" to be
used at the whim of the command code.  Of course, one section of code used
fields this way, while another did it that way, and eventually there were
mixups.

Refactored the structure so that the generic contexts become a node context
and a buffer context and all code standardizes on their use.

Signed-off-by: Dick Kennedy <dick.kennedy@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:
James Smart 2018-11-29 16:09:29 -08:00 committed by Martin K. Petersen
parent 0f31e9593a
commit 3e1f071892
11 changed files with 165 additions and 161 deletions

View File

@ -1688,7 +1688,7 @@ lpfc_get_hba_info(struct lpfc_hba *phba,
pmb = &pmboxq->u.mb; pmb = &pmboxq->u.mb;
pmb->mbxCommand = MBX_READ_CONFIG; pmb->mbxCommand = MBX_READ_CONFIG;
pmb->mbxOwner = OWN_HOST; pmb->mbxOwner = OWN_HOST;
pmboxq->context1 = NULL; pmboxq->ctx_buf = NULL;
if (phba->pport->fc_flag & FC_OFFLINE_MODE) if (phba->pport->fc_flag & FC_OFFLINE_MODE)
rc = MBX_NOT_FINISHED; rc = MBX_NOT_FINISHED;
@ -6219,7 +6219,7 @@ lpfc_get_stats(struct Scsi_Host *shost)
pmb = &pmboxq->u.mb; pmb = &pmboxq->u.mb;
pmb->mbxCommand = MBX_READ_STATUS; pmb->mbxCommand = MBX_READ_STATUS;
pmb->mbxOwner = OWN_HOST; pmb->mbxOwner = OWN_HOST;
pmboxq->context1 = NULL; pmboxq->ctx_buf = NULL;
pmboxq->vport = vport; pmboxq->vport = vport;
if (vport->fc_flag & FC_OFFLINE_MODE) if (vport->fc_flag & FC_OFFLINE_MODE)
@ -6251,7 +6251,7 @@ lpfc_get_stats(struct Scsi_Host *shost)
memset(pmboxq, 0, sizeof (LPFC_MBOXQ_t)); memset(pmboxq, 0, sizeof (LPFC_MBOXQ_t));
pmb->mbxCommand = MBX_READ_LNK_STAT; pmb->mbxCommand = MBX_READ_LNK_STAT;
pmb->mbxOwner = OWN_HOST; pmb->mbxOwner = OWN_HOST;
pmboxq->context1 = NULL; pmboxq->ctx_buf = NULL;
pmboxq->vport = vport; pmboxq->vport = vport;
if (vport->fc_flag & FC_OFFLINE_MODE) if (vport->fc_flag & FC_OFFLINE_MODE)
@ -6331,7 +6331,7 @@ lpfc_reset_stats(struct Scsi_Host *shost)
pmb->mbxCommand = MBX_READ_STATUS; pmb->mbxCommand = MBX_READ_STATUS;
pmb->mbxOwner = OWN_HOST; pmb->mbxOwner = OWN_HOST;
pmb->un.varWords[0] = 0x1; /* reset request */ pmb->un.varWords[0] = 0x1; /* reset request */
pmboxq->context1 = NULL; pmboxq->ctx_buf = NULL;
pmboxq->vport = vport; pmboxq->vport = vport;
if ((vport->fc_flag & FC_OFFLINE_MODE) || if ((vport->fc_flag & FC_OFFLINE_MODE) ||
@ -6349,7 +6349,7 @@ lpfc_reset_stats(struct Scsi_Host *shost)
memset(pmboxq, 0, sizeof(LPFC_MBOXQ_t)); memset(pmboxq, 0, sizeof(LPFC_MBOXQ_t));
pmb->mbxCommand = MBX_READ_LNK_STAT; pmb->mbxCommand = MBX_READ_LNK_STAT;
pmb->mbxOwner = OWN_HOST; pmb->mbxOwner = OWN_HOST;
pmboxq->context1 = NULL; pmboxq->ctx_buf = NULL;
pmboxq->vport = vport; pmboxq->vport = vport;
if ((vport->fc_flag & FC_OFFLINE_MODE) || if ((vport->fc_flag & FC_OFFLINE_MODE) ||

View File

@ -2501,9 +2501,9 @@ static int lpfcdiag_loop_self_reg(struct lpfc_hba *phba, uint16_t *rpi)
return -ENOMEM; return -ENOMEM;
} }
dmabuff = (struct lpfc_dmabuf *) mbox->context1; dmabuff = (struct lpfc_dmabuf *)mbox->ctx_buf;
mbox->context1 = NULL; mbox->ctx_buf = NULL;
mbox->context2 = NULL; mbox->ctx_ndlp = NULL;
status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO);
if ((status != MBX_SUCCESS) || (mbox->u.mb.mbxStatus)) { if ((status != MBX_SUCCESS) || (mbox->u.mb.mbxStatus)) {
@ -3388,7 +3388,7 @@ lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
unsigned long flags; unsigned long flags;
uint8_t *pmb, *pmb_buf; uint8_t *pmb, *pmb_buf;
dd_data = pmboxq->context1; dd_data = pmboxq->ctx_ndlp;
/* /*
* The outgoing buffer is readily referred from the dma buffer, * The outgoing buffer is readily referred from the dma buffer,
@ -3573,7 +3573,7 @@ lpfc_bsg_issue_mbox_ext_handle_job(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
struct lpfc_sli_config_mbox *sli_cfg_mbx; struct lpfc_sli_config_mbox *sli_cfg_mbx;
uint8_t *pmbx; uint8_t *pmbx;
dd_data = pmboxq->context1; dd_data = pmboxq->ctx_buf;
/* Determine if job has been aborted */ /* Determine if job has been aborted */
spin_lock_irqsave(&phba->ct_ev_lock, flags); spin_lock_irqsave(&phba->ct_ev_lock, flags);
@ -3960,7 +3960,7 @@ lpfc_bsg_sli_cfg_read_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job,
pmboxq->mbox_cmpl = lpfc_bsg_issue_read_mbox_ext_cmpl; pmboxq->mbox_cmpl = lpfc_bsg_issue_read_mbox_ext_cmpl;
/* context fields to callback function */ /* context fields to callback function */
pmboxq->context1 = dd_data; pmboxq->ctx_buf = dd_data;
dd_data->type = TYPE_MBOX; dd_data->type = TYPE_MBOX;
dd_data->set_job = job; dd_data->set_job = job;
dd_data->context_un.mbox.pmboxq = pmboxq; dd_data->context_un.mbox.pmboxq = pmboxq;
@ -4131,7 +4131,7 @@ lpfc_bsg_sli_cfg_write_cmd_ext(struct lpfc_hba *phba, struct bsg_job *job,
pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl; pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl;
/* context fields to callback function */ /* context fields to callback function */
pmboxq->context1 = dd_data; pmboxq->ctx_buf = dd_data;
dd_data->type = TYPE_MBOX; dd_data->type = TYPE_MBOX;
dd_data->set_job = job; dd_data->set_job = job;
dd_data->context_un.mbox.pmboxq = pmboxq; dd_data->context_un.mbox.pmboxq = pmboxq;
@ -4476,7 +4476,7 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl; pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl;
/* context fields to callback function */ /* context fields to callback function */
pmboxq->context1 = dd_data; pmboxq->ctx_buf = dd_data;
dd_data->type = TYPE_MBOX; dd_data->type = TYPE_MBOX;
dd_data->set_job = job; dd_data->set_job = job;
dd_data->context_un.mbox.pmboxq = pmboxq; dd_data->context_un.mbox.pmboxq = pmboxq;
@ -4761,7 +4761,7 @@ lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct bsg_job *job,
if (mbox_req->inExtWLen || mbox_req->outExtWLen) { if (mbox_req->inExtWLen || mbox_req->outExtWLen) {
from = pmbx; from = pmbx;
ext = from + sizeof(MAILBOX_t); ext = from + sizeof(MAILBOX_t);
pmboxq->context2 = ext; pmboxq->ctx_buf = ext;
pmboxq->in_ext_byte_len = pmboxq->in_ext_byte_len =
mbox_req->inExtWLen * sizeof(uint32_t); mbox_req->inExtWLen * sizeof(uint32_t);
pmboxq->out_ext_byte_len = pmboxq->out_ext_byte_len =
@ -4889,7 +4889,7 @@ lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct bsg_job *job,
pmboxq->mbox_cmpl = lpfc_bsg_issue_mbox_cmpl; pmboxq->mbox_cmpl = lpfc_bsg_issue_mbox_cmpl;
/* setup context field to pass wait_queue pointer to wake function */ /* setup context field to pass wait_queue pointer to wake function */
pmboxq->context1 = dd_data; pmboxq->ctx_ndlp = dd_data;
dd_data->type = TYPE_MBOX; dd_data->type = TYPE_MBOX;
dd_data->set_job = job; dd_data->set_job = job;
dd_data->context_un.mbox.pmboxq = pmboxq; dd_data->context_un.mbox.pmboxq = pmboxq;

View File

@ -415,7 +415,7 @@ lpfc_issue_fabric_reglogin(struct lpfc_vport *vport)
/* increment the reference count on ndlp to hold reference /* increment the reference count on ndlp to hold reference
* for the callback routine. * for the callback routine.
*/ */
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) { if (rc == MBX_NOT_FINISHED) {
@ -430,7 +430,7 @@ fail_issue_reg_login:
* for the failed mbox command. * for the failed mbox command.
*/ */
lpfc_nlp_put(ndlp); lpfc_nlp_put(ndlp);
mp = (struct lpfc_dmabuf *) mbox->context1; mp = (struct lpfc_dmabuf *)mbox->ctx_buf;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
fail_free_mbox: fail_free_mbox:
@ -504,7 +504,7 @@ lpfc_issue_reg_vfi(struct lpfc_vport *vport)
mboxq->mbox_cmpl = lpfc_mbx_cmpl_reg_vfi; mboxq->mbox_cmpl = lpfc_mbx_cmpl_reg_vfi;
mboxq->vport = vport; mboxq->vport = vport;
mboxq->context1 = dmabuf; mboxq->ctx_buf = dmabuf;
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) { if (rc == MBX_NOT_FINISHED) {
rc = -ENXIO; rc = -ENXIO;
@ -3990,11 +3990,11 @@ lpfc_cmpl_els_logo_acc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
void void
lpfc_mbx_cmpl_dflt_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_mbx_cmpl_dflt_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -4070,7 +4070,7 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
/* Check to see if link went down during discovery */ /* Check to see if link went down during discovery */
if (!ndlp || !NLP_CHK_NODE_ACT(ndlp) || lpfc_els_chk_latt(vport)) { if (!ndlp || !NLP_CHK_NODE_ACT(ndlp) || lpfc_els_chk_latt(vport)) {
if (mbox) { if (mbox) {
mp = (struct lpfc_dmabuf *) mbox->context1; mp = (struct lpfc_dmabuf *)mbox->ctx_buf;
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -4114,7 +4114,7 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
"Data: x%x x%x x%x\n", "Data: x%x x%x x%x\n",
ndlp->nlp_DID, ndlp->nlp_state, ndlp->nlp_DID, ndlp->nlp_state,
ndlp->nlp_rpi, ndlp->nlp_flag); ndlp->nlp_rpi, ndlp->nlp_flag);
mp = mbox->context1; mp = mbox->ctx_buf;
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, lpfc_mbuf_free(phba, mp->virt,
mp->phys); mp->phys);
@ -4127,7 +4127,7 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
/* Increment reference count to ndlp to hold the /* Increment reference count to ndlp to hold the
* reference to ndlp for the callback function. * reference to ndlp for the callback function.
*/ */
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->vport = vport; mbox->vport = vport;
if (ndlp->nlp_flag & NLP_RM_DFLT_RPI) { if (ndlp->nlp_flag & NLP_RM_DFLT_RPI) {
mbox->mbox_flag |= LPFC_MBX_IMED_UNREG; mbox->mbox_flag |= LPFC_MBX_IMED_UNREG;
@ -4181,7 +4181,7 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
} }
} }
} }
mp = (struct lpfc_dmabuf *) mbox->context1; mp = (struct lpfc_dmabuf *)mbox->ctx_buf;
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -5597,7 +5597,7 @@ lpfc_get_rdp_info(struct lpfc_hba *phba, struct lpfc_rdp_context *rdp_context)
goto prep_mbox_fail; goto prep_mbox_fail;
mbox->vport = rdp_context->ndlp->vport; mbox->vport = rdp_context->ndlp->vport;
mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a0; mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a0;
mbox->context2 = (struct lpfc_rdp_context *) rdp_context; mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) if (rc == MBX_NOT_FINISHED)
goto issue_mbox_fail; goto issue_mbox_fail;
@ -5722,10 +5722,10 @@ lpfc_els_lcb_rsp(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
int rc; int rc;
mb = &pmb->u.mb; mb = &pmb->u.mb;
lcb_context = (struct lpfc_lcb_context *)pmb->context1; lcb_context = (struct lpfc_lcb_context *)pmb->ctx_ndlp;
ndlp = lcb_context->ndlp; ndlp = lcb_context->ndlp;
pmb->context1 = NULL; pmb->ctx_ndlp = NULL;
pmb->context2 = NULL; pmb->ctx_buf = NULL;
shdr = (union lpfc_sli4_cfg_shdr *) shdr = (union lpfc_sli4_cfg_shdr *)
&pmb->u.mqe.un.beacon_config.header.cfg_shdr; &pmb->u.mqe.un.beacon_config.header.cfg_shdr;
@ -5832,7 +5832,7 @@ lpfc_sli4_set_beacon(struct lpfc_vport *vport,
lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON, lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
LPFC_MBOX_OPCODE_SET_BEACON_CONFIG, len, LPFC_MBOX_OPCODE_SET_BEACON_CONFIG, len,
LPFC_SLI4_MBX_EMBED); LPFC_SLI4_MBX_EMBED);
mbox->context1 = (void *)lcb_context; mbox->ctx_ndlp = (void *)lcb_context;
mbox->vport = phba->pport; mbox->vport = phba->pport;
mbox->mbox_cmpl = lpfc_els_lcb_rsp; mbox->mbox_cmpl = lpfc_els_lcb_rsp;
bf_set(lpfc_mbx_set_beacon_port_num, &mbox->u.mqe.un.beacon_config, bf_set(lpfc_mbx_set_beacon_port_num, &mbox->u.mqe.un.beacon_config,
@ -6758,11 +6758,11 @@ lpfc_els_rsp_rls_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
mb = &pmb->u.mb; mb = &pmb->u.mb;
ndlp = (struct lpfc_nodelist *) pmb->context2; ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
rxid = (uint16_t) ((unsigned long)(pmb->context1) & 0xffff); rxid = (uint16_t)((unsigned long)(pmb->ctx_buf) & 0xffff);
oxid = (uint16_t) (((unsigned long)(pmb->context1) >> 16) & 0xffff); oxid = (uint16_t)(((unsigned long)(pmb->ctx_buf) >> 16) & 0xffff);
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
if (mb->mbxStatus) { if (mb->mbxStatus) {
mempool_free(pmb, phba->mbox_mem_pool); mempool_free(pmb, phba->mbox_mem_pool);
@ -6846,11 +6846,11 @@ lpfc_els_rsp_rps_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
mb = &pmb->u.mb; mb = &pmb->u.mb;
ndlp = (struct lpfc_nodelist *) pmb->context2; ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
rxid = (uint16_t) ((unsigned long)(pmb->context1) & 0xffff); rxid = (uint16_t)((unsigned long)(pmb->ctx_buf) & 0xffff);
oxid = (uint16_t) (((unsigned long)(pmb->context1) >> 16) & 0xffff); oxid = (uint16_t)(((unsigned long)(pmb->ctx_buf) >> 16) & 0xffff);
pmb->context1 = NULL; pmb->ctx_ndlp = NULL;
pmb->context2 = NULL; pmb->ctx_buf = NULL;
if (mb->mbxStatus) { if (mb->mbxStatus) {
mempool_free(pmb, phba->mbox_mem_pool); mempool_free(pmb, phba->mbox_mem_pool);
@ -6941,10 +6941,10 @@ lpfc_els_rcv_rls(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC); mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC);
if (mbox) { if (mbox) {
lpfc_read_lnk_stat(phba, mbox); lpfc_read_lnk_stat(phba, mbox);
mbox->context1 = (void *)((unsigned long) mbox->ctx_buf = (void *)((unsigned long)
((cmdiocb->iocb.unsli3.rcvsli3.ox_id << 16) | ((cmdiocb->iocb.unsli3.rcvsli3.ox_id << 16) |
cmdiocb->iocb.ulpContext)); /* rx_id */ cmdiocb->iocb.ulpContext)); /* rx_id */
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->vport = vport; mbox->vport = vport;
mbox->mbox_cmpl = lpfc_els_rsp_rls_acc; mbox->mbox_cmpl = lpfc_els_rsp_rls_acc;
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT)
@ -7104,10 +7104,10 @@ lpfc_els_rcv_rps(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC); mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC);
if (mbox) { if (mbox) {
lpfc_read_lnk_stat(phba, mbox); lpfc_read_lnk_stat(phba, mbox);
mbox->context1 = (void *)((unsigned long) mbox->ctx_buf = (void *)((unsigned long)
((cmdiocb->iocb.unsli3.rcvsli3.ox_id << 16) | ((cmdiocb->iocb.unsli3.rcvsli3.ox_id << 16) |
cmdiocb->iocb.ulpContext)); /* rx_id */ cmdiocb->iocb.ulpContext)); /* rx_id */
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->vport = vport; mbox->vport = vport;
mbox->mbox_cmpl = lpfc_els_rsp_rps_acc; mbox->mbox_cmpl = lpfc_els_rsp_rps_acc;
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT)
@ -8602,7 +8602,7 @@ lpfc_cmpl_reg_new_vport(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
struct Scsi_Host *shost = lpfc_shost_from_vport(vport); struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
int rc; int rc;
@ -8720,7 +8720,7 @@ lpfc_register_new_vport(struct lpfc_hba *phba, struct lpfc_vport *vport,
if (mbox) { if (mbox) {
lpfc_reg_vpi(vport, mbox); lpfc_reg_vpi(vport, mbox);
mbox->vport = vport; mbox->vport = vport;
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->mbox_cmpl = lpfc_cmpl_reg_new_vport; mbox->mbox_cmpl = lpfc_cmpl_reg_new_vport;
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT)
== MBX_NOT_FINISHED) { == MBX_NOT_FINISHED) {

View File

@ -2944,7 +2944,7 @@ lpfc_start_fdiscs(struct lpfc_hba *phba)
void void
lpfc_mbx_cmpl_reg_vfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) lpfc_mbx_cmpl_reg_vfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
{ {
struct lpfc_dmabuf *dmabuf = mboxq->context1; struct lpfc_dmabuf *dmabuf = mboxq->ctx_buf;
struct lpfc_vport *vport = mboxq->vport; struct lpfc_vport *vport = mboxq->vport;
struct Scsi_Host *shost = lpfc_shost_from_vport(vport); struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
@ -3037,7 +3037,7 @@ static void
lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) pmb->context1; struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
struct Scsi_Host *shost = lpfc_shost_from_vport(vport); struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
struct serv_parm *sp = &vport->fc_sparam; struct serv_parm *sp = &vport->fc_sparam;
@ -3081,7 +3081,7 @@ lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
return; return;
out: out:
pmb->context1 = NULL; pmb->ctx_buf = NULL;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
lpfc_issue_clear_la(phba, vport); lpfc_issue_clear_la(phba, vport);
@ -3220,7 +3220,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
sparam_mbox->mbox_cmpl = lpfc_mbx_cmpl_read_sparam; sparam_mbox->mbox_cmpl = lpfc_mbx_cmpl_read_sparam;
rc = lpfc_sli_issue_mbox(phba, sparam_mbox, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, sparam_mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) { if (rc == MBX_NOT_FINISHED) {
mp = (struct lpfc_dmabuf *) sparam_mbox->context1; mp = (struct lpfc_dmabuf *)sparam_mbox->ctx_buf;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
mempool_free(sparam_mbox, phba->mbox_mem_pool); mempool_free(sparam_mbox, phba->mbox_mem_pool);
@ -3349,7 +3349,7 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
struct lpfc_mbx_read_top *la; struct lpfc_mbx_read_top *la;
struct lpfc_sli_ring *pring; struct lpfc_sli_ring *pring;
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
uint8_t attn_type; uint8_t attn_type;
/* Unblock ELS traffic */ /* Unblock ELS traffic */
@ -3506,12 +3506,12 @@ void
lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
struct Scsi_Host *shost = lpfc_shost_from_vport(vport); struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI, lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
"0002 rpi:%x DID:%x flg:%x %d map:%x %p\n", "0002 rpi:%x DID:%x flg:%x %d map:%x %p\n",
@ -3719,8 +3719,8 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
vport_buff = (uint8_t *) vport_info; vport_buff = (uint8_t *) vport_info;
do { do {
/* free dma buffer from previous round */ /* free dma buffer from previous round */
if (pmb->context1) { if (pmb->ctx_buf) {
mp = (struct lpfc_dmabuf *)pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
} }
@ -3742,7 +3742,7 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
if (phba->sli_rev == LPFC_SLI_REV4) { if (phba->sli_rev == LPFC_SLI_REV4) {
byte_count = pmb->u.mqe.un.mb_words[5]; byte_count = pmb->u.mqe.un.mb_words[5];
mp = (struct lpfc_dmabuf *)pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
if (byte_count > sizeof(struct static_vport_info) - if (byte_count > sizeof(struct static_vport_info) -
offset) offset)
byte_count = sizeof(struct static_vport_info) byte_count = sizeof(struct static_vport_info)
@ -3807,8 +3807,8 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
out: out:
kfree(vport_info); kfree(vport_info);
if (mbx_wait_rc != MBX_TIMEOUT) { if (mbx_wait_rc != MBX_TIMEOUT) {
if (pmb->context1) { if (pmb->ctx_buf) {
mp = (struct lpfc_dmabuf *)pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
} }
@ -3829,13 +3829,13 @@ lpfc_mbx_cmpl_fabric_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
struct lpfc_nodelist *ndlp; struct lpfc_nodelist *ndlp;
struct Scsi_Host *shost; struct Scsi_Host *shost;
ndlp = (struct lpfc_nodelist *) pmb->context2; ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
pmb->context1 = NULL; pmb->ctx_ndlp = NULL;
pmb->context2 = NULL; pmb->ctx_buf = NULL;
if (mb->mbxStatus) { if (mb->mbxStatus) {
lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX, lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
@ -3982,12 +3982,12 @@ void
lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
vport->gidft_inp = 0; vport->gidft_inp = 0;
if (mb->mbxStatus) { if (mb->mbxStatus) {
@ -4756,7 +4756,7 @@ lpfc_nlp_logo_unreg(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
struct lpfc_nodelist *ndlp; struct lpfc_nodelist *ndlp;
ndlp = (struct lpfc_nodelist *)(pmb->context1); ndlp = (struct lpfc_nodelist *)(pmb->ctx_ndlp);
if (!ndlp) if (!ndlp)
return; return;
lpfc_issue_els_logo(vport, ndlp, 0); lpfc_issue_els_logo(vport, ndlp, 0);
@ -4799,7 +4799,7 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
lpfc_unreg_login(phba, vport->vpi, rpi, mbox); lpfc_unreg_login(phba, vport->vpi, rpi, mbox);
mbox->vport = vport; mbox->vport = vport;
if (ndlp->nlp_flag & NLP_ISSUE_LOGO) { if (ndlp->nlp_flag & NLP_ISSUE_LOGO) {
mbox->context1 = ndlp; mbox->ctx_ndlp = ndlp;
mbox->mbox_cmpl = lpfc_nlp_logo_unreg; mbox->mbox_cmpl = lpfc_nlp_logo_unreg;
} else { } else {
if (phba->sli_rev == LPFC_SLI_REV4 && if (phba->sli_rev == LPFC_SLI_REV4 &&
@ -4808,7 +4808,7 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
&phba->sli4_hba.sli_intf) == &phba->sli4_hba.sli_intf) ==
LPFC_SLI_INTF_IF_TYPE_2) && LPFC_SLI_INTF_IF_TYPE_2) &&
(kref_read(&ndlp->kref) > 0)) { (kref_read(&ndlp->kref) > 0)) {
mbox->context1 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->mbox_cmpl = mbox->mbox_cmpl =
lpfc_sli4_unreg_rpi_cmpl_clr; lpfc_sli4_unreg_rpi_cmpl_clr;
/* /*
@ -4895,7 +4895,7 @@ lpfc_unreg_all_rpis(struct lpfc_vport *vport)
mbox); mbox);
mbox->vport = vport; mbox->vport = vport;
mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mbox->context1 = NULL; mbox->ctx_ndlp = NULL;
rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO);
if (rc != MBX_TIMEOUT) if (rc != MBX_TIMEOUT)
mempool_free(mbox, phba->mbox_mem_pool); mempool_free(mbox, phba->mbox_mem_pool);
@ -4920,7 +4920,7 @@ lpfc_unreg_default_rpis(struct lpfc_vport *vport)
mbox); mbox);
mbox->vport = vport; mbox->vport = vport;
mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mbox->context1 = NULL; mbox->ctx_ndlp = NULL;
rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO);
if (rc != MBX_TIMEOUT) if (rc != MBX_TIMEOUT)
mempool_free(mbox, phba->mbox_mem_pool); mempool_free(mbox, phba->mbox_mem_pool);
@ -4974,8 +4974,8 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
if ((mb = phba->sli.mbox_active)) { if ((mb = phba->sli.mbox_active)) {
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) && if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
!(mb->mbox_flag & LPFC_MBX_IMED_UNREG) && !(mb->mbox_flag & LPFC_MBX_IMED_UNREG) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) { (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
mb->context2 = NULL; mb->ctx_ndlp = NULL;
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
} }
} }
@ -4985,18 +4985,18 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) { list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) {
if ((mb->u.mb.mbxCommand != MBX_REG_LOGIN64) || if ((mb->u.mb.mbxCommand != MBX_REG_LOGIN64) ||
(mb->mbox_flag & LPFC_MBX_IMED_UNREG) || (mb->mbox_flag & LPFC_MBX_IMED_UNREG) ||
(ndlp != (struct lpfc_nodelist *) mb->context2)) (ndlp != (struct lpfc_nodelist *)mb->ctx_ndlp))
continue; continue;
mb->context2 = NULL; mb->ctx_ndlp = NULL;
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
} }
list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) && if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
!(mb->mbox_flag & LPFC_MBX_IMED_UNREG) && !(mb->mbox_flag & LPFC_MBX_IMED_UNREG) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) { (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
mp = (struct lpfc_dmabuf *) (mb->context1); mp = (struct lpfc_dmabuf *)(mb->ctx_buf);
if (mp) { if (mp) {
__lpfc_mbuf_free(phba, mp->virt, mp->phys); __lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -5066,7 +5066,7 @@ lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
mbox->mbox_flag |= LPFC_MBX_IMED_UNREG; mbox->mbox_flag |= LPFC_MBX_IMED_UNREG;
mbox->mbox_cmpl = lpfc_mbx_cmpl_dflt_rpi; mbox->mbox_cmpl = lpfc_mbx_cmpl_dflt_rpi;
mbox->vport = vport; mbox->vport = vport;
mbox->context2 = ndlp; mbox->ctx_ndlp = ndlp;
rc =lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); rc =lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) { if (rc == MBX_NOT_FINISHED) {
mempool_free(mbox, phba->mbox_mem_pool); mempool_free(mbox, phba->mbox_mem_pool);
@ -5831,12 +5831,12 @@ void
lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{ {
MAILBOX_t *mb = &pmb->u.mb; MAILBOX_t *mb = &pmb->u.mb;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (pmb->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
if (phba->sli_rev < LPFC_SLI_REV4) if (phba->sli_rev < LPFC_SLI_REV4)
ndlp->nlp_rpi = mb->un.varWords[0]; ndlp->nlp_rpi = mb->un.varWords[0];

View File

@ -443,19 +443,19 @@ lpfc_config_port_post(struct lpfc_hba *phba)
"READ_SPARM mbxStatus x%x\n", "READ_SPARM mbxStatus x%x\n",
mb->mbxCommand, mb->mbxStatus); mb->mbxCommand, mb->mbxStatus);
phba->link_state = LPFC_HBA_ERROR; phba->link_state = LPFC_HBA_ERROR;
mp = (struct lpfc_dmabuf *) pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
mempool_free(pmb, phba->mbox_mem_pool); mempool_free(pmb, phba->mbox_mem_pool);
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
return -EIO; return -EIO;
} }
mp = (struct lpfc_dmabuf *) pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
memcpy(&vport->fc_sparam, mp->virt, sizeof (struct serv_parm)); memcpy(&vport->fc_sparam, mp->virt, sizeof (struct serv_parm));
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
pmb->context1 = NULL; pmb->ctx_buf = NULL;
lpfc_update_vport_wwn(vport); lpfc_update_vport_wwn(vport);
/* Update the fc_host data structures with new wwn. */ /* Update the fc_host data structures with new wwn. */

View File

@ -94,7 +94,7 @@ lpfc_dump_static_vport(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb,
memset(mp->virt, 0, LPFC_BPL_SIZE); memset(mp->virt, 0, LPFC_BPL_SIZE);
INIT_LIST_HEAD(&mp->list); INIT_LIST_HEAD(&mp->list);
/* save address for completion */ /* save address for completion */
pmb->context1 = (uint8_t *)mp; pmb->ctx_buf = (uint8_t *)mp;
mb->un.varWords[3] = putPaddrLow(mp->phys); mb->un.varWords[3] = putPaddrLow(mp->phys);
mb->un.varWords[4] = putPaddrHigh(mp->phys); mb->un.varWords[4] = putPaddrHigh(mp->phys);
mb->un.varDmp.sli4_length = sizeof(struct static_vport_info); mb->un.varDmp.sli4_length = sizeof(struct static_vport_info);
@ -139,7 +139,7 @@ lpfc_dump_mem(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb, uint16_t offset,
void *ctx; void *ctx;
mb = &pmb->u.mb; mb = &pmb->u.mb;
ctx = pmb->context2; ctx = pmb->ctx_buf;
/* Setup to dump VPD region */ /* Setup to dump VPD region */
memset(pmb, 0, sizeof (LPFC_MBOXQ_t)); memset(pmb, 0, sizeof (LPFC_MBOXQ_t));
@ -151,7 +151,7 @@ lpfc_dump_mem(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb, uint16_t offset,
mb->un.varDmp.word_cnt = (DMP_RSP_SIZE / sizeof (uint32_t)); mb->un.varDmp.word_cnt = (DMP_RSP_SIZE / sizeof (uint32_t));
mb->un.varDmp.co = 0; mb->un.varDmp.co = 0;
mb->un.varDmp.resp_offset = 0; mb->un.varDmp.resp_offset = 0;
pmb->context2 = ctx; pmb->ctx_buf = ctx;
mb->mbxOwner = OWN_HOST; mb->mbxOwner = OWN_HOST;
return; return;
} }
@ -172,7 +172,7 @@ lpfc_dump_wakeup_param(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
mb = &pmb->u.mb; mb = &pmb->u.mb;
/* Save context so that we can restore after memset */ /* Save context so that we can restore after memset */
ctx = pmb->context2; ctx = pmb->ctx_buf;
/* Setup to dump VPD region */ /* Setup to dump VPD region */
memset(pmb, 0, sizeof(LPFC_MBOXQ_t)); memset(pmb, 0, sizeof(LPFC_MBOXQ_t));
@ -186,7 +186,7 @@ lpfc_dump_wakeup_param(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
mb->un.varDmp.word_cnt = WAKE_UP_PARMS_WORD_SIZE; mb->un.varDmp.word_cnt = WAKE_UP_PARMS_WORD_SIZE;
mb->un.varDmp.co = 0; mb->un.varDmp.co = 0;
mb->un.varDmp.resp_offset = 0; mb->un.varDmp.resp_offset = 0;
pmb->context2 = ctx; pmb->ctx_buf = ctx;
return; return;
} }
@ -304,7 +304,7 @@ lpfc_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb,
/* Save address for later completion and set the owner to host so that /* Save address for later completion and set the owner to host so that
* the FW knows this mailbox is available for processing. * the FW knows this mailbox is available for processing.
*/ */
pmb->context1 = (uint8_t *)mp; pmb->ctx_buf = (uint8_t *)mp;
mb->mbxOwner = OWN_HOST; mb->mbxOwner = OWN_HOST;
return (0); return (0);
} }
@ -631,7 +631,7 @@ lpfc_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb, int vpi)
mb->un.varRdSparm.vpi = phba->vpi_ids[vpi]; mb->un.varRdSparm.vpi = phba->vpi_ids[vpi];
/* save address for completion */ /* save address for completion */
pmb->context1 = mp; pmb->ctx_buf = mp;
return (0); return (0);
} }
@ -783,7 +783,7 @@ lpfc_reg_rpi(struct lpfc_hba *phba, uint16_t vpi, uint32_t did,
memcpy(sparam, param, sizeof (struct serv_parm)); memcpy(sparam, param, sizeof (struct serv_parm));
/* save address for completion */ /* save address for completion */
pmb->context1 = (uint8_t *) mp; pmb->ctx_buf = (uint8_t *)mp;
mb->mbxCommand = MBX_REG_LOGIN64; mb->mbxCommand = MBX_REG_LOGIN64;
mb->un.varRegLogin.un.sp64.tus.f.bdeSize = sizeof (struct serv_parm); mb->un.varRegLogin.un.sp64.tus.f.bdeSize = sizeof (struct serv_parm);
@ -858,7 +858,7 @@ lpfc_sli4_unreg_all_rpis(struct lpfc_vport *vport)
mbox->u.mb.un.varUnregLogin.rsvd1 = 0x4000; mbox->u.mb.un.varUnregLogin.rsvd1 = 0x4000;
mbox->vport = vport; mbox->vport = vport;
mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mbox->context1 = NULL; mbox->ctx_ndlp = NULL;
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) if (rc == MBX_NOT_FINISHED)
mempool_free(mbox, phba->mbox_mem_pool); mempool_free(mbox, phba->mbox_mem_pool);
@ -2288,7 +2288,7 @@ lpfc_sli4_dump_cfg_rg23(struct lpfc_hba *phba, struct lpfcMboxq *mbox)
INIT_LIST_HEAD(&mp->list); INIT_LIST_HEAD(&mp->list);
/* save address for completion */ /* save address for completion */
mbox->context1 = (uint8_t *) mp; mbox->ctx_buf = (uint8_t *)mp;
mb->mbxCommand = MBX_DUMP_MEMORY; mb->mbxCommand = MBX_DUMP_MEMORY;
mb->un.varDmp.type = DMP_NV_PARAMS; mb->un.varDmp.type = DMP_NV_PARAMS;
@ -2305,7 +2305,7 @@ lpfc_mbx_cmpl_rdp_link_stat(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
MAILBOX_t *mb; MAILBOX_t *mb;
int rc = FAILURE; int rc = FAILURE;
struct lpfc_rdp_context *rdp_context = struct lpfc_rdp_context *rdp_context =
(struct lpfc_rdp_context *)(mboxq->context2); (struct lpfc_rdp_context *)(mboxq->ctx_ndlp);
mb = &mboxq->u.mb; mb = &mboxq->u.mb;
if (mb->mbxStatus) if (mb->mbxStatus)
@ -2323,9 +2323,9 @@ mbx_failed:
static void static void
lpfc_mbx_cmpl_rdp_page_a2(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox) lpfc_mbx_cmpl_rdp_page_a2(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
{ {
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) mbox->context1; struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)mbox->ctx_buf;
struct lpfc_rdp_context *rdp_context = struct lpfc_rdp_context *rdp_context =
(struct lpfc_rdp_context *)(mbox->context2); (struct lpfc_rdp_context *)(mbox->ctx_ndlp);
if (bf_get(lpfc_mqe_status, &mbox->u.mqe)) if (bf_get(lpfc_mqe_status, &mbox->u.mqe))
goto error_mbuf_free; goto error_mbuf_free;
@ -2341,7 +2341,7 @@ lpfc_mbx_cmpl_rdp_page_a2(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
lpfc_read_lnk_stat(phba, mbox); lpfc_read_lnk_stat(phba, mbox);
mbox->vport = rdp_context->ndlp->vport; mbox->vport = rdp_context->ndlp->vport;
mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_link_stat; mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_link_stat;
mbox->context2 = (struct lpfc_rdp_context *) rdp_context; mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) == MBX_NOT_FINISHED) if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) == MBX_NOT_FINISHED)
goto error_cmd_free; goto error_cmd_free;
@ -2359,9 +2359,9 @@ void
lpfc_mbx_cmpl_rdp_page_a0(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox) lpfc_mbx_cmpl_rdp_page_a0(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
{ {
int rc; int rc;
struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) (mbox->context1); struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(mbox->ctx_buf);
struct lpfc_rdp_context *rdp_context = struct lpfc_rdp_context *rdp_context =
(struct lpfc_rdp_context *)(mbox->context2); (struct lpfc_rdp_context *)(mbox->ctx_ndlp);
if (bf_get(lpfc_mqe_status, &mbox->u.mqe)) if (bf_get(lpfc_mqe_status, &mbox->u.mqe))
goto error; goto error;
@ -2375,7 +2375,7 @@ lpfc_mbx_cmpl_rdp_page_a0(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
INIT_LIST_HEAD(&mp->list); INIT_LIST_HEAD(&mp->list);
/* save address for completion */ /* save address for completion */
mbox->context1 = mp; mbox->ctx_buf = mp;
mbox->vport = rdp_context->ndlp->vport; mbox->vport = rdp_context->ndlp->vport;
bf_set(lpfc_mqe_command, &mbox->u.mqe, MBX_DUMP_MEMORY); bf_set(lpfc_mqe_command, &mbox->u.mqe, MBX_DUMP_MEMORY);
@ -2391,7 +2391,7 @@ lpfc_mbx_cmpl_rdp_page_a0(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
mbox->u.mqe.un.mem_dump_type3.addr_hi = putPaddrHigh(mp->phys); mbox->u.mqe.un.mem_dump_type3.addr_hi = putPaddrHigh(mp->phys);
mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a2; mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a2;
mbox->context2 = (struct lpfc_rdp_context *) rdp_context; mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) if (rc == MBX_NOT_FINISHED)
goto error; goto error;
@ -2436,7 +2436,7 @@ lpfc_sli4_dump_page_a0(struct lpfc_hba *phba, struct lpfcMboxq *mbox)
bf_set(lpfc_mqe_command, &mbox->u.mqe, MBX_DUMP_MEMORY); bf_set(lpfc_mqe_command, &mbox->u.mqe, MBX_DUMP_MEMORY);
/* save address for completion */ /* save address for completion */
mbox->context1 = mp; mbox->ctx_buf = mp;
bf_set(lpfc_mbx_memory_dump_type3_type, bf_set(lpfc_mbx_memory_dump_type3_type,
&mbox->u.mqe.un.mem_dump_type3, DMP_LMSD); &mbox->u.mqe.un.mem_dump_type3, DMP_LMSD);

View File

@ -330,7 +330,7 @@ lpfc_mem_free_all(struct lpfc_hba *phba)
/* Free memory used in mailbox queue back to mailbox memory pool */ /* Free memory used in mailbox queue back to mailbox memory pool */
list_for_each_entry_safe(mbox, next_mbox, &psli->mboxq, list) { list_for_each_entry_safe(mbox, next_mbox, &psli->mboxq, list) {
mp = (struct lpfc_dmabuf *) (mbox->context1); mp = (struct lpfc_dmabuf *)(mbox->ctx_buf);
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -340,7 +340,7 @@ lpfc_mem_free_all(struct lpfc_hba *phba)
} }
/* Free memory used in mailbox cmpl list back to mailbox memory pool */ /* Free memory used in mailbox cmpl list back to mailbox memory pool */
list_for_each_entry_safe(mbox, next_mbox, &psli->mboxq_cmpl, list) { list_for_each_entry_safe(mbox, next_mbox, &psli->mboxq_cmpl, list) {
mp = (struct lpfc_dmabuf *) (mbox->context1); mp = (struct lpfc_dmabuf *)(mbox->ctx_buf);
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
@ -354,7 +354,7 @@ lpfc_mem_free_all(struct lpfc_hba *phba)
spin_unlock_irq(&phba->hbalock); spin_unlock_irq(&phba->hbalock);
if (psli->mbox_active) { if (psli->mbox_active) {
mbox = psli->mbox_active; mbox = psli->mbox_active;
mp = (struct lpfc_dmabuf *) (mbox->context1); mp = (struct lpfc_dmabuf *)(mbox->ctx_buf);
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);

View File

@ -467,7 +467,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
*/ */
mbox->mbox_cmpl = lpfc_mbx_cmpl_reg_login; mbox->mbox_cmpl = lpfc_mbx_cmpl_reg_login;
/* /*
* mbox->context2 = lpfc_nlp_get(ndlp) deferred until mailbox * mbox->ctx_ndlp = lpfc_nlp_get(ndlp) deferred until mailbox
* command issued in lpfc_cmpl_els_acc(). * command issued in lpfc_cmpl_els_acc().
*/ */
mbox->vport = vport; mbox->vport = vport;
@ -535,8 +535,8 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
struct lpfc_nodelist *ndlp; struct lpfc_nodelist *ndlp;
uint32_t cmd; uint32_t cmd;
elsiocb = (struct lpfc_iocbq *)mboxq->context1; elsiocb = (struct lpfc_iocbq *)mboxq->ctx_buf;
ndlp = (struct lpfc_nodelist *) mboxq->context2; ndlp = (struct lpfc_nodelist *)mboxq->ctx_ndlp;
vport = mboxq->vport; vport = mboxq->vport;
cmd = elsiocb->drvrTimeout; cmd = elsiocb->drvrTimeout;
@ -1258,7 +1258,7 @@ lpfc_cmpl_plogi_plogi_issue(struct lpfc_vport *vport,
ndlp->nlp_flag |= NLP_REG_LOGIN_SEND; ndlp->nlp_flag |= NLP_REG_LOGIN_SEND;
mbox->mbox_cmpl = lpfc_mbx_cmpl_reg_login; mbox->mbox_cmpl = lpfc_mbx_cmpl_reg_login;
} }
mbox->context2 = lpfc_nlp_get(ndlp); mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
mbox->vport = vport; mbox->vport = vport;
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT)
!= MBX_NOT_FINISHED) { != MBX_NOT_FINISHED) {
@ -1272,7 +1272,7 @@ lpfc_cmpl_plogi_plogi_issue(struct lpfc_vport *vport,
* command * command
*/ */
lpfc_nlp_put(ndlp); lpfc_nlp_put(ndlp);
mp = (struct lpfc_dmabuf *) mbox->context1; mp = (struct lpfc_dmabuf *)mbox->ctx_buf;
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
mempool_free(mbox, phba->mbox_mem_pool); mempool_free(mbox, phba->mbox_mem_pool);
@ -1641,10 +1641,10 @@ lpfc_rcv_logo_reglogin_issue(struct lpfc_vport *vport,
/* cleanup any ndlp on mbox q waiting for reglogin cmpl */ /* cleanup any ndlp on mbox q waiting for reglogin cmpl */
if ((mb = phba->sli.mbox_active)) { if ((mb = phba->sli.mbox_active)) {
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) && if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) { (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND; ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
lpfc_nlp_put(ndlp); lpfc_nlp_put(ndlp);
mb->context2 = NULL; mb->ctx_ndlp = NULL;
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
} }
} }
@ -1652,8 +1652,8 @@ lpfc_rcv_logo_reglogin_issue(struct lpfc_vport *vport,
spin_lock_irq(&phba->hbalock); spin_lock_irq(&phba->hbalock);
list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) && if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
(ndlp == (struct lpfc_nodelist *) mb->context2)) { (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
mp = (struct lpfc_dmabuf *) (mb->context1); mp = (struct lpfc_dmabuf *)(mb->ctx_buf);
if (mp) { if (mp) {
__lpfc_mbuf_free(phba, mp->virt, mp->phys); __lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);

View File

@ -2456,7 +2456,7 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
uint16_t rpi, vpi; uint16_t rpi, vpi;
int rc; int rc;
mp = (struct lpfc_dmabuf *) (pmb->context1); mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
if (mp) { if (mp) {
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
@ -2491,9 +2491,9 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
} }
if (pmb->u.mb.mbxCommand == MBX_REG_LOGIN64) { if (pmb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
ndlp = (struct lpfc_nodelist *)pmb->context2; ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
lpfc_nlp_put(ndlp); lpfc_nlp_put(ndlp);
pmb->context2 = NULL; pmb->ctx_ndlp = NULL;
} }
/* Check security permission status on INIT_LINK mailbox command */ /* Check security permission status on INIT_LINK mailbox command */
@ -2527,7 +2527,7 @@ lpfc_sli4_unreg_rpi_cmpl_clr(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
struct lpfc_vport *vport = pmb->vport; struct lpfc_vport *vport = pmb->vport;
struct lpfc_nodelist *ndlp; struct lpfc_nodelist *ndlp;
ndlp = pmb->context1; ndlp = pmb->ctx_ndlp;
if (pmb->u.mb.mbxCommand == MBX_UNREG_LOGIN) { if (pmb->u.mb.mbxCommand == MBX_UNREG_LOGIN) {
if (phba->sli_rev == LPFC_SLI_REV4 && if (phba->sli_rev == LPFC_SLI_REV4 &&
(bf_get(lpfc_sli_intf_if_type, (bf_get(lpfc_sli_intf_if_type,
@ -5229,7 +5229,7 @@ lpfc_sli4_read_fcoe_params(struct lpfc_hba *phba)
goto out_free_mboxq; goto out_free_mboxq;
} }
mp = (struct lpfc_dmabuf *) mboxq->context1; mp = (struct lpfc_dmabuf *)mboxq->ctx_buf;
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI, lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
@ -7350,7 +7350,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
mboxq->vport = vport; mboxq->vport = vport;
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
mp = (struct lpfc_dmabuf *) mboxq->context1; mp = (struct lpfc_dmabuf *)mboxq->ctx_buf;
if (rc == MBX_SUCCESS) { if (rc == MBX_SUCCESS) {
memcpy(&vport->fc_sparam, mp->virt, sizeof(struct serv_parm)); memcpy(&vport->fc_sparam, mp->virt, sizeof(struct serv_parm));
rc = 0; rc = 0;
@ -7362,7 +7362,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
*/ */
lpfc_mbuf_free(phba, mp->virt, mp->phys); lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
mboxq->context1 = NULL; mboxq->ctx_buf = NULL;
if (unlikely(rc)) { if (unlikely(rc)) {
lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI, lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
"0382 READ_SPARAM command failed " "0382 READ_SPARAM command failed "
@ -8132,10 +8132,10 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox,
} }
/* Copy the mailbox extension data */ /* Copy the mailbox extension data */
if (pmbox->in_ext_byte_len && pmbox->context2) { if (pmbox->in_ext_byte_len && pmbox->ctx_buf) {
lpfc_sli_pcimem_bcopy(pmbox->context2, lpfc_sli_pcimem_bcopy(pmbox->ctx_buf,
(uint8_t *)phba->mbox_ext, (uint8_t *)phba->mbox_ext,
pmbox->in_ext_byte_len); pmbox->in_ext_byte_len);
} }
/* Copy command data to host SLIM area */ /* Copy command data to host SLIM area */
lpfc_sli_pcimem_bcopy(mbx, phba->mbox, MAILBOX_CMD_SIZE); lpfc_sli_pcimem_bcopy(mbx, phba->mbox, MAILBOX_CMD_SIZE);
@ -8146,10 +8146,10 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox,
= MAILBOX_HBA_EXT_OFFSET; = MAILBOX_HBA_EXT_OFFSET;
/* Copy the mailbox extension data */ /* Copy the mailbox extension data */
if (pmbox->in_ext_byte_len && pmbox->context2) if (pmbox->in_ext_byte_len && pmbox->ctx_buf)
lpfc_memcpy_to_slim(phba->MBslimaddr + lpfc_memcpy_to_slim(phba->MBslimaddr +
MAILBOX_HBA_EXT_OFFSET, MAILBOX_HBA_EXT_OFFSET,
pmbox->context2, pmbox->in_ext_byte_len); pmbox->ctx_buf, pmbox->in_ext_byte_len);
if (mbx->mbxCommand == MBX_CONFIG_PORT) if (mbx->mbxCommand == MBX_CONFIG_PORT)
/* copy command data into host mbox for cmpl */ /* copy command data into host mbox for cmpl */
@ -8272,9 +8272,9 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox,
lpfc_sli_pcimem_bcopy(phba->mbox, mbx, lpfc_sli_pcimem_bcopy(phba->mbox, mbx,
MAILBOX_CMD_SIZE); MAILBOX_CMD_SIZE);
/* Copy the mailbox extension data */ /* Copy the mailbox extension data */
if (pmbox->out_ext_byte_len && pmbox->context2) { if (pmbox->out_ext_byte_len && pmbox->ctx_buf) {
lpfc_sli_pcimem_bcopy(phba->mbox_ext, lpfc_sli_pcimem_bcopy(phba->mbox_ext,
pmbox->context2, pmbox->ctx_buf,
pmbox->out_ext_byte_len); pmbox->out_ext_byte_len);
} }
} else { } else {
@ -8282,8 +8282,9 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox,
lpfc_memcpy_from_slim(mbx, phba->MBslimaddr, lpfc_memcpy_from_slim(mbx, phba->MBslimaddr,
MAILBOX_CMD_SIZE); MAILBOX_CMD_SIZE);
/* Copy the mailbox extension data */ /* Copy the mailbox extension data */
if (pmbox->out_ext_byte_len && pmbox->context2) { if (pmbox->out_ext_byte_len && pmbox->ctx_buf) {
lpfc_memcpy_from_slim(pmbox->context2, lpfc_memcpy_from_slim(
pmbox->ctx_buf,
phba->MBslimaddr + phba->MBslimaddr +
MAILBOX_HBA_EXT_OFFSET, MAILBOX_HBA_EXT_OFFSET,
pmbox->out_ext_byte_len); pmbox->out_ext_byte_len);
@ -12558,10 +12559,10 @@ lpfc_sli_sp_intr_handler(int irq, void *dev_id)
lpfc_sli_pcimem_bcopy(mbox, pmbox, lpfc_sli_pcimem_bcopy(mbox, pmbox,
MAILBOX_CMD_SIZE); MAILBOX_CMD_SIZE);
if (pmb->out_ext_byte_len && if (pmb->out_ext_byte_len &&
pmb->context2) pmb->ctx_buf)
lpfc_sli_pcimem_bcopy( lpfc_sli_pcimem_bcopy(
phba->mbox_ext, phba->mbox_ext,
pmb->context2, pmb->ctx_buf,
pmb->out_ext_byte_len); pmb->out_ext_byte_len);
} }
if (pmb->mbox_flag & LPFC_MBX_IMED_UNREG) { if (pmb->mbox_flag & LPFC_MBX_IMED_UNREG) {
@ -12576,9 +12577,9 @@ lpfc_sli_sp_intr_handler(int irq, void *dev_id)
if (!pmbox->mbxStatus) { if (!pmbox->mbxStatus) {
mp = (struct lpfc_dmabuf *) mp = (struct lpfc_dmabuf *)
(pmb->context1); (pmb->ctx_buf);
ndlp = (struct lpfc_nodelist *) ndlp = (struct lpfc_nodelist *)
pmb->context2; pmb->ctx_ndlp;
/* Reg_LOGIN of dflt RPI was /* Reg_LOGIN of dflt RPI was
* successful. new lets get * successful. new lets get
@ -12591,8 +12592,8 @@ lpfc_sli_sp_intr_handler(int irq, void *dev_id)
pmb); pmb);
pmb->mbox_cmpl = pmb->mbox_cmpl =
lpfc_mbx_cmpl_dflt_rpi; lpfc_mbx_cmpl_dflt_rpi;
pmb->context1 = mp; pmb->ctx_buf = mp;
pmb->context2 = ndlp; pmb->ctx_ndlp = ndlp;
pmb->vport = vport; pmb->vport = vport;
rc = lpfc_sli_issue_mbox(phba, rc = lpfc_sli_issue_mbox(phba,
pmb, pmb,
@ -13198,16 +13199,16 @@ lpfc_sli4_sp_handle_mbox_event(struct lpfc_hba *phba, struct lpfc_mcqe *mcqe)
mcqe_status, mcqe_status,
pmbox->un.varWords[0], 0); pmbox->un.varWords[0], 0);
if (mcqe_status == MB_CQE_STATUS_SUCCESS) { if (mcqe_status == MB_CQE_STATUS_SUCCESS) {
mp = (struct lpfc_dmabuf *)(pmb->context1); mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
ndlp = (struct lpfc_nodelist *)pmb->context2; ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
/* Reg_LOGIN of dflt RPI was successful. Now lets get /* Reg_LOGIN of dflt RPI was successful. Now lets get
* RID of the PPI using the same mbox buffer. * RID of the PPI using the same mbox buffer.
*/ */
lpfc_unreg_login(phba, vport->vpi, lpfc_unreg_login(phba, vport->vpi,
pmbox->un.varWords[0], pmb); pmbox->un.varWords[0], pmb);
pmb->mbox_cmpl = lpfc_mbx_cmpl_dflt_rpi; pmb->mbox_cmpl = lpfc_mbx_cmpl_dflt_rpi;
pmb->context1 = mp; pmb->ctx_buf = mp;
pmb->context2 = ndlp; pmb->ctx_ndlp = ndlp;
pmb->vport = vport; pmb->vport = vport;
rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
if (rc != MBX_BUSY) if (rc != MBX_BUSY)
@ -14682,7 +14683,8 @@ lpfc_modify_hba_eq_delay(struct lpfc_hba *phba, uint32_t startq,
mbox->vport = phba->pport; mbox->vport = phba->pport;
mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mbox->context1 = NULL; mbox->ctx_buf = NULL;
mbox->ctx_ndlp = NULL;
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
shdr = (union lpfc_sli4_cfg_shdr *) &eq_delay->header.cfg_shdr; shdr = (union lpfc_sli4_cfg_shdr *) &eq_delay->header.cfg_shdr;
shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response); shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
@ -14802,7 +14804,8 @@ lpfc_eq_create(struct lpfc_hba *phba, struct lpfc_queue *eq, uint32_t imax)
} }
mbox->vport = phba->pport; mbox->vport = phba->pport;
mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mbox->context1 = NULL; mbox->ctx_buf = NULL;
mbox->ctx_ndlp = NULL;
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL); rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response); shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response); shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
@ -18220,8 +18223,8 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
lpfc_resume_rpi(mboxq, ndlp); lpfc_resume_rpi(mboxq, ndlp);
if (cmpl) { if (cmpl) {
mboxq->mbox_cmpl = cmpl; mboxq->mbox_cmpl = cmpl;
mboxq->context1 = arg; mboxq->ctx_buf = arg;
mboxq->context2 = ndlp; mboxq->ctx_ndlp = ndlp;
} else } else
mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mboxq->vport = ndlp->vport; mboxq->vport = ndlp->vport;
@ -19032,7 +19035,7 @@ lpfc_sli4_get_config_region23(struct lpfc_hba *phba, char *rgn23_data)
if (lpfc_sli4_dump_cfg_rg23(phba, mboxq)) if (lpfc_sli4_dump_cfg_rg23(phba, mboxq))
goto out; goto out;
mqe = &mboxq->u.mqe; mqe = &mboxq->u.mqe;
mp = (struct lpfc_dmabuf *) mboxq->context1; mp = (struct lpfc_dmabuf *)mboxq->ctx_buf;
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
if (rc) if (rc)
goto out; goto out;
@ -19283,7 +19286,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
(mb->u.mb.mbxCommand == MBX_REG_VPI)) (mb->u.mb.mbxCommand == MBX_REG_VPI))
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) { if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
act_mbx_ndlp = (struct lpfc_nodelist *)mb->context2; act_mbx_ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
/* Put reference count for delayed processing */ /* Put reference count for delayed processing */
act_mbx_ndlp = lpfc_nlp_get(act_mbx_ndlp); act_mbx_ndlp = lpfc_nlp_get(act_mbx_ndlp);
/* Unregister the RPI when mailbox complete */ /* Unregister the RPI when mailbox complete */
@ -19308,7 +19311,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) { if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
ndlp = (struct lpfc_nodelist *)mb->context2; ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
/* Unregister the RPI when mailbox complete */ /* Unregister the RPI when mailbox complete */
mb->mbox_flag |= LPFC_MBX_IMED_UNREG; mb->mbox_flag |= LPFC_MBX_IMED_UNREG;
restart_loop = 1; restart_loop = 1;
@ -19328,13 +19331,14 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
while (!list_empty(&mbox_cmd_list)) { while (!list_empty(&mbox_cmd_list)) {
list_remove_head(&mbox_cmd_list, mb, LPFC_MBOXQ_t, list); list_remove_head(&mbox_cmd_list, mb, LPFC_MBOXQ_t, list);
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) { if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
mp = (struct lpfc_dmabuf *) (mb->context1); mp = (struct lpfc_dmabuf *)(mb->ctx_buf);
if (mp) { if (mp) {
__lpfc_mbuf_free(phba, mp->virt, mp->phys); __lpfc_mbuf_free(phba, mp->virt, mp->phys);
kfree(mp); kfree(mp);
} }
ndlp = (struct lpfc_nodelist *) mb->context2; mb->ctx_buf = NULL;
mb->context2 = NULL; ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
mb->ctx_ndlp = NULL;
if (ndlp) { if (ndlp) {
spin_lock(shost->host_lock); spin_lock(shost->host_lock);
ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL; ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;

View File

@ -144,9 +144,9 @@ typedef struct lpfcMboxq {
MAILBOX_t mb; /* Mailbox cmd */ MAILBOX_t mb; /* Mailbox cmd */
struct lpfc_mqe mqe; struct lpfc_mqe mqe;
} u; } u;
struct lpfc_vport *vport;/* virtual port pointer */ struct lpfc_vport *vport; /* virtual port pointer */
void *context1; /* caller context information */ void *ctx_ndlp; /* caller ndlp information */
void *context2; /* caller context information */ void *ctx_buf; /* caller buffer information */
void *context3; void *context3;
void (*mbox_cmpl) (struct lpfc_hba *, struct lpfcMboxq *); void (*mbox_cmpl) (struct lpfc_hba *, struct lpfcMboxq *);

View File

@ -138,8 +138,8 @@ lpfc_vport_sparm(struct lpfc_hba *phba, struct lpfc_vport *vport)
* Grab buffer pointer and clear context1 so we can use * Grab buffer pointer and clear context1 so we can use
* lpfc_sli_issue_box_wait * lpfc_sli_issue_box_wait
*/ */
mp = (struct lpfc_dmabuf *) pmb->context1; mp = (struct lpfc_dmabuf *)pmb->ctx_buf;
pmb->context1 = NULL; pmb->ctx_buf = NULL;
pmb->vport = vport; pmb->vport = vport;
rc = lpfc_sli_issue_mbox_wait(phba, pmb, phba->fc_ratov * 2); rc = lpfc_sli_issue_mbox_wait(phba, pmb, phba->fc_ratov * 2);