FAILED: patch "[PATCH] scsi: lpfc: Rework MIB Rx Monitor debug info logic" failed to apply to 5.15-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
bd269188ea94 ("scsi: lpfc: Rework MIB Rx Monitor debug info logic") a6269f837045 ("scsi: lpfc: Adjust CMF total bytes and rxmonitor") d5ac69b332d8 ("scsi: lpfc: Adjust bytes received vales during cmf timer interval")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bd269188ea94e40ab002cad7b0df8f12b8f0de54 Mon Sep 17 00:00:00 2001
From: James Smart <[email protected]>
Date: Thu, 18 Aug 2022 18:17:32 -0700
Subject: [PATCH] scsi: lpfc: Rework MIB Rx Monitor debug info logic
The kernel test robot reported the following sparse warning:
arch/arm64/include/asm/cmpxchg.h:88:1: sparse: sparse: cast truncates
bits from constant value (369 becomes 69)
On arm64, atomic_xchg only works on 8-bit byte fields. Thus, the macro usage of LPFC_RXMONITOR_TABLE_IN_USE can be unintentionally truncated leading to all logic involving the LPFC_RXMONITOR_TABLE_IN_USE macro to not work properly.
Replace the Rx Table atomic_t indexing logic with a new lpfc_rx_info_monitor structure that holds a circular ring buffer. For locking semantics, a spinlock_t is used.
drivers/scsi/lpfc/lpfc.h +9 -5
@@ -1570,10 +1570,7 @@ struct lpfc_hba {u32 cgn_acqe_cnt;/* RX monitor handling for CMF */ -struct rxtable_entry *rxtable;/* RX_monitor information */ -atomic_t rxtable_idx_head; -#define LPFC_RXMONITOR_TABLE_IN_USE (LPFC_MAX_RXMONITOR_ENTRY + 73) -atomic_t rxtable_idx_tail; +struct lpfc_rx_info_monitor *rx_monitor;atomic_t rx_max_read_cnt;/* Maximum read bytes */ uint64_t rx_block_cnt;
@@ -1622,7 +1619,7 @@ struct lpfc_hba {#define LPFC_MAX_RXMONITOR_ENTRY 800#define LPFC_MAX_RXMONITOR_DUMP 32 -struct rxtable_entry { +struct rx_info_entry {uint64_t cmf_bytes;/* Total no of read bytes for CMF_SYNC_WQE */ uint64_t total_bytes;/* Total no of read bytes requested */ uint64_t rcv_bytes;/* Total no of read bytes completed */
@@ -1637,6 +1634,13 @@ struct rxtable_entry {uint32_t timer_interval; }; +struct lpfc_rx_info_monitor { +struct rx_info_entry *ring;/* info organized in a circular buffer */ +u32 head_idx, tail_idx;/* index to head/tail of ring */ +spinlock_t lock;/* spinlock for ring */ +u32 entries;/* storing number entries/size of ring */ +}; +static inline struct Scsi_Host *lpfc_shost_from_vport (struct lpfc_vport *vport) {
drivers/scsi/lpfc/lpfc_crtn.h +8 -0
@@ -92,6 +92,14 @@ void lpfc_cgn_dump_rxmonitor(struct lpfc_hba *phba);void lpfc_cgn_update_stat (struct lpfc_hba *phba,uint32_t dtag);void lpfc_unblock_requests (struct lpfc_hba *phba);void lpfc_block_requests (struct lpfc_hba *phba); +int lpfc_rx_monitor_create_ring (struct lpfc_rx_info_monitor *rx_monitor, +u32 entries); +void lpfc_rx_monitor_destroy_ring (struct lpfc_rx_info_monitor *rx_monitor); +void lpfc_rx_monitor_record (struct lpfc_rx_info_monitor *rx_monitor, +struct rx_info_entry *entry); +u32 lpfc_rx_monitor_report (struct lpfc_hba *phba, +struct lpfc_rx_info_monitor *rx_monitor,char *buf, +u32 buf_len,u32 max_read_entries);void lpfc_mbx_cmpl_local_config_link (struct lpfc_hba *,LPFC_MBOXQ_t *);void lpfc_mbx_cmpl_reg_login (struct lpfc_hba *,LPFC_MBOXQ_t *);
drivers/scsi/lpfc/lpfc_debugfs.c +10 -49
74 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_debugfs.h +1 -1
@@ -282,7 +282,7 @@ struct lpfc_idiag {void *ptr_private; }; -#define MAX_DEBUGFS_RX_TABLE_SIZE (128 * LPFC_MAX_RXMONITOR_ENTRY) +#define MAX_DEBUGFS_RX_INFO_SIZE (128 * LPFC_MAX_RXMONITOR_ENTRY)struct lpfc_rx_monitor_debug {char *i_private;char *buffer;
drivers/scsi/lpfc/lpfc_init.c +23 -60
110 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_mem.c +6 -3
@@ -344,9 +344,12 @@ lpfc_mem_free_all(struct lpfc_hba *phba) phba->cgn_i =NULL ; } -/* Free RX table */ -kfree (phba->rxtable); - phba->rxtable =NULL ; +/* Free RX Monitor */ +if (phba->rx_monitor) { +lpfc_rx_monitor_destroy_ring (phba->rx_monitor); +kfree (phba->rx_monitor); + phba->rx_monitor =NULL ; + }/* Free the iocb lookup array */ kfree (psli->iocbq_lookup);
drivers/scsi/lpfc/lpfc_sli.c +183 -7
208 lines not on this page · raw message