From 7f90011ae784ba679b0ba22553082a97fb237c0c Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mar 28 2024 14:38:01 +0000 Subject: scsi: lpfc: Define lpfc_dmabuf type for ctx_buf ptr (bsc#1221777). --- diff --git a/patches.suse/scsi-lpfc-Define-lpfc_dmabuf-type-for-ctx_buf-ptr.patch b/patches.suse/scsi-lpfc-Define-lpfc_dmabuf-type-for-ctx_buf-ptr.patch new file mode 100644 index 0000000..1f78ce4 --- /dev/null +++ b/patches.suse/scsi-lpfc-Define-lpfc_dmabuf-type-for-ctx_buf-ptr.patch @@ -0,0 +1,470 @@ +From: Justin Tee +Date: Tue, 5 Mar 2024 12:05:00 -0800 +Subject: scsi: lpfc: Define lpfc_dmabuf type for ctx_buf ptr +Patch-mainline: Queued in subsystem maintainer repository +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git +Git-commit: 115d137aa918d879e3cca9605bbf59e0482aa734 +References: bsc#1221777 + +In LPFC_MBOXQ_t, the ctx_buf ptr shouldn't be defined as a generic void +*ptr. It is named ctx_buf and it should only be used as an lpfc_dmabuf +*ptr. Due to the void* declaration, there have been abuses of ctx_buf for +things not related to lpfc_dmabuf. + +So, set the ptr type for *ctx_buf as lpfc_dmabuf. Remove all type casts on +ctx_buf because it is no longer a void *ptr. Convert the abuse of ctx_buf +for something not related to lpfc_dmabuf to use the void *context3 ptr. + +A particular abuse of the ctx_buf warranted a new void *ext_buf ptr. +However, the usage of this new void *ext_buf is not generic. It is +intended to only hold virtual addresses for extended mailbox commands. + +Signed-off-by: Justin Tee +Link: https://lore.kernel.org/r/20240305200503.57317-10-justintee8345@gmail.com +Signed-off-by: Martin K. Petersen +Acked-by: Daniel Wagner +--- + drivers/scsi/lpfc/lpfc_bsg.c | 12 ++++++------ + drivers/scsi/lpfc/lpfc_els.c | 14 +++++++------- + drivers/scsi/lpfc/lpfc_hbadisc.c | 10 +++++----- + drivers/scsi/lpfc/lpfc_init.c | 8 ++++---- + drivers/scsi/lpfc/lpfc_mbox.c | 15 ++++----------- + drivers/scsi/lpfc/lpfc_nportdisc.c | 2 +- + drivers/scsi/lpfc/lpfc_sli.c | 35 +++++++++++++++++------------------ + drivers/scsi/lpfc/lpfc_sli.h | 6 +++++- + drivers/scsi/lpfc/lpfc_vport.c | 2 +- + 9 files changed, 50 insertions(+), 54 deletions(-) + +--- a/drivers/scsi/lpfc/lpfc_bsg.c ++++ b/drivers/scsi/lpfc/lpfc_bsg.c +@@ -2513,7 +2513,7 @@ static int lpfcdiag_loop_self_reg(struct + return -ENOMEM; + } + +- dmabuff = (struct lpfc_dmabuf *)mbox->ctx_buf; ++ dmabuff = mbox->ctx_buf; + mbox->ctx_buf = NULL; + mbox->ctx_ndlp = NULL; + status = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); +@@ -3553,7 +3553,7 @@ lpfc_bsg_issue_mbox_ext_handle_job(struc + struct lpfc_sli_config_mbox *sli_cfg_mbx; + uint8_t *pmbx; + +- dd_data = pmboxq->ctx_buf; ++ dd_data = pmboxq->context3; + + /* Determine if job has been aborted */ + spin_lock_irqsave(&phba->ct_ev_lock, flags); +@@ -3940,7 +3940,7 @@ lpfc_bsg_sli_cfg_read_cmd_ext(struct lpf + pmboxq->mbox_cmpl = lpfc_bsg_issue_read_mbox_ext_cmpl; + + /* context fields to callback function */ +- pmboxq->ctx_buf = dd_data; ++ pmboxq->context3 = dd_data; + dd_data->type = TYPE_MBOX; + dd_data->set_job = job; + dd_data->context_un.mbox.pmboxq = pmboxq; +@@ -4112,7 +4112,7 @@ lpfc_bsg_sli_cfg_write_cmd_ext(struct lp + pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl; + + /* context fields to callback function */ +- pmboxq->ctx_buf = dd_data; ++ pmboxq->context3 = dd_data; + dd_data->type = TYPE_MBOX; + dd_data->set_job = job; + dd_data->context_un.mbox.pmboxq = pmboxq; +@@ -4460,7 +4460,7 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba + pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl; + + /* context fields to callback function */ +- pmboxq->ctx_buf = dd_data; ++ pmboxq->context3 = dd_data; + dd_data->type = TYPE_MBOX; + dd_data->set_job = job; + dd_data->context_un.mbox.pmboxq = pmboxq; +@@ -4747,7 +4747,7 @@ lpfc_bsg_issue_mbox(struct lpfc_hba *phb + if (mbox_req->inExtWLen || mbox_req->outExtWLen) { + from = pmbx; + ext = from + sizeof(MAILBOX_t); +- pmboxq->ctx_buf = ext; ++ pmboxq->ext_buf = ext; + pmboxq->in_ext_byte_len = + mbox_req->inExtWLen * sizeof(uint32_t); + pmboxq->out_ext_byte_len = +--- a/drivers/scsi/lpfc/lpfc_els.c ++++ b/drivers/scsi/lpfc/lpfc_els.c +@@ -7290,7 +7290,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_h + mbox->in_ext_byte_len = DMP_SFF_PAGE_A0_SIZE; + mbox->out_ext_byte_len = DMP_SFF_PAGE_A0_SIZE; + mbox->mbox_offset_word = 5; +- mbox->ctx_buf = virt; ++ mbox->ext_buf = virt; + } else { + bf_set(lpfc_mbx_memory_dump_type3_length, + &mbox->u.mqe.un.mem_dump_type3, DMP_SFF_PAGE_A0_SIZE); +@@ -7306,7 +7306,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_h + } + + if (phba->sli_rev == LPFC_SLI_REV4) +- mp = (struct lpfc_dmabuf *)(mbox->ctx_buf); ++ mp = mbox->ctx_buf; + else + mp = mpsave; + +@@ -7349,7 +7349,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_h + mbox->in_ext_byte_len = DMP_SFF_PAGE_A2_SIZE; + mbox->out_ext_byte_len = DMP_SFF_PAGE_A2_SIZE; + mbox->mbox_offset_word = 5; +- mbox->ctx_buf = virt; ++ mbox->ext_buf = virt; + } else { + bf_set(lpfc_mbx_memory_dump_type3_length, + &mbox->u.mqe.un.mem_dump_type3, DMP_SFF_PAGE_A2_SIZE); +@@ -8637,9 +8637,9 @@ lpfc_els_rsp_rls_acc(struct lpfc_hba *ph + mb = &pmb->u.mb; + + ndlp = pmb->ctx_ndlp; +- rxid = (uint16_t)((unsigned long)(pmb->ctx_buf) & 0xffff); +- oxid = (uint16_t)(((unsigned long)(pmb->ctx_buf) >> 16) & 0xffff); +- pmb->ctx_buf = NULL; ++ rxid = (uint16_t)((unsigned long)(pmb->context3) & 0xffff); ++ oxid = (uint16_t)(((unsigned long)(pmb->context3) >> 16) & 0xffff); ++ pmb->context3 = NULL; + pmb->ctx_ndlp = NULL; + + if (mb->mbxStatus) { +@@ -8743,7 +8743,7 @@ lpfc_els_rcv_rls(struct lpfc_vport *vpor + mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC); + if (mbox) { + lpfc_read_lnk_stat(phba, mbox); +- mbox->ctx_buf = (void *)((unsigned long) ++ mbox->context3 = (void *)((unsigned long) + (ox_id << 16 | ctx)); + mbox->ctx_ndlp = lpfc_nlp_get(ndlp); + if (!mbox->ctx_ndlp) +--- a/drivers/scsi/lpfc/lpfc_hbadisc.c ++++ b/drivers/scsi/lpfc/lpfc_hbadisc.c +@@ -3428,7 +3428,7 @@ static void + lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) + { + MAILBOX_t *mb = &pmb->u.mb; +- struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ struct lpfc_dmabuf *mp = pmb->ctx_buf; + struct lpfc_vport *vport = pmb->vport; + struct Scsi_Host *shost = lpfc_shost_from_vport(vport); + struct serv_parm *sp = &vport->fc_sparam; +@@ -3736,7 +3736,7 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_ + struct lpfc_mbx_read_top *la; + struct lpfc_sli_ring *pring; + MAILBOX_t *mb = &pmb->u.mb; +- struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(pmb->ctx_buf); ++ struct lpfc_dmabuf *mp = pmb->ctx_buf; + uint8_t attn_type; + + /* Unblock ELS traffic */ +@@ -3850,7 +3850,7 @@ void + lpfc_mbx_cmpl_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) + { + struct lpfc_vport *vport = pmb->vport; +- struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ struct lpfc_dmabuf *mp = pmb->ctx_buf; + struct lpfc_nodelist *ndlp = pmb->ctx_ndlp; + + /* The driver calls the state machine with the pmb pointer +@@ -4065,7 +4065,7 @@ lpfc_create_static_vport(struct lpfc_hba + * the dump routine is a single-use construct. + */ + if (pmb->ctx_buf) { +- mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ mp = pmb->ctx_buf; + lpfc_mbuf_free(phba, mp->virt, mp->phys); + kfree(mp); + pmb->ctx_buf = NULL; +@@ -4088,7 +4088,7 @@ lpfc_create_static_vport(struct lpfc_hba + + if (phba->sli_rev == LPFC_SLI_REV4) { + byte_count = pmb->u.mqe.un.mb_words[5]; +- mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ mp = pmb->ctx_buf; + if (byte_count > sizeof(struct static_vport_info) - + offset) + byte_count = sizeof(struct static_vport_info) +--- a/drivers/scsi/lpfc/lpfc_init.c ++++ b/drivers/scsi/lpfc/lpfc_init.c +@@ -460,7 +460,7 @@ lpfc_config_port_post(struct lpfc_hba *p + return -EIO; + } + +- mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ mp = pmb->ctx_buf; + + /* This dmabuf was allocated by lpfc_read_sparam. The dmabuf is no + * longer needed. Prevent unintended ctx_buf access as the mbox is +@@ -2217,7 +2217,7 @@ lpfc_handle_latt(struct lpfc_hba *phba) + /* Cleanup any outstanding ELS commands */ + lpfc_els_flush_all_cmd(phba); + psli->slistat.link_event++; +- lpfc_read_topology(phba, pmb, (struct lpfc_dmabuf *)pmb->ctx_buf); ++ lpfc_read_topology(phba, pmb, pmb->ctx_buf); + pmb->mbox_cmpl = lpfc_mbx_cmpl_read_topology; + pmb->vport = vport; + /* Block ELS IOCBs until we have processed this mbox command */ +@@ -5454,7 +5454,7 @@ lpfc_sli4_async_link_evt(struct lpfc_hba + phba->sli.slistat.link_event++; + + /* Create lpfc_handle_latt mailbox command from link ACQE */ +- lpfc_read_topology(phba, pmb, (struct lpfc_dmabuf *)pmb->ctx_buf); ++ lpfc_read_topology(phba, pmb, pmb->ctx_buf); + pmb->mbox_cmpl = lpfc_mbx_cmpl_read_topology; + pmb->vport = phba->pport; + +@@ -6347,7 +6347,7 @@ lpfc_sli4_async_fc_evt(struct lpfc_hba * + phba->sli.slistat.link_event++; + + /* Create lpfc_handle_latt mailbox command from link ACQE */ +- lpfc_read_topology(phba, pmb, (struct lpfc_dmabuf *)pmb->ctx_buf); ++ lpfc_read_topology(phba, pmb, pmb->ctx_buf); + pmb->mbox_cmpl = lpfc_mbx_cmpl_read_topology; + pmb->vport = phba->pport; + +--- a/drivers/scsi/lpfc/lpfc_mbox.c ++++ b/drivers/scsi/lpfc/lpfc_mbox.c +@@ -102,7 +102,7 @@ lpfc_mbox_rsrc_cleanup(struct lpfc_hba * + { + struct lpfc_dmabuf *mp; + +- mp = (struct lpfc_dmabuf *)mbox->ctx_buf; ++ mp = mbox->ctx_buf; + mbox->ctx_buf = NULL; + + /* Release the generic BPL buffer memory. */ +@@ -204,10 +204,8 @@ lpfc_dump_mem(struct lpfc_hba *phba, LPF + uint16_t region_id) + { + MAILBOX_t *mb; +- void *ctx; + + mb = &pmb->u.mb; +- ctx = pmb->ctx_buf; + + /* Setup to dump VPD region */ + memset(pmb, 0, sizeof (LPFC_MBOXQ_t)); +@@ -219,7 +217,6 @@ lpfc_dump_mem(struct lpfc_hba *phba, LPF + mb->un.varDmp.word_cnt = (DMP_RSP_SIZE / sizeof (uint32_t)); + mb->un.varDmp.co = 0; + mb->un.varDmp.resp_offset = 0; +- pmb->ctx_buf = ctx; + mb->mbxOwner = OWN_HOST; + return; + } +@@ -236,11 +233,8 @@ void + lpfc_dump_wakeup_param(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) + { + MAILBOX_t *mb; +- void *ctx; + + mb = &pmb->u.mb; +- /* Save context so that we can restore after memset */ +- ctx = pmb->ctx_buf; + + /* Setup to dump VPD region */ + memset(pmb, 0, sizeof(LPFC_MBOXQ_t)); +@@ -254,7 +248,6 @@ lpfc_dump_wakeup_param(struct lpfc_hba * + mb->un.varDmp.word_cnt = WAKE_UP_PARMS_WORD_SIZE; + mb->un.varDmp.co = 0; + mb->un.varDmp.resp_offset = 0; +- pmb->ctx_buf = ctx; + return; + } + +@@ -372,7 +365,7 @@ lpfc_read_topology(struct lpfc_hba *phba + /* Save address for later completion and set the owner to host so that + * the FW knows this mailbox is available for processing. + */ +- pmb->ctx_buf = (uint8_t *)mp; ++ pmb->ctx_buf = mp; + mb->mbxOwner = OWN_HOST; + return (0); + } +@@ -2385,7 +2378,7 @@ lpfc_mbx_cmpl_rdp_link_stat(struct lpfc_ + static void + lpfc_mbx_cmpl_rdp_page_a2(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox) + { +- struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)mbox->ctx_buf; ++ struct lpfc_dmabuf *mp = mbox->ctx_buf; + struct lpfc_rdp_context *rdp_context = + (struct lpfc_rdp_context *)(mbox->context3); + +@@ -2416,7 +2409,7 @@ void + lpfc_mbx_cmpl_rdp_page_a0(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox) + { + int rc; +- struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *)(mbox->ctx_buf); ++ struct lpfc_dmabuf *mp = mbox->ctx_buf; + struct lpfc_rdp_context *rdp_context = + (struct lpfc_rdp_context *)(mbox->context3); + +--- a/drivers/scsi/lpfc/lpfc_nportdisc.c ++++ b/drivers/scsi/lpfc/lpfc_nportdisc.c +@@ -682,7 +682,7 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba + struct lpfc_nodelist *ndlp; + uint32_t cmd; + +- elsiocb = (struct lpfc_iocbq *)mboxq->ctx_buf; ++ elsiocb = mboxq->context3; + ndlp = mboxq->ctx_ndlp; + vport = mboxq->vport; + cmd = elsiocb->drvrTimeout; +--- a/drivers/scsi/lpfc/lpfc_sli.c ++++ b/drivers/scsi/lpfc/lpfc_sli.c +@@ -2885,7 +2885,7 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba * + if (!test_bit(FC_UNLOADING, &phba->pport->load_flag) && + pmb->u.mb.mbxCommand == MBX_REG_LOGIN64 && + !pmb->u.mb.mbxStatus) { +- mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ mp = pmb->ctx_buf; + if (mp) { + pmb->ctx_buf = NULL; + lpfc_mbuf_free(phba, mp->virt, mp->phys); +@@ -5819,7 +5819,7 @@ lpfc_sli4_read_fcoe_params(struct lpfc_h + goto out_free_mboxq; + } + +- mp = (struct lpfc_dmabuf *)mboxq->ctx_buf; ++ mp = mboxq->ctx_buf; + rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); + + lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI, +@@ -8766,7 +8766,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phb + + mboxq->vport = vport; + rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); +- mp = (struct lpfc_dmabuf *)mboxq->ctx_buf; ++ mp = mboxq->ctx_buf; + if (rc == MBX_SUCCESS) { + memcpy(&vport->fc_sparam, mp->virt, sizeof(struct serv_parm)); + rc = 0; +@@ -9548,8 +9548,8 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba * + } + + /* Copy the mailbox extension data */ +- if (pmbox->in_ext_byte_len && pmbox->ctx_buf) { +- lpfc_sli_pcimem_bcopy(pmbox->ctx_buf, ++ if (pmbox->in_ext_byte_len && pmbox->ext_buf) { ++ lpfc_sli_pcimem_bcopy(pmbox->ext_buf, + (uint8_t *)phba->mbox_ext, + pmbox->in_ext_byte_len); + } +@@ -9562,10 +9562,10 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba * + = MAILBOX_HBA_EXT_OFFSET; + + /* Copy the mailbox extension data */ +- if (pmbox->in_ext_byte_len && pmbox->ctx_buf) ++ if (pmbox->in_ext_byte_len && pmbox->ext_buf) + lpfc_memcpy_to_slim(phba->MBslimaddr + + MAILBOX_HBA_EXT_OFFSET, +- pmbox->ctx_buf, pmbox->in_ext_byte_len); ++ pmbox->ext_buf, pmbox->in_ext_byte_len); + + if (mbx->mbxCommand == MBX_CONFIG_PORT) + /* copy command data into host mbox for cmpl */ +@@ -9688,9 +9688,9 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba * + lpfc_sli_pcimem_bcopy(phba->mbox, mbx, + MAILBOX_CMD_SIZE); + /* Copy the mailbox extension data */ +- if (pmbox->out_ext_byte_len && pmbox->ctx_buf) { ++ if (pmbox->out_ext_byte_len && pmbox->ext_buf) { + lpfc_sli_pcimem_bcopy(phba->mbox_ext, +- pmbox->ctx_buf, ++ pmbox->ext_buf, + pmbox->out_ext_byte_len); + } + } else { +@@ -9698,9 +9698,9 @@ lpfc_sli_issue_mbox_s3(struct lpfc_hba * + lpfc_memcpy_from_slim(mbx, phba->MBslimaddr, + MAILBOX_CMD_SIZE); + /* Copy the mailbox extension data */ +- if (pmbox->out_ext_byte_len && pmbox->ctx_buf) { ++ if (pmbox->out_ext_byte_len && pmbox->ext_buf) { + lpfc_memcpy_from_slim( +- pmbox->ctx_buf, ++ pmbox->ext_buf, + phba->MBslimaddr + + MAILBOX_HBA_EXT_OFFSET, + pmbox->out_ext_byte_len); +@@ -13813,10 +13813,10 @@ lpfc_sli_sp_intr_handler(int irq, void * + lpfc_sli_pcimem_bcopy(mbox, pmbox, + MAILBOX_CMD_SIZE); + if (pmb->out_ext_byte_len && +- pmb->ctx_buf) ++ pmb->ext_buf) + lpfc_sli_pcimem_bcopy( + phba->mbox_ext, +- pmb->ctx_buf, ++ pmb->ext_buf, + pmb->out_ext_byte_len); + } + if (pmb->mbox_flag & LPFC_MBX_IMED_UNREG) { +@@ -13830,8 +13830,7 @@ lpfc_sli_sp_intr_handler(int irq, void * + pmbox->un.varWords[0], 0); + + if (!pmbox->mbxStatus) { +- mp = (struct lpfc_dmabuf *) +- (pmb->ctx_buf); ++ mp = pmb->ctx_buf; + ndlp = pmb->ctx_ndlp; + + /* Reg_LOGIN of dflt RPI was +@@ -14339,7 +14338,7 @@ lpfc_sli4_sp_handle_mbox_event(struct lp + mcqe_status, + pmbox->un.varWords[0], 0); + if (mcqe_status == MB_CQE_STATUS_SUCCESS) { +- mp = (struct lpfc_dmabuf *)(pmb->ctx_buf); ++ mp = pmb->ctx_buf; + ndlp = pmb->ctx_ndlp; + + /* Reg_LOGIN of dflt RPI was successful. Mark the +@@ -19858,7 +19857,7 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelis + lpfc_resume_rpi(mboxq, ndlp); + if (cmpl) { + mboxq->mbox_cmpl = cmpl; +- mboxq->ctx_buf = arg; ++ mboxq->context3 = arg; + } else + mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl; + mboxq->ctx_ndlp = ndlp; +@@ -20675,7 +20674,7 @@ lpfc_sli4_get_config_region23(struct lpf + if (lpfc_sli4_dump_cfg_rg23(phba, mboxq)) + goto out; + mqe = &mboxq->u.mqe; +- mp = (struct lpfc_dmabuf *)mboxq->ctx_buf; ++ mp = mboxq->ctx_buf; + rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL); + if (rc) + goto out; +--- a/drivers/scsi/lpfc/lpfc_sli.h ++++ b/drivers/scsi/lpfc/lpfc_sli.h +@@ -183,7 +183,11 @@ typedef struct lpfcMboxq { + } u; + struct lpfc_vport *vport; /* virtual port pointer */ + struct lpfc_nodelist *ctx_ndlp; /* caller ndlp pointer */ +- void *ctx_buf; /* caller buffer information */ ++ struct lpfc_dmabuf *ctx_buf; /* caller buffer information */ ++ void *ext_buf; /* extended buffer for extended mbox ++ * cmds. Not a generic pointer. ++ * Use for storing virtual address. ++ */ + void *context3; /* a generic pointer. Code must + * accommodate the actual datatype. + */ +--- a/drivers/scsi/lpfc/lpfc_vport.c ++++ b/drivers/scsi/lpfc/lpfc_vport.c +@@ -166,7 +166,7 @@ lpfc_vport_sparm(struct lpfc_hba *phba, + } + } + +- mp = (struct lpfc_dmabuf *)pmb->ctx_buf; ++ mp = pmb->ctx_buf; + memcpy(&vport->fc_sparam, mp->virt, sizeof (struct serv_parm)); + memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName, + sizeof (struct lpfc_name)); diff --git a/series.conf b/series.conf index 029e900..a7fc7e9 100644 --- a/series.conf +++ b/series.conf @@ -20076,6 +20076,7 @@ patches.suse/scsi-lpfc-Release-hbalock-before-calling-lpfc_worker.patch patches.suse/scsi-lpfc-Use-a-dedicated-lock-for-ras_fwlog-state.patch patches.suse/scsi-lpfc-Define-lpfc_nodelist-type-for-ctx_ndlp-ptr.patch + patches.suse/scsi-lpfc-Define-lpfc_dmabuf-type-for-ctx_buf-ptr.patch ######################################################## # end of sorted patches