stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, James Smart <jsmart2021@gmail.com>,
	Dick Kennedy <dick.kennedy@broadcom.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.6 035/167] scsi: lpfc: Fix erroneous cpu limit of 128 on I/O statistics
Date: Tue, 28 Apr 2020 20:23:31 +0200	[thread overview]
Message-ID: <20200428182229.595785639@linuxfoundation.org> (raw)
In-Reply-To: <20200428182225.451225420@linuxfoundation.org>

From: James Smart <jsmart2021@gmail.com>

[ Upstream commit 840eda9602d30342486e85e7e96499f565572e4b ]

The cpu io statistics were capped by a hard define limit of 128. This
effectively was a max number of CPUs, not an actual CPU count, nor actual
CPU numbers which can be even larger than both of those values. This made
stats off/misleading and on large CPU count systems, wrong.

Fix the stats so that all CPUs can have a stats struct.  Fix the looping
such that it loops by hdwq, finds CPUs that used the hdwq, and sum the
stats, then display.

Link: https://lore.kernel.org/r/20200322181304.37655-9-jsmart2021@gmail.com
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/scsi/lpfc/lpfc.h         |   9 +-
 drivers/scsi/lpfc/lpfc_debugfs.c | 204 ++++++++++++++++++-------------
 drivers/scsi/lpfc/lpfc_debugfs.h |   1 -
 drivers/scsi/lpfc/lpfc_init.c    |  28 +++++
 drivers/scsi/lpfc/lpfc_nvme.c    |  45 ++++---
 drivers/scsi/lpfc/lpfc_nvmet.c   |  55 ++++-----
 drivers/scsi/lpfc/lpfc_scsi.c    |  23 +---
 drivers/scsi/lpfc/lpfc_sli4.h    |  19 +--
 8 files changed, 215 insertions(+), 169 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 3f2cb17c4574c..828873d5b3e8a 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -482,7 +482,7 @@ struct lpfc_vport {
 	struct dentry *debug_nvmestat;
 	struct dentry *debug_scsistat;
 	struct dentry *debug_nvmektime;
-	struct dentry *debug_cpucheck;
+	struct dentry *debug_hdwqstat;
 	struct dentry *vport_debugfs_root;
 	struct lpfc_debugfs_trc *disc_trc;
 	atomic_t disc_trc_cnt;
@@ -1176,12 +1176,11 @@ struct lpfc_hba {
 	uint16_t sfp_warning;
 
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	uint16_t cpucheck_on;
+	uint16_t hdwqstat_on;
 #define LPFC_CHECK_OFF		0
 #define LPFC_CHECK_NVME_IO	1
-#define LPFC_CHECK_NVMET_RCV	2
-#define LPFC_CHECK_NVMET_IO	4
-#define LPFC_CHECK_SCSI_IO	8
+#define LPFC_CHECK_NVMET_IO	2
+#define LPFC_CHECK_SCSI_IO	4
 	uint16_t ktime_on;
 	uint64_t ktime_data_samples;
 	uint64_t ktime_status_samples;
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index 819335b16c2e4..1b8be1006cbef 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -1603,42 +1603,50 @@ out:
 }
 
 /**
- * lpfc_debugfs_cpucheck_data - Dump target node list to a buffer
+ * lpfc_debugfs_hdwqstat_data - Dump I/O stats to a buffer
  * @vport: The vport to gather target node info from.
  * @buf: The buffer to dump log into.
  * @size: The maximum amount of data to process.
  *
  * Description:
- * This routine dumps the NVME statistics associated with @vport
+ * This routine dumps the NVME + SCSI statistics associated with @vport
  *
  * Return Value:
  * This routine returns the amount of bytes that were dumped into @buf and will
  * not exceed @size.
  **/
 static int
-lpfc_debugfs_cpucheck_data(struct lpfc_vport *vport, char *buf, int size)
+lpfc_debugfs_hdwqstat_data(struct lpfc_vport *vport, char *buf, int size)
 {
 	struct lpfc_hba   *phba = vport->phba;
 	struct lpfc_sli4_hdw_queue *qp;
-	int i, j, max_cnt;
-	int len = 0;
+	struct lpfc_hdwq_stat *c_stat;
+	int i, j, len;
 	uint32_t tot_xmt;
 	uint32_t tot_rcv;
 	uint32_t tot_cmpl;
+	char tmp[LPFC_MAX_SCSI_INFO_TMP_LEN] = {0};
 
-	len += scnprintf(buf + len, PAGE_SIZE - len,
-			"CPUcheck %s ",
-			(phba->cpucheck_on & LPFC_CHECK_NVME_IO ?
-				"Enabled" : "Disabled"));
-	if (phba->nvmet_support) {
-		len += scnprintf(buf + len, PAGE_SIZE - len,
-				"%s\n",
-				(phba->cpucheck_on & LPFC_CHECK_NVMET_RCV ?
-					"Rcv Enabled\n" : "Rcv Disabled\n"));
-	} else {
-		len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
-	}
-	max_cnt = size - LPFC_DEBUG_OUT_LINE_SZ;
+	scnprintf(tmp, sizeof(tmp), "HDWQ Stats:\n\n");
+	if (strlcat(buf, tmp, size) >= size)
+		goto buffer_done;
+
+	scnprintf(tmp, sizeof(tmp), "(NVME Accounting: %s) ",
+		  (phba->hdwqstat_on &
+		  (LPFC_CHECK_NVME_IO | LPFC_CHECK_NVMET_IO) ?
+		  "Enabled" : "Disabled"));
+	if (strlcat(buf, tmp, size) >= size)
+		goto buffer_done;
+
+	scnprintf(tmp, sizeof(tmp), "(SCSI Accounting: %s) ",
+		  (phba->hdwqstat_on & LPFC_CHECK_SCSI_IO ?
+		  "Enabled" : "Disabled"));
+	if (strlcat(buf, tmp, size) >= size)
+		goto buffer_done;
+
+	scnprintf(tmp, sizeof(tmp), "\n\n");
+	if (strlcat(buf, tmp, size) >= size)
+		goto buffer_done;
 
 	for (i = 0; i < phba->cfg_hdw_queue; i++) {
 		qp = &phba->sli4_hba.hdwq[i];
@@ -1646,46 +1654,76 @@ lpfc_debugfs_cpucheck_data(struct lpfc_vport *vport, char *buf, int size)
 		tot_rcv = 0;
 		tot_xmt = 0;
 		tot_cmpl = 0;
-		for (j = 0; j < LPFC_CHECK_CPU_CNT; j++) {
-			tot_xmt += qp->cpucheck_xmt_io[j];
-			tot_cmpl += qp->cpucheck_cmpl_io[j];
-			if (phba->nvmet_support)
-				tot_rcv += qp->cpucheck_rcv_io[j];
-		}
 
-		/* Only display Hardware Qs with something */
-		if (!tot_xmt && !tot_cmpl && !tot_rcv)
-			continue;
+		for_each_present_cpu(j) {
+			c_stat = per_cpu_ptr(phba->sli4_hba.c_stat, j);
+
+			/* Only display for this HDWQ */
+			if (i != c_stat->hdwq_no)
+				continue;
 
-		len += scnprintf(buf + len, PAGE_SIZE - len,
-				"HDWQ %03d: ", i);
-		for (j = 0; j < LPFC_CHECK_CPU_CNT; j++) {
 			/* Only display non-zero counters */
-			if (!qp->cpucheck_xmt_io[j] &&
-			    !qp->cpucheck_cmpl_io[j] &&
-			    !qp->cpucheck_rcv_io[j])
+			if (!c_stat->xmt_io && !c_stat->cmpl_io &&
+			    !c_stat->rcv_io)
 				continue;
+
+			if (!tot_xmt && !tot_cmpl && !tot_rcv) {
+				/* Print HDWQ string only the first time */
+				scnprintf(tmp, sizeof(tmp), "[HDWQ %d]:\t", i);
+				if (strlcat(buf, tmp, size) >= size)
+					goto buffer_done;
+			}
+
+			tot_xmt += c_stat->xmt_io;
+			tot_cmpl += c_stat->cmpl_io;
+			if (phba->nvmet_support)
+				tot_rcv += c_stat->rcv_io;
+
+			scnprintf(tmp, sizeof(tmp), "| [CPU %d]: ", j);
+			if (strlcat(buf, tmp, size) >= size)
+				goto buffer_done;
+
 			if (phba->nvmet_support) {
-				len += scnprintf(buf + len, PAGE_SIZE - len,
-						"CPU %03d: %x/%x/%x ", j,
-						qp->cpucheck_rcv_io[j],
-						qp->cpucheck_xmt_io[j],
-						qp->cpucheck_cmpl_io[j]);
+				scnprintf(tmp, sizeof(tmp),
+					  "XMT 0x%x CMPL 0x%x RCV 0x%x |",
+					  c_stat->xmt_io, c_stat->cmpl_io,
+					  c_stat->rcv_io);
+				if (strlcat(buf, tmp, size) >= size)
+					goto buffer_done;
 			} else {
-				len += scnprintf(buf + len, PAGE_SIZE - len,
-						"CPU %03d: %x/%x ", j,
-						qp->cpucheck_xmt_io[j],
-						qp->cpucheck_cmpl_io[j]);
+				scnprintf(tmp, sizeof(tmp),
+					  "XMT 0x%x CMPL 0x%x |",
+					  c_stat->xmt_io, c_stat->cmpl_io);
+				if (strlcat(buf, tmp, size) >= size)
+					goto buffer_done;
 			}
 		}
-		len += scnprintf(buf + len, PAGE_SIZE - len,
-				"Total: %x\n", tot_xmt);
-		if (len >= max_cnt) {
-			len += scnprintf(buf + len, PAGE_SIZE - len,
-					"Truncated ...\n");
-			return len;
+
+		/* Check if nothing to display */
+		if (!tot_xmt && !tot_cmpl && !tot_rcv)
+			continue;
+
+		scnprintf(tmp, sizeof(tmp), "\t->\t[HDWQ Total: ");
+		if (strlcat(buf, tmp, size) >= size)
+			goto buffer_done;
+
+		if (phba->nvmet_support) {
+			scnprintf(tmp, sizeof(tmp),
+				  "XMT 0x%x CMPL 0x%x RCV 0x%x]\n\n",
+				  tot_xmt, tot_cmpl, tot_rcv);
+			if (strlcat(buf, tmp, size) >= size)
+				goto buffer_done;
+		} else {
+			scnprintf(tmp, sizeof(tmp),
+				  "XMT 0x%x CMPL 0x%x]\n\n",
+				  tot_xmt, tot_cmpl);
+			if (strlcat(buf, tmp, size) >= size)
+				goto buffer_done;
 		}
 	}
+
+buffer_done:
+	len = strnlen(buf, size);
 	return len;
 }
 
@@ -2921,7 +2959,7 @@ lpfc_debugfs_nvmeio_trc_write(struct file *file, const char __user *buf,
 }
 
 static int
-lpfc_debugfs_cpucheck_open(struct inode *inode, struct file *file)
+lpfc_debugfs_hdwqstat_open(struct inode *inode, struct file *file)
 {
 	struct lpfc_vport *vport = inode->i_private;
 	struct lpfc_debug *debug;
@@ -2932,14 +2970,14 @@ lpfc_debugfs_cpucheck_open(struct inode *inode, struct file *file)
 		goto out;
 
 	 /* Round to page boundary */
-	debug->buffer = kmalloc(LPFC_CPUCHECK_SIZE, GFP_KERNEL);
+	debug->buffer = kcalloc(1, LPFC_SCSISTAT_SIZE, GFP_KERNEL);
 	if (!debug->buffer) {
 		kfree(debug);
 		goto out;
 	}
 
-	debug->len = lpfc_debugfs_cpucheck_data(vport, debug->buffer,
-		LPFC_CPUCHECK_SIZE);
+	debug->len = lpfc_debugfs_hdwqstat_data(vport, debug->buffer,
+						LPFC_SCSISTAT_SIZE);
 
 	debug->i_private = inode->i_private;
 	file->private_data = debug;
@@ -2950,16 +2988,16 @@ out:
 }
 
 static ssize_t
-lpfc_debugfs_cpucheck_write(struct file *file, const char __user *buf,
+lpfc_debugfs_hdwqstat_write(struct file *file, const char __user *buf,
 			    size_t nbytes, loff_t *ppos)
 {
 	struct lpfc_debug *debug = file->private_data;
 	struct lpfc_vport *vport = (struct lpfc_vport *)debug->i_private;
 	struct lpfc_hba   *phba = vport->phba;
-	struct lpfc_sli4_hdw_queue *qp;
+	struct lpfc_hdwq_stat *c_stat;
 	char mybuf[64];
 	char *pbuf;
-	int i, j;
+	int i;
 
 	if (nbytes > 64)
 		nbytes = 64;
@@ -2972,41 +3010,39 @@ lpfc_debugfs_cpucheck_write(struct file *file, const char __user *buf,
 
 	if ((strncmp(pbuf, "on", sizeof("on") - 1) == 0)) {
 		if (phba->nvmet_support)
-			phba->cpucheck_on |= LPFC_CHECK_NVMET_IO;
+			phba->hdwqstat_on |= LPFC_CHECK_NVMET_IO;
 		else
-			phba->cpucheck_on |= (LPFC_CHECK_NVME_IO |
+			phba->hdwqstat_on |= (LPFC_CHECK_NVME_IO |
 				LPFC_CHECK_SCSI_IO);
 		return strlen(pbuf);
 	} else if ((strncmp(pbuf, "nvme_on", sizeof("nvme_on") - 1) == 0)) {
 		if (phba->nvmet_support)
-			phba->cpucheck_on |= LPFC_CHECK_NVMET_IO;
+			phba->hdwqstat_on |= LPFC_CHECK_NVMET_IO;
 		else
-			phba->cpucheck_on |= LPFC_CHECK_NVME_IO;
+			phba->hdwqstat_on |= LPFC_CHECK_NVME_IO;
 		return strlen(pbuf);
 	} else if ((strncmp(pbuf, "scsi_on", sizeof("scsi_on") - 1) == 0)) {
-		phba->cpucheck_on |= LPFC_CHECK_SCSI_IO;
+		if (!phba->nvmet_support)
+			phba->hdwqstat_on |= LPFC_CHECK_SCSI_IO;
 		return strlen(pbuf);
-	} else if ((strncmp(pbuf, "rcv",
-		   sizeof("rcv") - 1) == 0)) {
-		if (phba->nvmet_support)
-			phba->cpucheck_on |= LPFC_CHECK_NVMET_RCV;
-		else
-			return -EINVAL;
+	} else if ((strncmp(pbuf, "nvme_off", sizeof("nvme_off") - 1) == 0)) {
+		phba->hdwqstat_on &= ~(LPFC_CHECK_NVME_IO |
+				       LPFC_CHECK_NVMET_IO);
+		return strlen(pbuf);
+	} else if ((strncmp(pbuf, "scsi_off", sizeof("scsi_off") - 1) == 0)) {
+		phba->hdwqstat_on &= ~LPFC_CHECK_SCSI_IO;
 		return strlen(pbuf);
 	} else if ((strncmp(pbuf, "off",
 		   sizeof("off") - 1) == 0)) {
-		phba->cpucheck_on = LPFC_CHECK_OFF;
+		phba->hdwqstat_on = LPFC_CHECK_OFF;
 		return strlen(pbuf);
 	} else if ((strncmp(pbuf, "zero",
 		   sizeof("zero") - 1) == 0)) {
-		for (i = 0; i < phba->cfg_hdw_queue; i++) {
-			qp = &phba->sli4_hba.hdwq[i];
-
-			for (j = 0; j < LPFC_CHECK_CPU_CNT; j++) {
-				qp->cpucheck_rcv_io[j] = 0;
-				qp->cpucheck_xmt_io[j] = 0;
-				qp->cpucheck_cmpl_io[j] = 0;
-			}
+		for_each_present_cpu(i) {
+			c_stat = per_cpu_ptr(phba->sli4_hba.c_stat, i);
+			c_stat->xmt_io = 0;
+			c_stat->cmpl_io = 0;
+			c_stat->rcv_io = 0;
 		}
 		return strlen(pbuf);
 	}
@@ -5451,13 +5487,13 @@ static const struct file_operations lpfc_debugfs_op_nvmeio_trc = {
 	.release =      lpfc_debugfs_release,
 };
 
-#undef lpfc_debugfs_op_cpucheck
-static const struct file_operations lpfc_debugfs_op_cpucheck = {
+#undef lpfc_debugfs_op_hdwqstat
+static const struct file_operations lpfc_debugfs_op_hdwqstat = {
 	.owner =        THIS_MODULE,
-	.open =         lpfc_debugfs_cpucheck_open,
+	.open =         lpfc_debugfs_hdwqstat_open,
 	.llseek =       lpfc_debugfs_lseek,
 	.read =         lpfc_debugfs_read,
-	.write =	lpfc_debugfs_cpucheck_write,
+	.write =	lpfc_debugfs_hdwqstat_write,
 	.release =      lpfc_debugfs_release,
 };
 
@@ -6081,11 +6117,11 @@ nvmeio_off:
 				    vport->vport_debugfs_root,
 				    vport, &lpfc_debugfs_op_nvmektime);
 
-	snprintf(name, sizeof(name), "cpucheck");
-	vport->debug_cpucheck =
+	snprintf(name, sizeof(name), "hdwqstat");
+	vport->debug_hdwqstat =
 		debugfs_create_file(name, 0644,
 				    vport->vport_debugfs_root,
-				    vport, &lpfc_debugfs_op_cpucheck);
+				    vport, &lpfc_debugfs_op_hdwqstat);
 
 	/*
 	 * The following section is for additional directories/files for the
@@ -6219,8 +6255,8 @@ lpfc_debugfs_terminate(struct lpfc_vport *vport)
 	debugfs_remove(vport->debug_nvmektime); /* nvmektime */
 	vport->debug_nvmektime = NULL;
 
-	debugfs_remove(vport->debug_cpucheck); /* cpucheck */
-	vport->debug_cpucheck = NULL;
+	debugfs_remove(vport->debug_hdwqstat); /* hdwqstat */
+	vport->debug_hdwqstat = NULL;
 
 	if (vport->vport_debugfs_root) {
 		debugfs_remove(vport->vport_debugfs_root); /* vportX */
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.h b/drivers/scsi/lpfc/lpfc_debugfs.h
index 20f2537af511c..6643b9bfd4f39 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.h
+++ b/drivers/scsi/lpfc/lpfc_debugfs.h
@@ -47,7 +47,6 @@
 /* nvmestat output buffer size */
 #define LPFC_NVMESTAT_SIZE 8192
 #define LPFC_NVMEKTIME_SIZE 8192
-#define LPFC_CPUCHECK_SIZE 8192
 #define LPFC_NVMEIO_TRC_SIZE 8192
 
 /* scsistat output buffer size */
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 5a605773dd0a0..d2bbcf8cae4c3 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -6935,6 +6935,17 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
 		rc = -ENOMEM;
 		goto out_free_hba_cpu_map;
 	}
+
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	phba->sli4_hba.c_stat = alloc_percpu(struct lpfc_hdwq_stat);
+	if (!phba->sli4_hba.c_stat) {
+		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+				"3332 Failed allocating per cpu hdwq stats\n");
+		rc = -ENOMEM;
+		goto out_free_hba_eq_info;
+	}
+#endif
+
 	/*
 	 * Enable sr-iov virtual functions if supported and configured
 	 * through the module parameter.
@@ -6954,6 +6965,10 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
 
 	return 0;
 
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+out_free_hba_eq_info:
+	free_percpu(phba->sli4_hba.eq_info);
+#endif
 out_free_hba_cpu_map:
 	kfree(phba->sli4_hba.cpu_map);
 out_free_hba_eq_hdl:
@@ -6992,6 +7007,9 @@ lpfc_sli4_driver_resource_unset(struct lpfc_hba *phba)
 	struct lpfc_fcf_conn_entry *conn_entry, *next_conn_entry;
 
 	free_percpu(phba->sli4_hba.eq_info);
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	free_percpu(phba->sli4_hba.c_stat);
+#endif
 
 	/* Free memory allocated for msi-x interrupt vector to CPU mapping */
 	kfree(phba->sli4_hba.cpu_map);
@@ -10831,6 +10849,9 @@ lpfc_cpu_affinity_check(struct lpfc_hba *phba, int vectors)
 #ifdef CONFIG_X86
 	struct cpuinfo_x86 *cpuinfo;
 #endif
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	struct lpfc_hdwq_stat *c_stat;
+#endif
 
 	max_phys_id = 0;
 	min_phys_id = LPFC_VECTOR_MAP_EMPTY;
@@ -11082,10 +11103,17 @@ found_any:
 	idx = 0;
 	for_each_possible_cpu(cpu) {
 		cpup = &phba->sli4_hba.cpu_map[cpu];
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+		c_stat = per_cpu_ptr(phba->sli4_hba.c_stat, cpu);
+		c_stat->hdwq_no = cpup->hdwq;
+#endif
 		if (cpup->hdwq != LPFC_VECTOR_MAP_EMPTY)
 			continue;
 
 		cpup->hdwq = idx++ % phba->cfg_hdw_queue;
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+		c_stat->hdwq_no = cpup->hdwq;
+#endif
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"3340 Set Affinity: not present "
 				"CPU %d hdwq %d\n",
diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index cb40217d5cc14..8403d7ceafe4c 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -1012,6 +1012,9 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
 	uint32_t code, status, idx;
 	uint16_t cid, sqhd, data;
 	uint32_t *ptr;
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	int cpu;
+#endif
 
 	/* Sanity check on return of outstanding command */
 	if (!lpfc_ncmd) {
@@ -1184,19 +1187,15 @@ out_err:
 		phba->ktime_last_cmd = lpfc_ncmd->ts_data_nvme;
 		lpfc_nvme_ktime(phba, lpfc_ncmd);
 	}
-	if (unlikely(phba->cpucheck_on & LPFC_CHECK_NVME_IO)) {
-		uint32_t cpu;
-		idx = lpfc_ncmd->cur_iocbq.hba_wqidx;
+	if (unlikely(phba->hdwqstat_on & LPFC_CHECK_NVME_IO)) {
 		cpu = raw_smp_processor_id();
-		if (cpu < LPFC_CHECK_CPU_CNT) {
-			if (lpfc_ncmd->cpu != cpu)
-				lpfc_printf_vlog(vport,
-						 KERN_INFO, LOG_NVME_IOERR,
-						 "6701 CPU Check cmpl: "
-						 "cpu %d expect %d\n",
-						 cpu, lpfc_ncmd->cpu);
-			phba->sli4_hba.hdwq[idx].cpucheck_cmpl_io[cpu]++;
-		}
+		this_cpu_inc(phba->sli4_hba.c_stat->cmpl_io);
+		if (lpfc_ncmd->cpu != cpu)
+			lpfc_printf_vlog(vport,
+					 KERN_INFO, LOG_NVME_IOERR,
+					 "6701 CPU Check cmpl: "
+					 "cpu %d expect %d\n",
+					 cpu, lpfc_ncmd->cpu);
 	}
 #endif
 
@@ -1745,19 +1744,17 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
 	if (lpfc_ncmd->ts_cmd_start)
 		lpfc_ncmd->ts_cmd_wqput = ktime_get_ns();
 
-	if (phba->cpucheck_on & LPFC_CHECK_NVME_IO) {
+	if (phba->hdwqstat_on & LPFC_CHECK_NVME_IO) {
 		cpu = raw_smp_processor_id();
-		if (cpu < LPFC_CHECK_CPU_CNT) {
-			lpfc_ncmd->cpu = cpu;
-			if (idx != cpu)
-				lpfc_printf_vlog(vport,
-						 KERN_INFO, LOG_NVME_IOERR,
-						"6702 CPU Check cmd: "
-						"cpu %d wq %d\n",
-						lpfc_ncmd->cpu,
-						lpfc_queue_info->index);
-			phba->sli4_hba.hdwq[idx].cpucheck_xmt_io[cpu]++;
-		}
+		this_cpu_inc(phba->sli4_hba.c_stat->xmt_io);
+		lpfc_ncmd->cpu = cpu;
+		if (idx != cpu)
+			lpfc_printf_vlog(vport,
+					 KERN_INFO, LOG_NVME_IOERR,
+					"6702 CPU Check cmd: "
+					"cpu %d wq %d\n",
+					lpfc_ncmd->cpu,
+					lpfc_queue_info->index);
 	}
 #endif
 	return 0;
diff --git a/drivers/scsi/lpfc/lpfc_nvmet.c b/drivers/scsi/lpfc/lpfc_nvmet.c
index 9dc9afe1c2550..f3760a4827d82 100644
--- a/drivers/scsi/lpfc/lpfc_nvmet.c
+++ b/drivers/scsi/lpfc/lpfc_nvmet.c
@@ -707,7 +707,7 @@ lpfc_nvmet_xmt_fcp_op_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
 	struct lpfc_nvmet_rcv_ctx *ctxp;
 	uint32_t status, result, op, start_clean, logerr;
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	uint32_t id;
+	int id;
 #endif
 
 	ctxp = cmdwqe->context2;
@@ -814,16 +814,14 @@ lpfc_nvmet_xmt_fcp_op_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
 		rsp->done(rsp);
 	}
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	if (phba->cpucheck_on & LPFC_CHECK_NVMET_IO) {
+	if (phba->hdwqstat_on & LPFC_CHECK_NVMET_IO) {
 		id = raw_smp_processor_id();
-		if (id < LPFC_CHECK_CPU_CNT) {
-			if (ctxp->cpu != id)
-				lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
-						"6704 CPU Check cmdcmpl: "
-						"cpu %d expect %d\n",
-						id, ctxp->cpu);
-			phba->sli4_hba.hdwq[rsp->hwqid].cpucheck_cmpl_io[id]++;
-		}
+		this_cpu_inc(phba->sli4_hba.c_stat->cmpl_io);
+		if (ctxp->cpu != id)
+			lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
+					"6704 CPU Check cmdcmpl: "
+					"cpu %d expect %d\n",
+					id, ctxp->cpu);
 	}
 #endif
 }
@@ -931,6 +929,9 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
 	struct lpfc_sli_ring *pring;
 	unsigned long iflags;
 	int rc;
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	int id;
+#endif
 
 	if (phba->pport->load_flag & FC_UNLOADING) {
 		rc = -ENODEV;
@@ -954,16 +955,14 @@ lpfc_nvmet_xmt_fcp_op(struct nvmet_fc_target_port *tgtport,
 	if (!ctxp->hdwq)
 		ctxp->hdwq = &phba->sli4_hba.hdwq[rsp->hwqid];
 
-	if (phba->cpucheck_on & LPFC_CHECK_NVMET_IO) {
-		int id = raw_smp_processor_id();
-		if (id < LPFC_CHECK_CPU_CNT) {
-			if (rsp->hwqid != id)
-				lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
-						"6705 CPU Check OP: "
-						"cpu %d expect %d\n",
-						id, rsp->hwqid);
-			phba->sli4_hba.hdwq[rsp->hwqid].cpucheck_xmt_io[id]++;
-		}
+	if (phba->hdwqstat_on & LPFC_CHECK_NVMET_IO) {
+		id = raw_smp_processor_id();
+		this_cpu_inc(phba->sli4_hba.c_stat->xmt_io);
+		if (rsp->hwqid != id)
+			lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
+					"6705 CPU Check OP: "
+					"cpu %d expect %d\n",
+					id, rsp->hwqid);
 		ctxp->cpu = id; /* Setup cpu for cmpl check */
 	}
 #endif
@@ -2270,15 +2269,13 @@ lpfc_nvmet_unsol_fcp_buffer(struct lpfc_hba *phba,
 	size = nvmebuf->bytes_recv;
 
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	if (phba->cpucheck_on & LPFC_CHECK_NVMET_RCV) {
-		if (current_cpu < LPFC_CHECK_CPU_CNT) {
-			if (idx != current_cpu)
-				lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
-						"6703 CPU Check rcv: "
-						"cpu %d expect %d\n",
-						current_cpu, idx);
-			phba->sli4_hba.hdwq[idx].cpucheck_rcv_io[current_cpu]++;
-		}
+	if (phba->hdwqstat_on & LPFC_CHECK_NVMET_IO) {
+		this_cpu_inc(phba->sli4_hba.c_stat->rcv_io);
+		if (idx != current_cpu)
+			lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
+					"6703 CPU Check rcv: "
+					"cpu %d expect %d\n",
+					current_cpu, idx);
 	}
 #endif
 
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index 96ac4a154c580..ed8bcbd043c45 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -3805,9 +3805,6 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
 	struct Scsi_Host *shost;
 	int idx;
 	uint32_t logit = LOG_FCP;
-#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	int cpu;
-#endif
 
 	/* Guard against abort handler being called at same time */
 	spin_lock(&lpfc_cmd->buf_lock);
@@ -3826,11 +3823,8 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
 		phba->sli4_hba.hdwq[idx].scsi_cstat.io_cmpls++;
 
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	if (unlikely(phba->cpucheck_on & LPFC_CHECK_SCSI_IO)) {
-		cpu = raw_smp_processor_id();
-		if (cpu < LPFC_CHECK_CPU_CNT && phba->sli4_hba.hdwq)
-			phba->sli4_hba.hdwq[idx].cpucheck_cmpl_io[cpu]++;
-	}
+	if (unlikely(phba->hdwqstat_on & LPFC_CHECK_SCSI_IO))
+		this_cpu_inc(phba->sli4_hba.c_stat->cmpl_io);
 #endif
 	shost = cmd->device->host;
 
@@ -4503,9 +4497,6 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 	struct lpfc_io_buf *lpfc_cmd;
 	struct fc_rport *rport = starget_to_rport(scsi_target(cmnd->device));
 	int err, idx;
-#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	int cpu;
-#endif
 
 	rdata = lpfc_rport_data_from_scsi_device(cmnd->device);
 
@@ -4626,14 +4617,8 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 	lpfc_scsi_prep_cmnd(vport, lpfc_cmd, ndlp);
 
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-	if (unlikely(phba->cpucheck_on & LPFC_CHECK_SCSI_IO)) {
-		cpu = raw_smp_processor_id();
-		if (cpu < LPFC_CHECK_CPU_CNT) {
-			struct lpfc_sli4_hdw_queue *hdwq =
-					&phba->sli4_hba.hdwq[lpfc_cmd->hdwq_no];
-			hdwq->cpucheck_xmt_io[cpu]++;
-		}
-	}
+	if (unlikely(phba->hdwqstat_on & LPFC_CHECK_SCSI_IO))
+		this_cpu_inc(phba->sli4_hba.c_stat->xmt_io);
 #endif
 	err = lpfc_sli_issue_iocb(phba, LPFC_FCP_RING,
 				  &lpfc_cmd->cur_iocbq, SLI_IOCB_RET_IOCB);
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index d963ca8713833..8da7429e385a5 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -697,13 +697,6 @@ struct lpfc_sli4_hdw_queue {
 	struct lpfc_lock_stat lock_conflict;
 #endif
 
-#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
-#define LPFC_CHECK_CPU_CNT    128
-	uint32_t cpucheck_rcv_io[LPFC_CHECK_CPU_CNT];
-	uint32_t cpucheck_xmt_io[LPFC_CHECK_CPU_CNT];
-	uint32_t cpucheck_cmpl_io[LPFC_CHECK_CPU_CNT];
-#endif
-
 	/* Per HDWQ pool resources */
 	struct list_head sgl_list;
 	struct list_head cmd_rsp_buf_list;
@@ -740,6 +733,15 @@ struct lpfc_sli4_hdw_queue {
 #define lpfc_qp_spin_lock(lock, qp, lstat) spin_lock(lock)
 #endif
 
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+struct lpfc_hdwq_stat {
+	u32 hdwq_no;
+	u32 rcv_io;
+	u32 xmt_io;
+	u32 cmpl_io;
+};
+#endif
+
 struct lpfc_sli4_hba {
 	void __iomem *conf_regs_memmap_p; /* Kernel memory mapped address for
 					   * config space registers
@@ -921,6 +923,9 @@ struct lpfc_sli4_hba {
 	struct cpumask numa_mask;
 	uint16_t curr_disp_cpu;
 	struct lpfc_eq_intr_info __percpu *eq_info;
+#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
+	struct lpfc_hdwq_stat __percpu *c_stat;
+#endif
 	uint32_t conf_trunk;
 #define lpfc_conf_trunk_port0_WORD	conf_trunk
 #define lpfc_conf_trunk_port0_SHIFT	0
-- 
2.20.1




  parent reply	other threads:[~2020-04-28 19:00 UTC|newest]

Thread overview: 176+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-28 18:22 [PATCH 5.6 000/167] 5.6.8-rc1 review Greg Kroah-Hartman
2020-04-28 18:22 ` [PATCH 5.6 001/167] mm: check that mm is still valid in madvise() Greg Kroah-Hartman
2020-04-28 18:22 ` [PATCH 5.6 002/167] tools/testing/nvdimm: Fix compilation failure without CONFIG_DEV_DAX_PMEM_COMPAT Greg Kroah-Hartman
2020-04-28 18:22 ` [PATCH 5.6 003/167] watchdog: reset last_hw_keepalive time at start Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 004/167] scsi: lpfc: Fix kasan slab-out-of-bounds error in lpfc_unreg_login Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 005/167] xfs: correctly acount for reclaimable slabs Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 006/167] scsi: lpfc: Fix crash after handling a pci error Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 007/167] scsi: lpfc: Fix crash in target side cable pulls hitting WAIT_FOR_UNREG Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 008/167] scsi: libfc: If PRLI rejected, move rport to PLOGI state Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 009/167] ceph: return ceph_mdsc_do_request() errors from __get_parent() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 010/167] ceph: dont skip updating wanted caps when cap is stale Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 011/167] pwm: imx27: Fix clock handling in pwm_imx27_apply() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 012/167] pwm: rcar: Fix late Runtime PM enablement Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 013/167] nvme-tcp: fix possible crash in write_zeroes processing Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 014/167] ASoC: qcom: q6asm-dai: Add SNDRV_PCM_INFO_BATCH flag Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 015/167] scsi: iscsi: Report unbind session event when the target has been removed Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 016/167] tools/test/nvdimm: Fix out of tree build Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 017/167] ASoC: Intel: atom: Take the drv->lock mutex before calling sst_send_slot_map() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 018/167] nvme: fix deadlock caused by ANA update wrong locking Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 019/167] drm/amd/display: Update stream adjust in dc_stream_adjust_vmin_vmax Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 020/167] dma-direct: fix data truncation in dma_direct_get_required_mask() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 021/167] kernel/gcov/fs.c: gcov_seq_next() should increase position index Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 022/167] selftests: kmod: fix handling test numbers above 9 Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 023/167] ipc/util.c: sysvipc_find_ipc() should increase position index Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 024/167] kconfig: qconf: Fix a few alignment issues Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 025/167] lib/raid6/test: fix build on distros whose /bin/sh is not bash Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 026/167] block: fix busy device checking in blk_drop_partitions Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 027/167] s390/cio: generate delayed uevent for vfio-ccw subchannels Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 028/167] s390/cio: avoid duplicated ADD uevents Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 029/167] loop: Better discard support for block devices Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 030/167] Revert "powerpc/64: irq_work avoid interrupt when called with hardware irqs enabled" Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 031/167] powerpc/pseries: Fix MCE handling on pseries Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 032/167] nvme: fix compat address handling in several ioctls Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 033/167] pwm: renesas-tpu: Fix late Runtime PM enablement Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 034/167] pwm: bcm2835: Dynamically allocate base Greg Kroah-Hartman
2020-04-28 18:23 ` Greg Kroah-Hartman [this message]
2020-04-28 18:23 ` [PATCH 5.6 036/167] scsi: lpfc: Fix lockdep error - register non-static key Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 037/167] perf/core: Disable page faults when getting phys address Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 038/167] drm/amd/display: Calculate scaling ratios on every medium/full update Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 039/167] ASoC: Intel: bytcr_rt5640: Add quirk for MPMAN MPWIN895CL tablet Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 040/167] ALSA: usb-audio: Add Pioneer DJ DJM-250MK2 quirk Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 041/167] xhci: Ensure link state is U3 after setting USB_SS_PORT_LS_U3 Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 042/167] xhci: Wait until link state trainsits to U0 after setting USB_SS_PORT_LS_U0 Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 043/167] xhci: Finetune host initiated USB3 rootport link suspend and resume Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 044/167] block: fix busy device checking in blk_drop_partitions again Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 045/167] cxgb4: fix adapter crash due to wrong MC size Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 046/167] cxgb4: fix large delays in PTP synchronization Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 047/167] ipv4: Update fib_select_default to handle nexthop objects Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 048/167] ipv6: fix restrict IPV6_ADDRFORM operation Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 049/167] macsec: avoid to set wrong mtu Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 050/167] macvlan: fix null dereference in macvlan_device_event() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 051/167] mlxsw: Fix some IS_ERR() vs NULL bugs Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 052/167] net: bcmgenet: correct per TX/RX ring statistics Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 053/167] net/mlx4_en: avoid indirect call in TX completion Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 054/167] net: netrom: Fix potential nr_neigh refcnt leak in nr_add_node Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 055/167] net: openvswitch: ovs_ct_exit to be done under ovs_lock Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 056/167] net: stmmac: dwmac-meson8b: Add missing boundary to RGMII TX clock array Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 057/167] net/x25: Fix x25_neigh refcnt leak when receiving frame Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 058/167] sched: etf: do not assume all sockets are full blown Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 059/167] selftests: Fix suppress test in fib_tests.sh Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 060/167] tcp: cache line align MAX_TCP_HEADER Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 061/167] team: fix hang in team_mode_get() Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 062/167] tipc: Fix potential tipc_aead refcnt leak in tipc_crypto_rcv Greg Kroah-Hartman
2020-04-28 18:23 ` [PATCH 5.6 063/167] tipc: Fix potential tipc_node refcnt leak in tipc_rcv Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 064/167] vrf: Fix IPv6 with qdisc and xfrm Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 065/167] net: dsa: b53: Lookup VID in ARL searches when VLAN is enabled Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 066/167] net: dsa: b53: Fix valid setting for MDB entries Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 067/167] net: dsa: b53: Fix ARL register definitions Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 068/167] net: dsa: b53: Rework ARL bin logic Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 069/167] net: dsa: b53: b53_arl_rw_op() needs to select IVL or SVL Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 070/167] vxlan: use the correct nlattr array in NL_SET_ERR_MSG_ATTR Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 071/167] geneve: " Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 072/167] xfrm: Always set XFRM_TRANSFORMED in xfrm{4,6}_output_finish Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 073/167] vrf: Check skb for XFRM_TRANSFORMED flag Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 074/167] net: ethernet: ixp4xx: Add error handling in ixp4xx_eth_probe() Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 075/167] KEYS: Avoid false positive ENOMEM error on key read Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 076/167] ALSA: hda: Remove ASUS ROG Zenith from the blacklist Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 078/167] ALSA: usb-audio: Add connector notifier delegation Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 079/167] mac80211: populate debugfs only after cfg80211 init Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 080/167] libbpf: Only check mode flags in get_xdp_id Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 081/167] iio: core: remove extra semi-colon from devm_iio_device_register() macro Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 082/167] iio: imu: st_lsm6dsx: flush hw FIFO before resetting the device Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 083/167] iio: st_sensors: rely on odr mask to know if odr can be set Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 084/167] iio: adc: stm32-adc: fix sleep in atomic context Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 085/167] iio: adc: ti-ads8344: properly byte swap value Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 086/167] iio: xilinx-xadc: Fix ADC-B powerdown Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 087/167] iio: xilinx-xadc: Fix clearing interrupt when enabling trigger Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 088/167] iio: xilinx-xadc: Fix sequencer configuration for aux channels in simultaneous mode Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 089/167] iio: xilinx-xadc: Make sure not exceed maximum samplerate Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 090/167] USB: sisusbvga: Change port variable from signed to unsigned Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 091/167] USB: Add USB_QUIRK_DELAY_CTRL_MSG and USB_QUIRK_DELAY_INIT for Corsair K70 RGB RAPIDFIRE Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 092/167] USB: early: Handle AMDs spec-compliant identifiers, too Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 093/167] USB: core: Fix free-while-in-use bug in the USB S-Glibrary Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 094/167] USB: hub: Fix handling of connect changes during sleep Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 095/167] USB: hub: Revert commit bd0e6c9614b9 ("usb: hub: try old enumeration scheme first for high speed devices") Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 096/167] tty: serial: owl: add "much needed" clk_prepare_enable() Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 097/167] vmalloc: fix remap_vmalloc_range() bounds checks Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 098/167] staging: gasket: Fix incongruency in handling of sysfs entries creation Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 099/167] coredump: fix null pointer dereference on coredump Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 100/167] mm/hugetlb: fix a addressing exception caused by huge_pte_offset Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 101/167] mm/ksm: fix NULL pointer dereference when KSM zero page is enabled Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 102/167] tools/vm: fix cross-compile build Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 103/167] ALSA: usx2y: Fix potential NULL dereference Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 104/167] ALSA: hda/realtek - Fix unexpected init_amp override Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 105/167] ALSA: hda/realtek - Add new codec supported for ALC245 Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 106/167] ALSA: hda/hdmi: Add module option to disable audio component binding Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 107/167] ALSA: usb-audio: Fix usb audio refcnt leak when getting spdif Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 108/167] ALSA: usb-audio: Filter out unsupported sample rates on Focusrite devices Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 109/167] tpm/tpm_tis: Free IRQ if probing fails Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 110/167] tpm: fix wrong return value in tpm_pcr_extend Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 111/167] tpm: ibmvtpm: retry on H_CLOSED in tpm_ibmvtpm_send() Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 112/167] KVM: s390: Return last valid slot if approx index is out-of-bounds Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 113/167] KVM: Check validity of resolved slot when searching memslots Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 114/167] KVM: VMX: Enable machine check support for 32bit targets Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 115/167] tty: hvc: fix buffer overflow during hvc_alloc() Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 116/167] tty: rocket, avoid OOB access Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 117/167] usb-storage: Add unusual_devs entry for JMicron JMS566 Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 118/167] signal: Avoid corrupting si_pid and si_uid in do_notify_parent Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 119/167] drm/dp_mst: Zero assigned PBN when releasing VCPI slots Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 120/167] audit: check the length of userspace generated audit records Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 121/167] ASoC: dapm: fixup dapm kcontrol widget Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 122/167] SUNRPC: Fix backchannel RPC soft lockups Greg Kroah-Hartman
2020-04-28 18:24 ` [PATCH 5.6 123/167] iwlwifi: pcie: actually release queue memory in TVQM Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 124/167] iwlwifi: mvm: beacon statistics shouldnt go backwards Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 125/167] iwlwifi: pcie: indicate correct RB size to device Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 126/167] iwlwifi: mvm: limit maximum queue appropriately Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 127/167] iwlwifi: mvm: Do not declare support for ACK Enabled Aggregation Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 128/167] iwlwifi: mvm: fix inactive TID removal return value usage Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 129/167] iwlwifi: fix WGDS check when WRDS is disabled Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 130/167] cifs: fix uninitialised lease_key in open_shroot() Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 131/167] ARM: imx: provide v7_cpu_resume() only on ARM_CPU_SUSPEND=y Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 132/167] powerpc/8xx: Fix STRICT_KERNEL_RWX startup test failure Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 133/167] powerpc/setup_64: Set cache-line-size based on cache-block-size Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 134/167] staging: comedi: dt2815: fix writing hi byte of analog output Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 135/167] staging: comedi: Fix comedi_device refcnt leak in comedi_open Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 136/167] vt: dont hardcode the mem allocation upper bound Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 137/167] vt: dont use kmalloc() for the unicode screen buffer Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 138/167] staging: vt6656: Dont set RCR_MULTICAST or RCR_BROADCAST by default Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 139/167] staging: vt6656: Fix calling conditions of vnt_set_bss_mode Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 140/167] staging: vt6656: Fix drivers TBTT timing counter Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 141/167] staging: vt6656: Fix pairwise key entry save Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 142/167] staging: vt6656: Power save stop wake_up_count wrap around Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 143/167] mei: me: fix irq number stored in hw struct Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 144/167] cdc-acm: close race betrween suspend() and acm_softint Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 145/167] cdc-acm: introduce a cool down Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 146/167] UAS: no use logging any details in case of ENODEV Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 147/167] UAS: fix deadlock in error handling and PM flushing work Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 148/167] fpga: dfl: pci: fix return value of cci_pci_sriov_configure Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 149/167] usb: dwc3: gadget: Fix request completion check Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 150/167] usb: f_fs: Clear OS Extended descriptor counts to zero in ffs_data_reset() Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 151/167] usb: typec: tcpm: Ignore CC and vbus changes in PORT_RESET change Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 152/167] usb: typec: altmode: Fix typec_altmode_get_partner sometimes returning an invalid pointer Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 153/167] xhci: Fix handling halted endpoint even if endpoint ring appears empty Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 154/167] xhci: prevent bus suspend if a roothub port detected a over-current condition Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 155/167] xhci: Dont clear hub TT buffer on ep0 protocol stall Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 156/167] serial: sh-sci: Make sure status register SCxSR is read in correct sequence Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 157/167] Revert "serial: uartps: Fix uartps_major handling" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 158/167] Revert "serial: uartps: Use the same dynamic major number for all ports" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 159/167] Revert "serial: uartps: Fix error path when alloc failed" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 160/167] Revert "serial: uartps: Do not allow use aliases >= MAX_UART_INSTANCES" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 161/167] Revert "serial: uartps: Change uart ID port allocation" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 162/167] Revert "serial: uartps: Move Port ID to device data structure" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 163/167] Revert "serial: uartps: Register own uart console and driver structures" Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 164/167] drm/i915/gt: Update PMINTRMSK holding fw Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 165/167] powerpc/kuap: PPC_KUAP_DEBUG should depend on PPC_KUAP Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 166/167] powerpc/mm: Fix CONFIG_PPC_KUAP_DEBUG on PPC32 Greg Kroah-Hartman
2020-04-28 18:25 ` [PATCH 5.6 167/167] s390/mm: fix page table upgrade vs 2ndary address mode accesses Greg Kroah-Hartman
2020-04-29  0:44 ` [PATCH 5.6 000/167] 5.6.8-rc1 review shuah
2020-04-29  6:36   ` Greg Kroah-Hartman
2020-04-29  9:08 ` Naresh Kamboju
2020-04-29 14:27   ` Naresh Kamboju
2020-04-30  6:41   ` Greg Kroah-Hartman
2020-04-29 10:17 ` Jon Hunter
2020-04-30  6:40   ` Greg Kroah-Hartman
2020-04-29 14:05 ` Guenter Roeck
2020-04-30  6:40   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200428182229.595785639@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dick.kennedy@broadcom.com \
    --cc=jsmart2021@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).