mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
Merge branch '6.9/s/lpfc2' into 6.10/s/lpfc
Pull in bug fix update from 6.9/scsi-fixes to accommodate 14.4.0.2 series. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
commit
d94fc48129
|
|
@ -1333,7 +1333,6 @@ struct lpfc_hba {
|
|||
struct timer_list fabric_block_timer;
|
||||
unsigned long bit_flags;
|
||||
atomic_t num_rsrc_err;
|
||||
atomic_t num_cmd_success;
|
||||
unsigned long last_rsrc_error_time;
|
||||
unsigned long last_ramp_down_time;
|
||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||
|
|
@ -1438,6 +1437,7 @@ struct lpfc_hba {
|
|||
struct timer_list inactive_vmid_poll;
|
||||
|
||||
/* RAS Support */
|
||||
spinlock_t ras_fwlog_lock; /* do not take while holding another lock */
|
||||
struct lpfc_ras_fwlog ras_fwlog;
|
||||
|
||||
uint32_t iocb_cnt;
|
||||
|
|
|
|||
|
|
@ -5865,9 +5865,9 @@ lpfc_ras_fwlog_buffsize_set(struct lpfc_hba *phba, uint val)
|
|||
if (phba->cfg_ras_fwlog_func != PCI_FUNC(phba->pcidev->devfn))
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
state = phba->ras_fwlog.state;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
if (state == REG_INPROGRESS) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI, "6147 RAS Logging "
|
||||
|
|
|
|||
|
|
@ -2513,7 +2513,7 @@ static int lpfcdiag_loop_self_reg(struct lpfc_hba *phba, uint16_t *rpi)
|
|||
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);
|
||||
|
|
@ -3376,7 +3376,7 @@ lpfc_bsg_issue_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
|
|||
unsigned long flags;
|
||||
uint8_t *pmb, *pmb_buf;
|
||||
|
||||
dd_data = pmboxq->ctx_ndlp;
|
||||
dd_data = pmboxq->ctx_u.dd_data;
|
||||
|
||||
/*
|
||||
* The outgoing buffer is readily referred from the dma buffer,
|
||||
|
|
@ -3553,7 +3553,7 @@ lpfc_bsg_issue_mbox_ext_handle_job(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
|
|||
struct lpfc_sli_config_mbox *sli_cfg_mbx;
|
||||
uint8_t *pmbx;
|
||||
|
||||
dd_data = pmboxq->ctx_buf;
|
||||
dd_data = pmboxq->ctx_u.dd_data;
|
||||
|
||||
/* 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 lpfc_hba *phba, struct bsg_job *job,
|
|||
pmboxq->mbox_cmpl = lpfc_bsg_issue_read_mbox_ext_cmpl;
|
||||
|
||||
/* context fields to callback function */
|
||||
pmboxq->ctx_buf = dd_data;
|
||||
pmboxq->ctx_u.dd_data = 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 lpfc_hba *phba, struct bsg_job *job,
|
|||
pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl;
|
||||
|
||||
/* context fields to callback function */
|
||||
pmboxq->ctx_buf = dd_data;
|
||||
pmboxq->ctx_u.dd_data = 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 *phba, struct bsg_job *job,
|
|||
pmboxq->mbox_cmpl = lpfc_bsg_issue_write_mbox_ext_cmpl;
|
||||
|
||||
/* context fields to callback function */
|
||||
pmboxq->ctx_buf = dd_data;
|
||||
pmboxq->ctx_u.dd_data = 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 *phba, struct bsg_job *job,
|
|||
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 =
|
||||
|
|
@ -4875,7 +4875,7 @@ lpfc_bsg_issue_mbox(struct lpfc_hba *phba, struct bsg_job *job,
|
|||
pmboxq->mbox_cmpl = lpfc_bsg_issue_mbox_cmpl;
|
||||
|
||||
/* setup context field to pass wait_queue pointer to wake function */
|
||||
pmboxq->ctx_ndlp = dd_data;
|
||||
pmboxq->ctx_u.dd_data = dd_data;
|
||||
dd_data->type = TYPE_MBOX;
|
||||
dd_data->set_job = job;
|
||||
dd_data->context_un.mbox.pmboxq = pmboxq;
|
||||
|
|
@ -5070,12 +5070,12 @@ lpfc_bsg_get_ras_config(struct bsg_job *job)
|
|||
bsg_reply->reply_data.vendor_reply.vendor_rsp;
|
||||
|
||||
/* Current logging state */
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (ras_fwlog->state == ACTIVE)
|
||||
ras_reply->state = LPFC_RASLOG_STATE_RUNNING;
|
||||
else
|
||||
ras_reply->state = LPFC_RASLOG_STATE_STOPPED;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
ras_reply->log_level = phba->ras_fwlog.fw_loglevel;
|
||||
ras_reply->log_buff_sz = phba->cfg_ras_fwlog_buffsize;
|
||||
|
|
@ -5132,13 +5132,13 @@ lpfc_bsg_set_ras_config(struct bsg_job *job)
|
|||
|
||||
if (action == LPFC_RASACTION_STOP_LOGGING) {
|
||||
/* Check if already disabled */
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (ras_fwlog->state != ACTIVE) {
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
rc = -ESRCH;
|
||||
goto ras_job_error;
|
||||
}
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
/* Disable logging */
|
||||
lpfc_ras_stop_fwlog(phba);
|
||||
|
|
@ -5149,10 +5149,10 @@ lpfc_bsg_set_ras_config(struct bsg_job *job)
|
|||
* FW-logging with new log-level. Return status
|
||||
* "Logging already Running" to caller.
|
||||
**/
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (ras_fwlog->state != INACTIVE)
|
||||
action_status = -EINPROGRESS;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
/* Enable logging */
|
||||
rc = lpfc_sli4_ras_fwlog_init(phba, log_level,
|
||||
|
|
@ -5268,13 +5268,13 @@ lpfc_bsg_get_ras_fwlog(struct bsg_job *job)
|
|||
goto ras_job_error;
|
||||
|
||||
/* Logging to be stopped before reading */
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (ras_fwlog->state == ACTIVE) {
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
rc = -EINPROGRESS;
|
||||
goto ras_job_error;
|
||||
}
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
if (job->request_len <
|
||||
sizeof(struct fc_bsg_request) +
|
||||
|
|
|
|||
|
|
@ -2194,12 +2194,12 @@ static int lpfc_debugfs_ras_log_data(struct lpfc_hba *phba,
|
|||
|
||||
memset(buffer, 0, size);
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (phba->ras_fwlog.state != ACTIVE) {
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
list_for_each_entry_safe(dmabuf, next,
|
||||
&phba->ras_fwlog.fwlog_buff_list, list) {
|
||||
|
|
@ -2250,13 +2250,13 @@ lpfc_debugfs_ras_log_open(struct inode *inode, struct file *file)
|
|||
int size;
|
||||
int rc = -ENOMEM;
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
if (phba->ras_fwlog.state != ACTIVE) {
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
if (check_mul_overflow(LPFC_RAS_MIN_BUFF_POST_SIZE,
|
||||
phba->cfg_ras_fwlog_buffsize, &size))
|
||||
|
|
|
|||
|
|
@ -4437,23 +4437,23 @@ lpfc_els_retry_delay(struct timer_list *t)
|
|||
unsigned long flags;
|
||||
struct lpfc_work_evt *evtp = &ndlp->els_retry_evt;
|
||||
|
||||
/* Hold a node reference for outstanding queued work */
|
||||
if (!lpfc_nlp_get(ndlp))
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, flags);
|
||||
if (!list_empty(&evtp->evt_listp)) {
|
||||
spin_unlock_irqrestore(&phba->hbalock, flags);
|
||||
lpfc_nlp_put(ndlp);
|
||||
return;
|
||||
}
|
||||
|
||||
/* We need to hold the node by incrementing the reference
|
||||
* count until the queued work is done
|
||||
*/
|
||||
evtp->evt_arg1 = lpfc_nlp_get(ndlp);
|
||||
if (evtp->evt_arg1) {
|
||||
evtp->evt = LPFC_EVT_ELS_RETRY;
|
||||
list_add_tail(&evtp->evt_listp, &phba->work_list);
|
||||
lpfc_worker_wake_up(phba);
|
||||
}
|
||||
evtp->evt_arg1 = ndlp;
|
||||
evtp->evt = LPFC_EVT_ELS_RETRY;
|
||||
list_add_tail(&evtp->evt_listp, &phba->work_list);
|
||||
spin_unlock_irqrestore(&phba->hbalock, flags);
|
||||
return;
|
||||
|
||||
lpfc_worker_wake_up(phba);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -7238,7 +7238,7 @@ lpfc_get_rdp_info(struct lpfc_hba *phba, struct lpfc_rdp_context *rdp_context)
|
|||
goto rdp_fail;
|
||||
mbox->vport = rdp_context->ndlp->vport;
|
||||
mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a0;
|
||||
mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
|
||||
mbox->ctx_u.rdp = rdp_context;
|
||||
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
|
||||
if (rc == MBX_NOT_FINISHED) {
|
||||
lpfc_mbox_rsrc_cleanup(phba, mbox, MBOX_THD_UNLOCKED);
|
||||
|
|
@ -7290,7 +7290,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_hba *phba,
|
|||
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);
|
||||
|
|
@ -7298,7 +7298,6 @@ int lpfc_get_sfp_info_wait(struct lpfc_hba *phba,
|
|||
mbox->u.mqe.un.mem_dump_type3.addr_hi = putPaddrHigh(mp->phys);
|
||||
}
|
||||
mbox->vport = phba->pport;
|
||||
mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
|
||||
|
||||
rc = lpfc_sli_issue_mbox_wait(phba, mbox, 30);
|
||||
if (rc == MBX_NOT_FINISHED) {
|
||||
|
|
@ -7307,7 +7306,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_hba *phba,
|
|||
}
|
||||
|
||||
if (phba->sli_rev == LPFC_SLI_REV4)
|
||||
mp = (struct lpfc_dmabuf *)(mbox->ctx_buf);
|
||||
mp = mbox->ctx_buf;
|
||||
else
|
||||
mp = mpsave;
|
||||
|
||||
|
|
@ -7350,7 +7349,7 @@ int lpfc_get_sfp_info_wait(struct lpfc_hba *phba,
|
|||
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);
|
||||
|
|
@ -7358,7 +7357,6 @@ int lpfc_get_sfp_info_wait(struct lpfc_hba *phba,
|
|||
mbox->u.mqe.un.mem_dump_type3.addr_hi = putPaddrHigh(mp->phys);
|
||||
}
|
||||
|
||||
mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
|
||||
rc = lpfc_sli_issue_mbox_wait(phba, mbox, 30);
|
||||
if (bf_get(lpfc_mqe_status, &mbox->u.mqe)) {
|
||||
rc = 1;
|
||||
|
|
@ -7500,9 +7498,9 @@ lpfc_els_lcb_rsp(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
int rc;
|
||||
|
||||
mb = &pmb->u.mb;
|
||||
lcb_context = (struct lpfc_lcb_context *)pmb->ctx_ndlp;
|
||||
lcb_context = pmb->ctx_u.lcb;
|
||||
ndlp = lcb_context->ndlp;
|
||||
pmb->ctx_ndlp = NULL;
|
||||
memset(&pmb->ctx_u, 0, sizeof(pmb->ctx_u));
|
||||
pmb->ctx_buf = NULL;
|
||||
|
||||
shdr = (union lpfc_sli4_cfg_shdr *)
|
||||
|
|
@ -7642,7 +7640,7 @@ lpfc_sli4_set_beacon(struct lpfc_vport *vport,
|
|||
lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
|
||||
LPFC_MBOX_OPCODE_SET_BEACON_CONFIG, len,
|
||||
LPFC_SLI4_MBX_EMBED);
|
||||
mbox->ctx_ndlp = (void *)lcb_context;
|
||||
mbox->ctx_u.lcb = lcb_context;
|
||||
mbox->vport = phba->pport;
|
||||
mbox->mbox_cmpl = lpfc_els_lcb_rsp;
|
||||
bf_set(lpfc_mbx_set_beacon_port_num, &mbox->u.mqe.un.beacon_config,
|
||||
|
|
@ -8639,9 +8637,9 @@ lpfc_els_rsp_rls_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
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)(pmb->ctx_u.ox_rx_id & 0xffff);
|
||||
oxid = (uint16_t)((pmb->ctx_u.ox_rx_id >> 16) & 0xffff);
|
||||
memset(&pmb->ctx_u, 0, sizeof(pmb->ctx_u));
|
||||
pmb->ctx_ndlp = NULL;
|
||||
|
||||
if (mb->mbxStatus) {
|
||||
|
|
@ -8745,8 +8743,7 @@ lpfc_els_rcv_rls(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
|
|||
mbox = mempool_alloc(phba->mbox_mem_pool, GFP_ATOMIC);
|
||||
if (mbox) {
|
||||
lpfc_read_lnk_stat(phba, mbox);
|
||||
mbox->ctx_buf = (void *)((unsigned long)
|
||||
(ox_id << 16 | ctx));
|
||||
mbox->ctx_u.ox_rx_id = ox_id << 16 | ctx;
|
||||
mbox->ctx_ndlp = lpfc_nlp_get(ndlp);
|
||||
if (!mbox->ctx_ndlp)
|
||||
goto node_err;
|
||||
|
|
|
|||
|
|
@ -257,7 +257,9 @@ lpfc_dev_loss_tmo_callbk(struct fc_rport *rport)
|
|||
if (evtp->evt_arg1) {
|
||||
evtp->evt = LPFC_EVT_DEV_LOSS;
|
||||
list_add_tail(&evtp->evt_listp, &phba->work_list);
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
lpfc_worker_wake_up(phba);
|
||||
return;
|
||||
}
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
} else {
|
||||
|
|
@ -275,10 +277,7 @@ lpfc_dev_loss_tmo_callbk(struct fc_rport *rport)
|
|||
lpfc_disc_state_machine(vport, ndlp, NULL,
|
||||
NLP_EVT_DEVICE_RM);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -3429,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;
|
||||
|
|
@ -3737,7 +3736,7 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
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 */
|
||||
|
|
@ -3851,8 +3850,8 @@ 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_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
struct lpfc_dmabuf *mp = pmb->ctx_buf;
|
||||
struct lpfc_nodelist *ndlp = pmb->ctx_ndlp;
|
||||
|
||||
/* The driver calls the state machine with the pmb pointer
|
||||
* but wants to make sure a stale ctx_buf isn't acted on.
|
||||
|
|
@ -4066,7 +4065,7 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
|
|||
* 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;
|
||||
|
|
@ -4089,7 +4088,7 @@ lpfc_create_static_vport(struct lpfc_hba *phba)
|
|||
|
||||
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)
|
||||
|
|
@ -4169,7 +4168,7 @@ lpfc_mbx_cmpl_fabric_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
{
|
||||
struct lpfc_vport *vport = pmb->vport;
|
||||
MAILBOX_t *mb = &pmb->u.mb;
|
||||
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
struct lpfc_nodelist *ndlp = pmb->ctx_ndlp;
|
||||
|
||||
pmb->ctx_ndlp = NULL;
|
||||
|
||||
|
|
@ -4307,7 +4306,7 @@ void
|
|||
lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
||||
{
|
||||
MAILBOX_t *mb = &pmb->u.mb;
|
||||
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
struct lpfc_nodelist *ndlp = pmb->ctx_ndlp;
|
||||
struct lpfc_vport *vport = pmb->vport;
|
||||
int rc;
|
||||
|
||||
|
|
@ -4431,7 +4430,7 @@ lpfc_mbx_cmpl_fc_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
{
|
||||
struct lpfc_vport *vport = pmb->vport;
|
||||
MAILBOX_t *mb = &pmb->u.mb;
|
||||
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
struct lpfc_nodelist *ndlp = pmb->ctx_ndlp;
|
||||
|
||||
pmb->ctx_ndlp = NULL;
|
||||
if (mb->mbxStatus) {
|
||||
|
|
@ -5174,7 +5173,7 @@ lpfc_nlp_logo_unreg(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
struct lpfc_vport *vport = pmb->vport;
|
||||
struct lpfc_nodelist *ndlp;
|
||||
|
||||
ndlp = (struct lpfc_nodelist *)(pmb->ctx_ndlp);
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
if (!ndlp)
|
||||
return;
|
||||
lpfc_issue_els_logo(vport, ndlp, 0);
|
||||
|
|
@ -5496,7 +5495,7 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|||
if ((mb = phba->sli.mbox_active)) {
|
||||
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
|
||||
!(mb->mbox_flag & LPFC_MBX_IMED_UNREG) &&
|
||||
(ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
|
||||
(ndlp == mb->ctx_ndlp)) {
|
||||
mb->ctx_ndlp = NULL;
|
||||
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
|
||||
}
|
||||
|
|
@ -5507,7 +5506,7 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|||
list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) {
|
||||
if ((mb->u.mb.mbxCommand != MBX_REG_LOGIN64) ||
|
||||
(mb->mbox_flag & LPFC_MBX_IMED_UNREG) ||
|
||||
(ndlp != (struct lpfc_nodelist *)mb->ctx_ndlp))
|
||||
(ndlp != mb->ctx_ndlp))
|
||||
continue;
|
||||
|
||||
mb->ctx_ndlp = NULL;
|
||||
|
|
@ -5517,7 +5516,7 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|||
list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
|
||||
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
|
||||
!(mb->mbox_flag & LPFC_MBX_IMED_UNREG) &&
|
||||
(ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
|
||||
(ndlp == mb->ctx_ndlp)) {
|
||||
list_del(&mb->list);
|
||||
lpfc_mbox_rsrc_cleanup(phba, mb, MBOX_THD_LOCKED);
|
||||
|
||||
|
|
@ -6357,7 +6356,7 @@ void
|
|||
lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
||||
{
|
||||
MAILBOX_t *mb = &pmb->u.mb;
|
||||
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
struct lpfc_nodelist *ndlp = pmb->ctx_ndlp;
|
||||
struct lpfc_vport *vport = pmb->vport;
|
||||
|
||||
pmb->ctx_ndlp = NULL;
|
||||
|
|
|
|||
|
|
@ -460,7 +460,7 @@ lpfc_config_port_post(struct lpfc_hba *phba)
|
|||
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,
|
|||
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, struct lpfc_acqe_fc_la *acqe_fc)
|
|||
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;
|
||||
|
||||
|
|
@ -7705,6 +7705,9 @@ lpfc_setup_driver_resource_phase1(struct lpfc_hba *phba)
|
|||
"NVME" : " "),
|
||||
(phba->nvmet_support ? "NVMET" : " "));
|
||||
|
||||
/* ras_fwlog state */
|
||||
spin_lock_init(&phba->ras_fwlog_lock);
|
||||
|
||||
/* Initialize the IO buffer list used by driver for SLI3 SCSI */
|
||||
spin_lock_init(&phba->scsi_buf_list_get_lock);
|
||||
INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list_get);
|
||||
|
|
@ -13055,7 +13058,7 @@ lpfc_sli4_enable_msix(struct lpfc_hba *phba)
|
|||
rc = request_threaded_irq(eqhdl->irq,
|
||||
&lpfc_sli4_hba_intr_handler,
|
||||
&lpfc_sli4_hba_intr_handler_th,
|
||||
IRQF_ONESHOT, name, eqhdl);
|
||||
0, name, eqhdl);
|
||||
if (rc) {
|
||||
lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
|
||||
"0486 MSI-X fast-path (%d) "
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ lpfc_mbox_rsrc_cleanup(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox,
|
|||
{
|
||||
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, LPFC_MBOXQ_t *pmb, uint16_t offset,
|
|||
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, LPFC_MBOXQ_t *pmb, uint16_t offset,
|
|||
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 *phba, LPFC_MBOXQ_t *pmb)
|
|||
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, LPFC_MBOXQ_t *pmb,
|
|||
/* 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);
|
||||
}
|
||||
|
|
@ -1816,7 +1809,7 @@ lpfc_sli4_mbox_cmd_free(struct lpfc_hba *phba, struct lpfcMboxq *mbox)
|
|||
}
|
||||
/* Reinitialize the context pointers to avoid stale usage. */
|
||||
mbox->ctx_buf = NULL;
|
||||
mbox->context3 = NULL;
|
||||
memset(&mbox->ctx_u, 0, sizeof(mbox->ctx_u));
|
||||
kfree(mbox->sge_array);
|
||||
/* Finally, free the mailbox command itself */
|
||||
mempool_free(mbox, phba->mbox_mem_pool);
|
||||
|
|
@ -2366,8 +2359,7 @@ lpfc_mbx_cmpl_rdp_link_stat(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
|
|||
{
|
||||
MAILBOX_t *mb;
|
||||
int rc = FAILURE;
|
||||
struct lpfc_rdp_context *rdp_context =
|
||||
(struct lpfc_rdp_context *)(mboxq->ctx_ndlp);
|
||||
struct lpfc_rdp_context *rdp_context = mboxq->ctx_u.rdp;
|
||||
|
||||
mb = &mboxq->u.mb;
|
||||
if (mb->mbxStatus)
|
||||
|
|
@ -2385,9 +2377,8 @@ lpfc_mbx_cmpl_rdp_link_stat(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
|
|||
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_rdp_context *rdp_context =
|
||||
(struct lpfc_rdp_context *)(mbox->ctx_ndlp);
|
||||
struct lpfc_dmabuf *mp = mbox->ctx_buf;
|
||||
struct lpfc_rdp_context *rdp_context = mbox->ctx_u.rdp;
|
||||
|
||||
if (bf_get(lpfc_mqe_status, &mbox->u.mqe))
|
||||
goto error_mbox_free;
|
||||
|
|
@ -2401,7 +2392,7 @@ lpfc_mbx_cmpl_rdp_page_a2(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
|
|||
/* Save the dma buffer for cleanup in the final completion. */
|
||||
mbox->ctx_buf = mp;
|
||||
mbox->mbox_cmpl = lpfc_mbx_cmpl_rdp_link_stat;
|
||||
mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
|
||||
mbox->ctx_u.rdp = rdp_context;
|
||||
if (lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT) == MBX_NOT_FINISHED)
|
||||
goto error_mbox_free;
|
||||
|
||||
|
|
@ -2416,9 +2407,8 @@ 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_rdp_context *rdp_context =
|
||||
(struct lpfc_rdp_context *)(mbox->ctx_ndlp);
|
||||
struct lpfc_dmabuf *mp = mbox->ctx_buf;
|
||||
struct lpfc_rdp_context *rdp_context = mbox->ctx_u.rdp;
|
||||
|
||||
if (bf_get(lpfc_mqe_status, &mbox->u.mqe))
|
||||
goto error;
|
||||
|
|
@ -2448,7 +2438,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->mbox_cmpl = lpfc_mbx_cmpl_rdp_page_a2;
|
||||
mbox->ctx_ndlp = (struct lpfc_rdp_context *)rdp_context;
|
||||
mbox->ctx_u.rdp = rdp_context;
|
||||
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
|
||||
if (rc == MBX_NOT_FINISHED)
|
||||
goto error;
|
||||
|
|
|
|||
|
|
@ -300,7 +300,7 @@ lpfc_defer_plogi_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *login_mbox)
|
|||
int rc;
|
||||
|
||||
ndlp = login_mbox->ctx_ndlp;
|
||||
save_iocb = login_mbox->context3;
|
||||
save_iocb = login_mbox->ctx_u.save_iocb;
|
||||
|
||||
if (mb->mbxStatus == MBX_SUCCESS) {
|
||||
/* Now that REG_RPI completed successfully,
|
||||
|
|
@ -640,7 +640,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
|
|||
if (!login_mbox->ctx_ndlp)
|
||||
goto out;
|
||||
|
||||
login_mbox->context3 = save_iocb; /* For PLOGI ACC */
|
||||
login_mbox->ctx_u.save_iocb = save_iocb; /* For PLOGI ACC */
|
||||
|
||||
spin_lock_irq(&ndlp->lock);
|
||||
ndlp->nlp_flag |= (NLP_ACC_REGLOGIN | NLP_RCV_PLOGI);
|
||||
|
|
@ -682,8 +682,8 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
|
|||
struct lpfc_nodelist *ndlp;
|
||||
uint32_t cmd;
|
||||
|
||||
elsiocb = (struct lpfc_iocbq *)mboxq->ctx_buf;
|
||||
ndlp = (struct lpfc_nodelist *)mboxq->ctx_ndlp;
|
||||
elsiocb = mboxq->ctx_u.save_iocb;
|
||||
ndlp = mboxq->ctx_ndlp;
|
||||
vport = mboxq->vport;
|
||||
cmd = elsiocb->drvrTimeout;
|
||||
|
||||
|
|
@ -1875,7 +1875,7 @@ lpfc_rcv_logo_reglogin_issue(struct lpfc_vport *vport,
|
|||
/* cleanup any ndlp on mbox q waiting for reglogin cmpl */
|
||||
if ((mb = phba->sli.mbox_active)) {
|
||||
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
|
||||
(ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
|
||||
(ndlp == mb->ctx_ndlp)) {
|
||||
ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
|
||||
lpfc_nlp_put(ndlp);
|
||||
mb->ctx_ndlp = NULL;
|
||||
|
|
@ -1886,7 +1886,7 @@ lpfc_rcv_logo_reglogin_issue(struct lpfc_vport *vport,
|
|||
spin_lock_irq(&phba->hbalock);
|
||||
list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
|
||||
if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) &&
|
||||
(ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) {
|
||||
(ndlp == mb->ctx_ndlp)) {
|
||||
ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
|
||||
lpfc_nlp_put(ndlp);
|
||||
list_del(&mb->list);
|
||||
|
|
|
|||
|
|
@ -2616,9 +2616,9 @@ lpfc_nvme_unregister_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|||
/* No concern about the role change on the nvme remoteport.
|
||||
* The transport will update it.
|
||||
*/
|
||||
spin_lock_irq(&vport->phba->hbalock);
|
||||
spin_lock_irq(&ndlp->lock);
|
||||
ndlp->fc4_xpt_flags |= NVME_XPT_UNREG_WAIT;
|
||||
spin_unlock_irq(&vport->phba->hbalock);
|
||||
spin_unlock_irq(&ndlp->lock);
|
||||
|
||||
/* Don't let the host nvme transport keep sending keep-alives
|
||||
* on this remoteport. Vport is unloading, no recovery. The
|
||||
|
|
|
|||
|
|
@ -167,11 +167,10 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
|
|||
struct Scsi_Host *shost;
|
||||
struct scsi_device *sdev;
|
||||
unsigned long new_queue_depth;
|
||||
unsigned long num_rsrc_err, num_cmd_success;
|
||||
unsigned long num_rsrc_err;
|
||||
int i;
|
||||
|
||||
num_rsrc_err = atomic_read(&phba->num_rsrc_err);
|
||||
num_cmd_success = atomic_read(&phba->num_cmd_success);
|
||||
|
||||
/*
|
||||
* The error and success command counters are global per
|
||||
|
|
@ -186,20 +185,16 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
|
|||
for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
|
||||
shost = lpfc_shost_from_vport(vports[i]);
|
||||
shost_for_each_device(sdev, shost) {
|
||||
new_queue_depth =
|
||||
sdev->queue_depth * num_rsrc_err /
|
||||
(num_rsrc_err + num_cmd_success);
|
||||
if (!new_queue_depth)
|
||||
new_queue_depth = sdev->queue_depth - 1;
|
||||
if (num_rsrc_err >= sdev->queue_depth)
|
||||
new_queue_depth = 1;
|
||||
else
|
||||
new_queue_depth = sdev->queue_depth -
|
||||
new_queue_depth;
|
||||
num_rsrc_err;
|
||||
scsi_change_queue_depth(sdev, new_queue_depth);
|
||||
}
|
||||
}
|
||||
lpfc_destroy_vport_work_array(phba, vports);
|
||||
atomic_set(&phba->num_rsrc_err, 0);
|
||||
atomic_set(&phba->num_cmd_success, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -5336,16 +5331,6 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
|
|||
}
|
||||
err = lpfc_bg_scsi_prep_dma_buf(phba, lpfc_cmd);
|
||||
} else {
|
||||
if (vport->phba->cfg_enable_bg) {
|
||||
lpfc_printf_vlog(vport,
|
||||
KERN_INFO, LOG_SCSI_CMD,
|
||||
"9038 BLKGRD: rcvd PROT_NORMAL cmd: "
|
||||
"x%x reftag x%x cnt %u pt %x\n",
|
||||
cmnd->cmnd[0],
|
||||
scsi_prot_ref_tag(cmnd),
|
||||
scsi_logical_block_count(cmnd),
|
||||
(cmnd->cmnd[1]>>5));
|
||||
}
|
||||
err = lpfc_scsi_prep_dma_buf(phba, lpfc_cmd);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1217,9 +1217,9 @@ lpfc_set_rrq_active(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
|
|||
empty = list_empty(&phba->active_rrq_list);
|
||||
list_add_tail(&rrq->list, &phba->active_rrq_list);
|
||||
phba->hba_flag |= HBA_RRQ_ACTIVE;
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
if (empty)
|
||||
lpfc_worker_wake_up(phba);
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
return 0;
|
||||
out:
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
|
|
@ -2830,7 +2830,7 @@ lpfc_sli_wake_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
|
|||
*/
|
||||
pmboxq->mbox_flag |= LPFC_MBX_WAKE;
|
||||
spin_lock_irqsave(&phba->hbalock, drvr_flag);
|
||||
pmbox_done = (struct completion *)pmboxq->context3;
|
||||
pmbox_done = pmboxq->ctx_u.mbox_wait;
|
||||
if (pmbox_done)
|
||||
complete(pmbox_done);
|
||||
spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
|
||||
|
|
@ -2885,7 +2885,7 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
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);
|
||||
|
|
@ -2914,12 +2914,12 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
}
|
||||
|
||||
if (pmb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
|
||||
ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
lpfc_nlp_put(ndlp);
|
||||
}
|
||||
|
||||
if (pmb->u.mb.mbxCommand == MBX_UNREG_LOGIN) {
|
||||
ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
|
||||
/* Check to see if there are any deferred events to process */
|
||||
if (ndlp) {
|
||||
|
|
@ -2952,7 +2952,7 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
|
||||
/* This nlp_put pairs with lpfc_sli4_resume_rpi */
|
||||
if (pmb->u.mb.mbxCommand == MBX_RESUME_RPI) {
|
||||
ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
lpfc_nlp_put(ndlp);
|
||||
}
|
||||
|
||||
|
|
@ -5819,7 +5819,7 @@ lpfc_sli4_read_fcoe_params(struct lpfc_hba *phba)
|
|||
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,
|
||||
|
|
@ -6849,9 +6849,9 @@ lpfc_ras_stop_fwlog(struct lpfc_hba *phba)
|
|||
{
|
||||
struct lpfc_ras_fwlog *ras_fwlog = &phba->ras_fwlog;
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
ras_fwlog->state = INACTIVE;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
/* Disable FW logging to host memory */
|
||||
writel(LPFC_CTL_PDEV_CTL_DDL_RAS,
|
||||
|
|
@ -6894,9 +6894,9 @@ lpfc_sli4_ras_dma_free(struct lpfc_hba *phba)
|
|||
ras_fwlog->lwpd.virt = NULL;
|
||||
}
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
ras_fwlog->state = INACTIVE;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -6998,9 +6998,9 @@ lpfc_sli4_ras_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
|||
goto disable_ras;
|
||||
}
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
ras_fwlog->state = ACTIVE;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
mempool_free(pmb, phba->mbox_mem_pool);
|
||||
|
||||
return;
|
||||
|
|
@ -7032,9 +7032,9 @@ lpfc_sli4_ras_fwlog_init(struct lpfc_hba *phba,
|
|||
uint32_t len = 0, fwlog_buffsize, fwlog_entry_count;
|
||||
int rc = 0;
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
ras_fwlog->state = INACTIVE;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
|
||||
fwlog_buffsize = (LPFC_RAS_MIN_BUFF_POST_SIZE *
|
||||
phba->cfg_ras_fwlog_buffsize);
|
||||
|
|
@ -7095,9 +7095,9 @@ lpfc_sli4_ras_fwlog_init(struct lpfc_hba *phba,
|
|||
mbx_fwlog->u.request.lwpd.addr_lo = putPaddrLow(ras_fwlog->lwpd.phys);
|
||||
mbx_fwlog->u.request.lwpd.addr_hi = putPaddrHigh(ras_fwlog->lwpd.phys);
|
||||
|
||||
spin_lock_irq(&phba->hbalock);
|
||||
spin_lock_irq(&phba->ras_fwlog_lock);
|
||||
ras_fwlog->state = REG_INPROGRESS;
|
||||
spin_unlock_irq(&phba->hbalock);
|
||||
spin_unlock_irq(&phba->ras_fwlog_lock);
|
||||
mbox->vport = phba->pport;
|
||||
mbox->mbox_cmpl = lpfc_sli4_ras_mbox_cmpl;
|
||||
|
||||
|
|
@ -8766,7 +8766,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
|
|||
|
||||
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 *phba, LPFC_MBOXQ_t *pmbox,
|
|||
}
|
||||
|
||||
/* 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 *phba, LPFC_MBOXQ_t *pmbox,
|
|||
= 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 *phba, LPFC_MBOXQ_t *pmbox,
|
|||
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 *phba, LPFC_MBOXQ_t *pmbox,
|
|||
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);
|
||||
|
|
@ -11373,18 +11373,18 @@ lpfc_sli_post_recovery_event(struct lpfc_hba *phba,
|
|||
unsigned long iflags;
|
||||
struct lpfc_work_evt *evtp = &ndlp->recovery_evt;
|
||||
|
||||
/* Hold a node reference for outstanding queued work */
|
||||
if (!lpfc_nlp_get(ndlp))
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, iflags);
|
||||
if (!list_empty(&evtp->evt_listp)) {
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
lpfc_nlp_put(ndlp);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Incrementing the reference count until the queued work is done. */
|
||||
evtp->evt_arg1 = lpfc_nlp_get(ndlp);
|
||||
if (!evtp->evt_arg1) {
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
return;
|
||||
}
|
||||
evtp->evt_arg1 = ndlp;
|
||||
evtp->evt = LPFC_EVT_RECOVER_PORT;
|
||||
list_add_tail(&evtp->evt_listp, &phba->work_list);
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
|
|
@ -13262,9 +13262,9 @@ lpfc_sli_issue_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq,
|
|||
/* setup wake call as IOCB callback */
|
||||
pmboxq->mbox_cmpl = lpfc_sli_wake_mbox_wait;
|
||||
|
||||
/* setup context3 field to pass wait_queue pointer to wake function */
|
||||
/* setup ctx_u field to pass wait_queue pointer to wake function */
|
||||
init_completion(&mbox_done);
|
||||
pmboxq->context3 = &mbox_done;
|
||||
pmboxq->ctx_u.mbox_wait = &mbox_done;
|
||||
/* now issue the command */
|
||||
retval = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT);
|
||||
if (retval == MBX_BUSY || retval == MBX_SUCCESS) {
|
||||
|
|
@ -13272,7 +13272,7 @@ lpfc_sli_issue_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq,
|
|||
msecs_to_jiffies(timeout * 1000));
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, flag);
|
||||
pmboxq->context3 = NULL;
|
||||
pmboxq->ctx_u.mbox_wait = NULL;
|
||||
/*
|
||||
* if LPFC_MBX_WAKE flag is set the mailbox is completed
|
||||
* else do not free the resources.
|
||||
|
|
@ -13813,10 +13813,10 @@ lpfc_sli_sp_intr_handler(int irq, void *dev_id)
|
|||
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,10 +13830,8 @@ lpfc_sli_sp_intr_handler(int irq, void *dev_id)
|
|||
pmbox->un.varWords[0], 0);
|
||||
|
||||
if (!pmbox->mbxStatus) {
|
||||
mp = (struct lpfc_dmabuf *)
|
||||
(pmb->ctx_buf);
|
||||
ndlp = (struct lpfc_nodelist *)
|
||||
pmb->ctx_ndlp;
|
||||
mp = pmb->ctx_buf;
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
|
||||
/* Reg_LOGIN of dflt RPI was
|
||||
* successful. new lets get
|
||||
|
|
@ -14340,8 +14338,8 @@ lpfc_sli4_sp_handle_mbox_event(struct lpfc_hba *phba, struct lpfc_mcqe *mcqe)
|
|||
mcqe_status,
|
||||
pmbox->un.varWords[0], 0);
|
||||
if (mcqe_status == MB_CQE_STATUS_SUCCESS) {
|
||||
mp = (struct lpfc_dmabuf *)(pmb->ctx_buf);
|
||||
ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp;
|
||||
mp = pmb->ctx_buf;
|
||||
ndlp = pmb->ctx_ndlp;
|
||||
|
||||
/* Reg_LOGIN of dflt RPI was successful. Mark the
|
||||
* node as having an UNREG_LOGIN in progress to stop
|
||||
|
|
@ -19823,14 +19821,15 @@ lpfc_sli4_remove_rpis(struct lpfc_hba *phba)
|
|||
* lpfc_sli4_resume_rpi - Remove the rpi bitmask region
|
||||
* @ndlp: pointer to lpfc nodelist data structure.
|
||||
* @cmpl: completion call-back.
|
||||
* @arg: data to load as MBox 'caller buffer information'
|
||||
* @iocbq: data to load as mbox ctx_u information
|
||||
*
|
||||
* This routine is invoked to remove the memory region that
|
||||
* provided rpi via a bitmask.
|
||||
**/
|
||||
int
|
||||
lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
|
||||
void (*cmpl)(struct lpfc_hba *, LPFC_MBOXQ_t *), void *arg)
|
||||
void (*cmpl)(struct lpfc_hba *, LPFC_MBOXQ_t *),
|
||||
struct lpfc_iocbq *iocbq)
|
||||
{
|
||||
LPFC_MBOXQ_t *mboxq;
|
||||
struct lpfc_hba *phba = ndlp->phba;
|
||||
|
|
@ -19859,7 +19858,7 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
|
|||
lpfc_resume_rpi(mboxq, ndlp);
|
||||
if (cmpl) {
|
||||
mboxq->mbox_cmpl = cmpl;
|
||||
mboxq->ctx_buf = arg;
|
||||
mboxq->ctx_u.save_iocb = iocbq;
|
||||
} else
|
||||
mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
|
||||
mboxq->ctx_ndlp = ndlp;
|
||||
|
|
@ -20676,7 +20675,7 @@ lpfc_sli4_get_config_region23(struct lpfc_hba *phba, char *rgn23_data)
|
|||
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;
|
||||
|
|
@ -21035,7 +21034,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
|
|||
(mb->u.mb.mbxCommand == MBX_REG_VPI))
|
||||
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
|
||||
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
|
||||
act_mbx_ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
|
||||
act_mbx_ndlp = mb->ctx_ndlp;
|
||||
|
||||
/* This reference is local to this routine. The
|
||||
* reference is removed at routine exit.
|
||||
|
|
@ -21064,7 +21063,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
|
|||
|
||||
mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
|
||||
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
|
||||
ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
|
||||
ndlp = mb->ctx_ndlp;
|
||||
/* Unregister the RPI when mailbox complete */
|
||||
mb->mbox_flag |= LPFC_MBX_IMED_UNREG;
|
||||
restart_loop = 1;
|
||||
|
|
@ -21084,7 +21083,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
|
|||
while (!list_empty(&mbox_cmd_list)) {
|
||||
list_remove_head(&mbox_cmd_list, mb, LPFC_MBOXQ_t, list);
|
||||
if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
|
||||
ndlp = (struct lpfc_nodelist *)mb->ctx_ndlp;
|
||||
ndlp = mb->ctx_ndlp;
|
||||
mb->ctx_ndlp = NULL;
|
||||
if (ndlp) {
|
||||
spin_lock(&ndlp->lock);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************
|
||||
* This file is part of the Emulex Linux Device Driver for *
|
||||
* Fibre Channel Host Bus Adapters. *
|
||||
* Copyright (C) 2017-2023 Broadcom. All Rights Reserved. The term *
|
||||
* Copyright (C) 2017-2024 Broadcom. All Rights Reserved. The term *
|
||||
* “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. *
|
||||
* Copyright (C) 2004-2016 Emulex. All rights reserved. *
|
||||
* EMULEX and SLI are trademarks of Emulex. *
|
||||
|
|
@ -182,11 +182,29 @@ typedef struct lpfcMboxq {
|
|||
struct lpfc_mqe mqe;
|
||||
} u;
|
||||
struct lpfc_vport *vport; /* virtual port pointer */
|
||||
void *ctx_ndlp; /* an lpfc_nodelist pointer */
|
||||
void *ctx_buf; /* an lpfc_dmabuf pointer */
|
||||
void *context3; /* a generic pointer. Code must
|
||||
* accommodate the actual datatype.
|
||||
*/
|
||||
struct lpfc_nodelist *ctx_ndlp; /* caller ndlp pointer */
|
||||
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.
|
||||
*/
|
||||
|
||||
/* Pointers that are seldom used during mbox execution, but require
|
||||
* a saved context.
|
||||
*/
|
||||
union {
|
||||
unsigned long ox_rx_id; /* Used in els_rsp_rls_acc */
|
||||
struct lpfc_rdp_context *rdp; /* Used in get_rdp_info */
|
||||
struct lpfc_lcb_context *lcb; /* Used in set_beacon */
|
||||
struct completion *mbox_wait; /* Used in issue_mbox_wait */
|
||||
struct bsg_job_data *dd_data; /* Used in bsg_issue_mbox_cmpl
|
||||
* and
|
||||
* bsg_issue_mbox_ext_handle_job
|
||||
*/
|
||||
struct lpfc_iocbq *save_iocb; /* Used in defer_plogi_acc and
|
||||
* lpfc_mbx_cmpl_resume_rpi
|
||||
*/
|
||||
} ctx_u;
|
||||
|
||||
void (*mbox_cmpl) (struct lpfc_hba *, struct lpfcMboxq *);
|
||||
uint8_t mbox_flag;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************
|
||||
* This file is part of the Emulex Linux Device Driver for *
|
||||
* Fibre Channel Host Bus Adapters. *
|
||||
* Copyright (C) 2017-2023 Broadcom. All Rights Reserved. The term *
|
||||
* Copyright (C) 2017-2024 Broadcom. All Rights Reserved. The term *
|
||||
* “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. *
|
||||
* Copyright (C) 2009-2016 Emulex. All rights reserved. *
|
||||
* EMULEX and SLI are trademarks of Emulex. *
|
||||
|
|
@ -1118,8 +1118,9 @@ void lpfc_sli4_free_rpi(struct lpfc_hba *, int);
|
|||
void lpfc_sli4_remove_rpis(struct lpfc_hba *);
|
||||
void lpfc_sli4_async_event_proc(struct lpfc_hba *);
|
||||
void lpfc_sli4_fcf_redisc_event_proc(struct lpfc_hba *);
|
||||
int lpfc_sli4_resume_rpi(struct lpfc_nodelist *,
|
||||
void (*)(struct lpfc_hba *, LPFC_MBOXQ_t *), void *);
|
||||
int lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
|
||||
void (*cmpl)(struct lpfc_hba *, LPFC_MBOXQ_t *),
|
||||
struct lpfc_iocbq *iocbq);
|
||||
void lpfc_sli4_els_xri_abort_event_proc(struct lpfc_hba *phba);
|
||||
void lpfc_sli4_nvme_pci_offline_aborted(struct lpfc_hba *phba,
|
||||
struct lpfc_io_buf *lpfc_ncmd);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
* included with this package. *
|
||||
*******************************************************************/
|
||||
|
||||
#define LPFC_DRIVER_VERSION "14.4.0.0"
|
||||
#define LPFC_DRIVER_VERSION "14.4.0.1"
|
||||
#define LPFC_DRIVER_NAME "lpfc"
|
||||
|
||||
/* Used for SLI 2/3 */
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ lpfc_vport_sparm(struct lpfc_hba *phba, struct lpfc_vport *vport)
|
|||
}
|
||||
}
|
||||
|
||||
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));
|
||||
|
|
@ -674,10 +674,6 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
|
|||
lpfc_free_sysfs_attr(vport);
|
||||
lpfc_debugfs_terminate(vport);
|
||||
|
||||
/* Remove FC host to break driver binding. */
|
||||
fc_remove_host(shost);
|
||||
scsi_remove_host(shost);
|
||||
|
||||
/* Send the DA_ID and Fabric LOGO to cleanup Nameserver entries. */
|
||||
ndlp = lpfc_findnode_did(vport, Fabric_DID);
|
||||
if (!ndlp)
|
||||
|
|
@ -721,6 +717,10 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
|
|||
|
||||
skip_logo:
|
||||
|
||||
/* Remove FC host to break driver binding. */
|
||||
fc_remove_host(shost);
|
||||
scsi_remove_host(shost);
|
||||
|
||||
lpfc_cleanup(vport);
|
||||
|
||||
/* Remove scsi host now. The nodes are cleaned up. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user