Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge patch series "Update lpfc to revision 14.4.0.14"

Justin Tee <justintee8345@gmail.com> says:

Update lpfc to revision 14.4.0.14

This patch set contains updates to log messaging, trivial typecast and
pointer changes, bug fixes related to kref accounting and cleanup
handling, an update to a WQE submission bitfield, and restriction of
first burst to specific HBAs only.

The patches were cut against Martin's 6.20/scsi-queue tree.

Link: https://patch.msgid.link/20260212213008.149873-1-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

+151 -91
+2 -1
drivers/scsi/lpfc/lpfc_crtn.h
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2024 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 660 660 void lpfc_nvmet_cmd_template(void); 661 661 void lpfc_nvme_cancel_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn, 662 662 uint32_t stat, uint32_t param); 663 + void lpfc_nvme_flush_abts_list(struct lpfc_hba *phba); 663 664 void lpfc_nvmels_flush_cmd(struct lpfc_hba *phba); 664 665 extern int lpfc_enable_nvmet_cnt; 665 666 extern unsigned long long lpfc_enable_nvmet[];
+7 -6
drivers/scsi/lpfc/lpfc_ct.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 2427 2427 2428 2428 /* CGN is only for the physical port, no vports */ 2429 2429 if (lpfc_fdmi_cmd(vport, ndlp, cmd, 2430 - LPFC_FDMI_VENDOR_ATTR_mi) == 0) 2430 + LPFC_FDMI_VENDOR_ATTR_mi) == 0) { 2431 2431 phba->link_flag |= LS_CT_VEN_RPA; 2432 - lpfc_printf_log(phba, KERN_INFO, 2432 + lpfc_printf_log(phba, KERN_INFO, 2433 2433 LOG_DISCOVERY | LOG_ELS, 2434 2434 "6458 Send MI FDMI:%x Flag x%x\n", 2435 2435 phba->sli4_hba.pc_sli4_params.mi_ver, 2436 2436 phba->link_flag); 2437 + } 2437 2438 } else { 2438 2439 lpfc_printf_log(phba, KERN_INFO, 2439 2440 LOG_DISCOVERY | LOG_ELS, ··· 3215 3214 struct lpfc_iocbq *rspiocb); 3216 3215 3217 3216 if (!ndlp) 3218 - return 0; 3217 + goto fdmi_cmd_exit; 3219 3218 3220 3219 cmpl = lpfc_cmpl_ct_disc_fdmi; /* called from discovery */ 3221 3220 ··· 3321 3320 if (vport->port_type != LPFC_PHYSICAL_PORT) { 3322 3321 ndlp = lpfc_findnode_did(phba->pport, FDMI_DID); 3323 3322 if (!ndlp) 3324 - return 0; 3323 + goto fdmi_cmd_free_rspvirt; 3325 3324 } 3326 3325 fallthrough; 3327 3326 case SLI_MGMT_RPA: ··· 3397 3396 if (vport->port_type != LPFC_PHYSICAL_PORT) { 3398 3397 ndlp = lpfc_findnode_did(phba->pport, FDMI_DID); 3399 3398 if (!ndlp) 3400 - return 0; 3399 + goto fdmi_cmd_free_rspvirt; 3401 3400 } 3402 3401 fallthrough; 3403 3402 case SLI_MGMT_DPA:
+3 -2
drivers/scsi/lpfc/lpfc_disc.h
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2013 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 137 137 uint16_t nlp_maxframe; /* Max RCV frame size */ 138 138 uint8_t nlp_class_sup; /* Supported Classes */ 139 139 uint8_t nlp_retry; /* used for ELS retries */ 140 - uint8_t nlp_fcp_info; /* class info, bits 0-3 */ 140 + uint8_t nlp_fcp_info; /* class info, bits 0-2 */ 141 + #define NLP_FCP_CLASS_MASK 0x07 /* class info bitmask */ 141 142 #define NLP_FCP_2_DEVICE 0x10 /* FCP-2 device */ 142 143 u8 nlp_nvme_info; /* NVME NSLER Support */ 143 144 uint8_t vmid_support; /* destination VMID support */
+20 -10
drivers/scsi/lpfc/lpfc_els.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 1107 1107 vport->vmid_flag = 0; 1108 1108 } 1109 1109 if (sp->cmn.priority_tagging) 1110 - vport->phba->pport->vmid_flag |= (LPFC_VMID_ISSUE_QFPA | 1110 + vport->vmid_flag |= (LPFC_VMID_ISSUE_QFPA | 1111 1111 LPFC_VMID_TYPE_PRIO); 1112 1112 1113 1113 /* ··· 1303 1303 elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp, 1304 1304 ndlp->nlp_DID, ELS_CMD_FLOGI); 1305 1305 1306 - if (!elsiocb) 1306 + if (!elsiocb) { 1307 + lpfc_vport_set_state(vport, FC_VPORT_FAILED); 1308 + lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS | LOG_DISCOVERY, 1309 + "4296 Unable to prepare FLOGI iocb\n"); 1307 1310 return 1; 1311 + } 1308 1312 1309 1313 wqe = &elsiocb->wqe; 1310 1314 pcmd = (uint8_t *)elsiocb->cmd_dmabuf->virt; ··· 1398 1394 phba->sli3_options, 0, 0); 1399 1395 1400 1396 elsiocb->ndlp = lpfc_nlp_get(ndlp); 1401 - if (!elsiocb->ndlp) { 1402 - lpfc_els_free_iocb(phba, elsiocb); 1403 - return 1; 1404 - } 1397 + if (!elsiocb->ndlp) 1398 + goto err_out; 1405 1399 1406 1400 /* Avoid race with FLOGI completion and hba_flags. */ 1407 1401 set_bit(HBA_FLOGI_ISSUED, &phba->hba_flag); ··· 1409 1407 if (rc == IOCB_ERROR) { 1410 1408 clear_bit(HBA_FLOGI_ISSUED, &phba->hba_flag); 1411 1409 clear_bit(HBA_FLOGI_OUTSTANDING, &phba->hba_flag); 1412 - lpfc_els_free_iocb(phba, elsiocb); 1413 1410 lpfc_nlp_put(ndlp); 1414 - return 1; 1411 + goto err_out; 1415 1412 } 1416 1413 1417 1414 /* Clear external loopback plug detected flag */ ··· 1475 1474 } 1476 1475 1477 1476 return 0; 1477 + 1478 + err_out: 1479 + lpfc_els_free_iocb(phba, elsiocb); 1480 + lpfc_vport_set_state(vport, FC_VPORT_FAILED); 1481 + lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS | LOG_DISCOVERY, 1482 + "4297 Issue FLOGI: Cannot send IOCB\n"); 1483 + return 1; 1478 1484 } 1479 1485 1480 1486 /** ··· 2649 2641 } 2650 2642 npr->estabImagePair = 1; 2651 2643 npr->readXferRdyDis = 1; 2652 - if (vport->cfg_first_burst_size) 2644 + if (phba->sli_rev == LPFC_SLI_REV4 && 2645 + !test_bit(HBA_FCOE_MODE, &phba->hba_flag) && 2646 + vport->cfg_first_burst_size) 2653 2647 npr->writeXferRdyDis = 1; 2654 2648 2655 2649 /* For FCP support */
+16 -13
drivers/scsi/lpfc/lpfc_hbadisc.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 425 425 { 426 426 if (test_and_clear_bit(NLP_IN_RECOV_POST_DEV_LOSS, &ndlp->save_flags)) { 427 427 clear_bit(NLP_DROPPED, &ndlp->nlp_flag); 428 - lpfc_nlp_get(ndlp); 429 428 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY | LOG_NODE, 430 429 "8438 Devloss timeout reversed on DID x%x " 431 430 "refcnt %d ndlp %p flag x%lx " ··· 3173 3174 return; 3174 3175 } 3175 3176 3176 - lpfc_initial_flogi(vport); 3177 + if (!lpfc_initial_flogi(vport)) { 3178 + lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_ELS, 3179 + "2345 Can't issue initial FLOGI\n"); 3180 + lpfc_vport_set_state(vport, FC_VPORT_FAILED); 3181 + } 3177 3182 mempool_free(mboxq, phba->mbox_mem_pool); 3178 3183 return; 3179 3184 } ··· 3250 3247 return; 3251 3248 } 3252 3249 3253 - if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) 3254 - lpfc_initial_fdisc(vport); 3250 + if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) { 3251 + if (!lpfc_initial_fdisc(vport)) { 3252 + lpfc_printf_vlog(vport, KERN_WARNING, 3253 + LOG_MBOX | LOG_ELS, 3254 + "2346 Can't issue initial FDISC\n"); 3255 + lpfc_vport_set_state(vport, FC_VPORT_FAILED); 3256 + } 3257 + } 3255 3258 else { 3256 3259 lpfc_vport_set_state(vport, FC_VPORT_NO_FABRIC_SUPP); 3257 3260 lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT, ··· 6608 6599 unsigned long flags; 6609 6600 6610 6601 if (ndlp) { 6611 - lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, 6612 - "node get: did:x%x flg:x%lx refcnt:x%x", 6613 - ndlp->nlp_DID, ndlp->nlp_flag, 6614 - kref_read(&ndlp->kref)); 6615 - 6616 6602 /* The check of ndlp usage to prevent incrementing the 6617 6603 * ndlp reference count that is in the process of being 6618 6604 * released. ··· 6615 6611 spin_lock_irqsave(&ndlp->lock, flags); 6616 6612 if (!kref_get_unless_zero(&ndlp->kref)) { 6617 6613 spin_unlock_irqrestore(&ndlp->lock, flags); 6618 - lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE, 6619 - "0276 %s: ndlp:x%px refcnt:%d\n", 6620 - __func__, (void *)ndlp, kref_read(&ndlp->kref)); 6614 + pr_info("0276 %s: NDLP x%px has zero reference count. " 6615 + "Exiting\n", __func__, ndlp); 6621 6616 return NULL; 6622 6617 } 6623 6618 spin_unlock_irqrestore(&ndlp->lock, flags);
+3 -3
drivers/scsi/lpfc/lpfc_init.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 1087 1087 struct lpfc_async_xchg_ctx *ctxp, *ctxp_next; 1088 1088 struct lpfc_sli4_hdw_queue *qp; 1089 1089 LIST_HEAD(aborts); 1090 - LIST_HEAD(nvme_aborts); 1091 1090 LIST_HEAD(nvmet_aborts); 1092 1091 struct lpfc_sglq *sglq_entry = NULL; 1093 1092 int cnt, idx; ··· 1945 1946 1946 1947 lpfc_offline_prep(phba, mbx_action); 1947 1948 lpfc_sli_flush_io_rings(phba); 1949 + lpfc_nvme_flush_abts_list(phba); 1948 1950 lpfc_nvmels_flush_cmd(phba); 1949 1951 lpfc_offline(phba); 1950 1952 /* release interrupt for possible resource change */ ··· 8283 8283 phba->cfg_total_seg_cnt, phba->cfg_scsi_seg_cnt, 8284 8284 phba->cfg_nvme_seg_cnt); 8285 8285 8286 - i = min(phba->cfg_sg_dma_buf_size, SLI4_PAGE_SIZE); 8286 + i = min_t(u32, phba->cfg_sg_dma_buf_size, SLI4_PAGE_SIZE); 8287 8287 8288 8288 phba->lpfc_sg_dma_buf_pool = 8289 8289 dma_pool_create("lpfc_sg_dma_buf_pool",
+49 -1
drivers/scsi/lpfc/lpfc_nvme.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 2843 2843 2844 2844 memcpy(&pwqeIn->wcqe_cmpl, wcqep, sizeof(*wcqep)); 2845 2845 (pwqeIn->cmd_cmpl)(phba, pwqeIn, pwqeIn); 2846 + #endif 2847 + } 2848 + 2849 + /** 2850 + * lpfc_nvme_flush_abts_list - Clean up nvme commands from the abts list 2851 + * @phba: Pointer to HBA context object. 2852 + * 2853 + **/ 2854 + void 2855 + lpfc_nvme_flush_abts_list(struct lpfc_hba *phba) 2856 + { 2857 + #if (IS_ENABLED(CONFIG_NVME_FC)) 2858 + struct lpfc_io_buf *psb, *psb_next; 2859 + struct lpfc_sli4_hdw_queue *qp; 2860 + LIST_HEAD(aborts); 2861 + int i; 2862 + 2863 + /* abts_xxxx_buf_list_lock required because worker thread uses this 2864 + * list. 2865 + */ 2866 + spin_lock_irq(&phba->hbalock); 2867 + for (i = 0; i < phba->cfg_hdw_queue; i++) { 2868 + qp = &phba->sli4_hba.hdwq[i]; 2869 + 2870 + spin_lock(&qp->abts_io_buf_list_lock); 2871 + list_for_each_entry_safe(psb, psb_next, 2872 + &qp->lpfc_abts_io_buf_list, list) { 2873 + if (!(psb->cur_iocbq.cmd_flag & LPFC_IO_NVME)) 2874 + continue; 2875 + list_move(&psb->list, &aborts); 2876 + qp->abts_nvme_io_bufs--; 2877 + } 2878 + spin_unlock(&qp->abts_io_buf_list_lock); 2879 + } 2880 + spin_unlock_irq(&phba->hbalock); 2881 + 2882 + list_for_each_entry_safe(psb, psb_next, &aborts, list) { 2883 + list_del_init(&psb->list); 2884 + lpfc_printf_log(phba, KERN_INFO, LOG_NVME_ABTS, 2885 + "6195 %s: lpfc_ncmd x%px flags x%x " 2886 + "cmd_flag x%x xri x%x\n", __func__, 2887 + psb, psb->flags, 2888 + psb->cur_iocbq.cmd_flag, 2889 + psb->cur_iocbq.sli4_xritag); 2890 + psb->flags &= ~LPFC_SBUF_XBUSY; 2891 + psb->status = IOSTAT_SUCCESS; 2892 + lpfc_sli4_nvme_pci_offline_aborted(phba, psb); 2893 + } 2846 2894 #endif 2847 2895 } 2848 2896
+5 -5
drivers/scsi/lpfc/lpfc_scsi.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 4665 4665 else 4666 4666 piocbq->iocb.ulpFCP2Rcvy = 0; 4667 4667 4668 - piocbq->iocb.ulpClass = (pnode->nlp_fcp_info & 0x0f); 4668 + piocbq->iocb.ulpClass = (pnode->nlp_fcp_info & NLP_FCP_CLASS_MASK); 4669 4669 piocbq->io_buf = lpfc_cmd; 4670 4670 if (!piocbq->cmd_cmpl) 4671 4671 piocbq->cmd_cmpl = lpfc_scsi_cmd_iocb_cmpl; ··· 4777 4777 bf_set(wqe_erp, &wqe->generic.wqe_com, 1); 4778 4778 4779 4779 bf_set(wqe_class, &wqe->generic.wqe_com, 4780 - (pnode->nlp_fcp_info & 0x0f)); 4780 + (pnode->nlp_fcp_info & NLP_FCP_CLASS_MASK)); 4781 4781 4782 4782 /* Word 8 */ 4783 4783 wqe->generic.wqe_com.abort_tag = pwqeq->iotag; ··· 4877 4877 piocb->ulpCommand = CMD_FCP_ICMND64_CR; 4878 4878 piocb->ulpContext = ndlp->nlp_rpi; 4879 4879 piocb->ulpFCP2Rcvy = (ndlp->nlp_fcp_info & NLP_FCP_2_DEVICE) ? 1 : 0; 4880 - piocb->ulpClass = (ndlp->nlp_fcp_info & 0x0f); 4880 + piocb->ulpClass = (ndlp->nlp_fcp_info & NLP_FCP_CLASS_MASK); 4881 4881 piocb->ulpPU = 0; 4882 4882 piocb->un.fcpi.fcpi_parm = 0; 4883 4883 ··· 4945 4945 bf_set(wqe_erp, &wqe->fcp_icmd.wqe_com, 4946 4946 ((ndlp->nlp_fcp_info & NLP_FCP_2_DEVICE) ? 1 : 0)); 4947 4947 bf_set(wqe_class, &wqe->fcp_icmd.wqe_com, 4948 - (ndlp->nlp_fcp_info & 0x0f)); 4948 + (ndlp->nlp_fcp_info & NLP_FCP_CLASS_MASK)); 4949 4949 4950 4950 /* ulpTimeout is only one byte */ 4951 4951 if (lpfc_cmd->timeout > 0xff) {
+39 -46
drivers/scsi/lpfc/lpfc_sli.c
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 4572 4572 lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring) 4573 4573 { 4574 4574 LIST_HEAD(tx_completions); 4575 - LIST_HEAD(txcmplq_completions); 4575 + spinlock_t *plock; /* for transmit queue access */ 4576 4576 struct lpfc_iocbq *iocb, *next_iocb; 4577 4577 int offline; 4578 4578 4579 - if (pring->ringno == LPFC_ELS_RING) { 4579 + if (phba->sli_rev >= LPFC_SLI_REV4) 4580 + plock = &pring->ring_lock; 4581 + else 4582 + plock = &phba->hbalock; 4583 + 4584 + if (pring->ringno == LPFC_ELS_RING) 4580 4585 lpfc_fabric_abort_hba(phba); 4581 - } 4586 + 4582 4587 offline = pci_channel_offline(phba->pcidev); 4583 4588 4584 - /* Error everything on txq and txcmplq 4585 - * First do the txq. 4586 - */ 4587 - if (phba->sli_rev >= LPFC_SLI_REV4) { 4588 - spin_lock_irq(&pring->ring_lock); 4589 - list_splice_init(&pring->txq, &tx_completions); 4590 - pring->txq_cnt = 0; 4591 - 4592 - if (offline) { 4593 - list_splice_init(&pring->txcmplq, 4594 - &txcmplq_completions); 4595 - } else { 4596 - /* Next issue ABTS for everything on the txcmplq */ 4597 - list_for_each_entry_safe(iocb, next_iocb, 4598 - &pring->txcmplq, list) 4599 - lpfc_sli_issue_abort_iotag(phba, pring, 4600 - iocb, NULL); 4601 - } 4602 - spin_unlock_irq(&pring->ring_lock); 4603 - } else { 4604 - spin_lock_irq(&phba->hbalock); 4605 - list_splice_init(&pring->txq, &tx_completions); 4606 - pring->txq_cnt = 0; 4607 - 4608 - if (offline) { 4609 - list_splice_init(&pring->txcmplq, &txcmplq_completions); 4610 - } else { 4611 - /* Next issue ABTS for everything on the txcmplq */ 4612 - list_for_each_entry_safe(iocb, next_iocb, 4613 - &pring->txcmplq, list) 4614 - lpfc_sli_issue_abort_iotag(phba, pring, 4615 - iocb, NULL); 4616 - } 4617 - spin_unlock_irq(&phba->hbalock); 4618 - } 4589 + /* Cancel everything on txq */ 4590 + spin_lock_irq(plock); 4591 + list_splice_init(&pring->txq, &tx_completions); 4592 + pring->txq_cnt = 0; 4619 4593 4620 4594 if (offline) { 4621 - /* Cancel all the IOCBs from the completions list */ 4622 - lpfc_sli_cancel_iocbs(phba, &txcmplq_completions, 4623 - IOSTAT_LOCAL_REJECT, IOERR_SLI_ABORTED); 4595 + /* Cancel everything on txcmplq */ 4596 + list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list) 4597 + iocb->cmd_flag &= ~LPFC_IO_ON_TXCMPLQ; 4598 + list_splice_init(&pring->txcmplq, &tx_completions); 4599 + pring->txcmplq_cnt = 0; 4624 4600 } else { 4625 - /* Make sure HBA is alive */ 4626 - lpfc_issue_hb_tmo(phba); 4601 + /* Issue ABTS for everything on the txcmplq */ 4602 + list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list) 4603 + lpfc_sli_issue_abort_iotag(phba, pring, iocb, NULL); 4627 4604 } 4605 + spin_unlock_irq(plock); 4606 + 4607 + if (!offline) 4608 + lpfc_issue_hb_tmo(phba); 4609 + 4628 4610 /* Cancel all the IOCBs from the completions list */ 4629 4611 lpfc_sli_cancel_iocbs(phba, &tx_completions, IOSTAT_LOCAL_REJECT, 4630 4612 IOERR_SLI_ABORTED); ··· 14718 14736 atomic_read(&tgtp->rcv_fcp_cmd_out), 14719 14737 atomic_read(&tgtp->xmt_fcp_release)); 14720 14738 } 14739 + hrq->RQ_discard_frm++; 14721 14740 fallthrough; 14722 - 14723 14741 case FC_STATUS_INSUFF_BUF_NEED_BUF: 14742 + /* Unexpected event - bump the counter for support. */ 14724 14743 hrq->RQ_no_posted_buf++; 14725 - /* Post more buffers if possible */ 14744 + 14745 + lpfc_log_msg(phba, KERN_WARNING, 14746 + LOG_ELS | LOG_DISCOVERY | LOG_SLI, 14747 + "6423 RQE completion Status x%x, needed x%x " 14748 + "discarded x%x\n", status, 14749 + hrq->RQ_no_posted_buf - hrq->RQ_discard_frm, 14750 + hrq->RQ_discard_frm); 14751 + 14752 + /* For SLI3, post more buffers if possible. No action for SLI4. 14753 + * SLI4 is reposting immediately after processing the RQE. 14754 + */ 14726 14755 set_bit(HBA_POST_RECEIVE_BUFFER, &phba->hba_flag); 14727 14756 workposted = true; 14728 14757 break;
+4 -1
drivers/scsi/lpfc/lpfc_sli4.h
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2009-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 246 246 uint32_t q_cnt_2; 247 247 uint32_t q_cnt_3; 248 248 uint64_t q_cnt_4; 249 + uint32_t q_cnt_5; 250 + 249 251 /* defines for EQ stats */ 250 252 #define EQ_max_eqe q_cnt_1 251 253 #define EQ_no_entry q_cnt_2 ··· 270 268 #define RQ_no_buf_found q_cnt_2 271 269 #define RQ_buf_posted q_cnt_3 272 270 #define RQ_rcv_buf q_cnt_4 271 + #define RQ_discard_frm q_cnt_5 273 272 274 273 struct work_struct irqwork; 275 274 struct work_struct spwork;
+3 -3
drivers/scsi/lpfc/lpfc_version.h
··· 1 1 /******************************************************************* 2 2 * This file is part of the Emulex Linux Device Driver for * 3 3 * Fibre Channel Host Bus Adapters. * 4 - * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term * 4 + * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term * 5 5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. * 6 6 * Copyright (C) 2004-2016 Emulex. All rights reserved. * 7 7 * EMULEX and SLI are trademarks of Emulex. * ··· 20 20 * included with this package. * 21 21 *******************************************************************/ 22 22 23 - #define LPFC_DRIVER_VERSION "14.4.0.13" 23 + #define LPFC_DRIVER_VERSION "14.4.0.14" 24 24 #define LPFC_DRIVER_NAME "lpfc" 25 25 26 26 /* Used for SLI 2/3 */ ··· 32 32 33 33 #define LPFC_MODULE_DESC "Emulex LightPulse Fibre Channel SCSI driver " \ 34 34 LPFC_DRIVER_VERSION 35 - #define LPFC_COPYRIGHT "Copyright (C) 2017-2025 Broadcom. All Rights " \ 35 + #define LPFC_COPYRIGHT "Copyright (C) 2017-2026 Broadcom. All Rights " \ 36 36 "Reserved. The term \"Broadcom\" refers to Broadcom Inc. " \ 37 37 "and/or its subsidiaries."