mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [net PATCH v3 0/3] RVU Debugfs fix updates.
@ 2021-10-27 17:32 Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 1/3] octeontx2-af: Check whether ipolicers exists Rakesh Babu Saladi
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Rakesh Babu Saladi @ 2021-10-27 17:32 UTC (permalink / raw)
  To: davem, kuba, netdev, linux-kernel
  Cc: sgoutham, gakula, sbhatta, hkelam, Rakesh Babu Saladi

The following patch series consists of the patch fixes done over
rvu_debugfs.c and rvu_nix.c files.

Patch 1: Check and return if ipolicers do not exists.
Patch 2: Fix rsrc_alloc to print all enabled PF/VF entries with list of LFs
allocated for each functional block.
Patch 3: Fix possible null pointer dereference.

Changes made from v2 to v3:
Included a new patch in this series which fixes null pointer dereference.

Rakesh Babu (1):
  octeontx2-af: Display all enabled PF VF rsrc_alloc entries.

Rakesh Babu Saladi (1):
  octeontx2-af: Fix possible null pointer dereference.

Subbaraya Sundeep (1):
  octeontx2-af: Check whether ipolicers exists

 .../marvell/octeontx2/af/rvu_debugfs.c        | 148 ++++++++++++++----
 .../ethernet/marvell/octeontx2/af/rvu_nix.c   |   3 +
 2 files changed, 118 insertions(+), 33 deletions(-)

--
2.17.1

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [net PATCH v3 1/3] octeontx2-af: Check whether ipolicers exists
  2021-10-27 17:32 [net PATCH v3 0/3] RVU Debugfs fix updates Rakesh Babu Saladi
@ 2021-10-27 17:32 ` Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 2/3] octeontx2-af: Display all enabled PF VF rsrc_alloc entries Rakesh Babu Saladi
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Rakesh Babu Saladi @ 2021-10-27 17:32 UTC (permalink / raw)
  To: davem, kuba, netdev, linux-kernel
  Cc: sgoutham, gakula, sbhatta, hkelam, Rakesh Babu

From: Subbaraya Sundeep <sbhatta@marvell.com>

While displaying ingress policers information in
debugfs check whether ingress policers exist in
the hardware or not because some platforms(CN9XXX)
do not have this feature.

Fixes: e7d8971763f3 ("octeontx2-af: cn10k: Debugfs support for bandwidth")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Rakesh Babu <rsaladi2@marvell.com>
Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
---
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
index 9338765da048..6c589ca9b577 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
@@ -1719,6 +1719,10 @@ static int rvu_dbg_nix_band_prof_ctx_display(struct seq_file *m, void *unused)
 	u16 pcifunc;
 	char *str;
 
+	/* Ingress policers do not exist on all platforms */
+	if (!nix_hw->ipolicer)
+		return 0;
+
 	for (layer = 0; layer < BAND_PROF_NUM_LAYERS; layer++) {
 		if (layer == BAND_PROF_INVAL_LAYER)
 			continue;
@@ -1768,6 +1772,10 @@ static int rvu_dbg_nix_band_prof_rsrc_display(struct seq_file *m, void *unused)
 	int layer;
 	char *str;
 
+	/* Ingress policers do not exist on all platforms */
+	if (!nix_hw->ipolicer)
+		return 0;
+
 	seq_puts(m, "\nBandwidth profile resource free count\n");
 	seq_puts(m, "=====================================\n");
 	for (layer = 0; layer < BAND_PROF_NUM_LAYERS; layer++) {
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [net PATCH v3 2/3] octeontx2-af: Display all enabled PF VF rsrc_alloc entries.
  2021-10-27 17:32 [net PATCH v3 0/3] RVU Debugfs fix updates Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 1/3] octeontx2-af: Check whether ipolicers exists Rakesh Babu Saladi
@ 2021-10-27 17:32 ` Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 3/3] octeontx2-af: Fix possible null pointer dereference Rakesh Babu Saladi
  2021-10-28 14:00 ` [net PATCH v3 0/3] RVU Debugfs fix updates patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Rakesh Babu Saladi @ 2021-10-27 17:32 UTC (permalink / raw)
  To: davem, kuba, netdev, linux-kernel
  Cc: sgoutham, gakula, sbhatta, hkelam, Rakesh Babu,
	Nithin Dabilpuram, Sunil Kovvuri Goutham

From: Rakesh Babu <rsaladi2@marvell.com>

Currently, we are using a fixed buffer size of length 2048 to display
rsrc_alloc output. As a result a maximum of 2048 characters of
rsrc_alloc output is displayed, which may lead sometimes to display only
partial output. This patch fixes this dependency on max limit of buffer
size and displays all PF VF entries.

Each column of the debugfs entry "rsrc_alloc" uses a fixed width of 12
characters to print the list of LFs of each block for a PF/VF. If the
length of list of LFs of a block exceeds this fixed width then the list
gets truncated and displays only a part of the list. This patch fixes
this by using the maximum possible length of list of LFs among all
blocks of all PFs and VFs entries as the width size.

Fixes: f7884097141b ("octeontx2-af: Formatting debugfs entry rsrc_alloc.")
Fixes: 23205e6d06d4 ("octeontx2-af: Dump current resource provisioning status")
Signed-off-by: Rakesh Babu <rsaladi2@marvell.com>
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: Sunil Kovvuri Goutham <Sunil.Goutham@cavium.com>
---
 .../marvell/octeontx2/af/rvu_debugfs.c        | 138 ++++++++++++++----
 1 file changed, 106 insertions(+), 32 deletions(-)

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
index 6c589ca9b577..c7e12464c243 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
@@ -226,18 +226,85 @@ static const struct file_operations rvu_dbg_##name##_fops = { \
 
 static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf);
 
+static void get_lf_str_list(struct rvu_block block, int pcifunc,
+			    char *lfs)
+{
+	int lf = 0, seq = 0, len = 0, prev_lf = block.lf.max;
+
+	for_each_set_bit(lf, block.lf.bmap, block.lf.max) {
+		if (lf >= block.lf.max)
+			break;
+
+		if (block.fn_map[lf] != pcifunc)
+			continue;
+
+		if (lf == prev_lf + 1) {
+			prev_lf = lf;
+			seq = 1;
+			continue;
+		}
+
+		if (seq)
+			len += sprintf(lfs + len, "-%d,%d", prev_lf, lf);
+		else
+			len += (len ? sprintf(lfs + len, ",%d", lf) :
+				      sprintf(lfs + len, "%d", lf));
+
+		prev_lf = lf;
+		seq = 0;
+	}
+
+	if (seq)
+		len += sprintf(lfs + len, "-%d", prev_lf);
+
+	lfs[len] = '\0';
+}
+
+static int get_max_column_width(struct rvu *rvu)
+{
+	int index, pf, vf, lf_str_size = 12, buf_size = 256;
+	struct rvu_block block;
+	u16 pcifunc;
+	char *buf;
+
+	buf = kzalloc(buf_size, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
+		for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
+			pcifunc = pf << 10 | vf;
+			if (!pcifunc)
+				continue;
+
+			for (index = 0; index < BLK_COUNT; index++) {
+				block = rvu->hw->block[index];
+				if (!strlen(block.name))
+					continue;
+
+				get_lf_str_list(block, pcifunc, buf);
+				if (lf_str_size <= strlen(buf))
+					lf_str_size = strlen(buf) + 1;
+			}
+		}
+	}
+
+	kfree(buf);
+	return lf_str_size;
+}
+
 /* Dumps current provisioning status of all RVU block LFs */
 static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
 					  char __user *buffer,
 					  size_t count, loff_t *ppos)
 {
-	int index, off = 0, flag = 0, go_back = 0, len = 0;
+	int index, off = 0, flag = 0, len = 0, i = 0;
 	struct rvu *rvu = filp->private_data;
-	int lf, pf, vf, pcifunc;
+	int bytes_not_copied = 0;
 	struct rvu_block block;
-	int bytes_not_copied;
-	int lf_str_size = 12;
+	int pf, vf, pcifunc;
 	int buf_size = 2048;
+	int lf_str_size;
 	char *lfs;
 	char *buf;
 
@@ -249,6 +316,9 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
 	if (!buf)
 		return -ENOSPC;
 
+	/* Get the maximum width of a column */
+	lf_str_size = get_max_column_width(rvu);
+
 	lfs = kzalloc(lf_str_size, GFP_KERNEL);
 	if (!lfs) {
 		kfree(buf);
@@ -262,65 +332,69 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
 					 "%-*s", lf_str_size,
 					 rvu->hw->block[index].name);
 		}
+
 	off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
+	bytes_not_copied = copy_to_user(buffer + (i * off), buf, off);
+	if (bytes_not_copied)
+		goto out;
+
+	i++;
+	*ppos += off;
 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
 		for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
+			off = 0;
+			flag = 0;
 			pcifunc = pf << 10 | vf;
 			if (!pcifunc)
 				continue;
 
 			if (vf) {
 				sprintf(lfs, "PF%d:VF%d", pf, vf - 1);
-				go_back = scnprintf(&buf[off],
-						    buf_size - 1 - off,
-						    "%-*s", lf_str_size, lfs);
+				off = scnprintf(&buf[off],
+						buf_size - 1 - off,
+						"%-*s", lf_str_size, lfs);
 			} else {
 				sprintf(lfs, "PF%d", pf);
-				go_back = scnprintf(&buf[off],
-						    buf_size - 1 - off,
-						    "%-*s", lf_str_size, lfs);
+				off = scnprintf(&buf[off],
+						buf_size - 1 - off,
+						"%-*s", lf_str_size, lfs);
 			}
 
-			off += go_back;
-			for (index = 0; index < BLKTYPE_MAX; index++) {
+			for (index = 0; index < BLK_COUNT; index++) {
 				block = rvu->hw->block[index];
 				if (!strlen(block.name))
 					continue;
 				len = 0;
 				lfs[len] = '\0';
-				for (lf = 0; lf < block.lf.max; lf++) {
-					if (block.fn_map[lf] != pcifunc)
-						continue;
+				get_lf_str_list(block, pcifunc, lfs);
+				if (strlen(lfs))
 					flag = 1;
-					len += sprintf(&lfs[len], "%d,", lf);
-				}
 
-				if (flag)
-					len--;
-				lfs[len] = '\0';
 				off += scnprintf(&buf[off], buf_size - 1 - off,
 						 "%-*s", lf_str_size, lfs);
-				if (!strlen(lfs))
-					go_back += lf_str_size;
 			}
-			if (!flag)
-				off -= go_back;
-			else
-				flag = 0;
-			off--;
-			off +=	scnprintf(&buf[off], buf_size - 1 - off, "\n");
+			if (flag) {
+				off +=	scnprintf(&buf[off],
+						  buf_size - 1 - off, "\n");
+				bytes_not_copied = copy_to_user(buffer +
+								(i * off),
+								buf, off);
+				if (bytes_not_copied)
+					goto out;
+
+				i++;
+				*ppos += off;
+			}
 		}
 	}
 
-	bytes_not_copied = copy_to_user(buffer, buf, off);
+out:
 	kfree(lfs);
 	kfree(buf);
-
 	if (bytes_not_copied)
 		return -EFAULT;
 
-	*ppos = off;
-	return off;
+	return *ppos;
 }
 
 RVU_DEBUG_FOPS(rsrc_status, rsrc_attach_status, NULL);
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [net PATCH v3 3/3] octeontx2-af: Fix possible null pointer dereference.
  2021-10-27 17:32 [net PATCH v3 0/3] RVU Debugfs fix updates Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 1/3] octeontx2-af: Check whether ipolicers exists Rakesh Babu Saladi
  2021-10-27 17:32 ` [net PATCH v3 2/3] octeontx2-af: Display all enabled PF VF rsrc_alloc entries Rakesh Babu Saladi
@ 2021-10-27 17:32 ` Rakesh Babu Saladi
  2021-10-28 14:00 ` [net PATCH v3 0/3] RVU Debugfs fix updates patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: Rakesh Babu Saladi @ 2021-10-27 17:32 UTC (permalink / raw)
  To: davem, kuba, netdev, linux-kernel
  Cc: sgoutham, gakula, sbhatta, hkelam, Rakesh Babu Saladi

This patch fixes possible null pointer dereference in files
"rvu_debugfs.c" and "rvu_nix.c"

Fixes: 8756828a8148 ("octeontx2-af: Add NPA aura and pool contexts to debugfs")
Fixes: 9a946def264d ("octeontx2-af: Modify nix_vtag_cfg mailbox to support TX VTAG entries")
Signed-off-by: Rakesh Babu Saladi <rsaladi2@marvell.com>
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
---
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 2 +-
 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c     | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
index c7e12464c243..49d822a98ada 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
@@ -578,7 +578,7 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
 	if (cmd_buf)
 		ret = -EINVAL;
 
-	if (!strncmp(subtoken, "help", 4) || ret < 0) {
+	if (ret < 0 || !strncmp(subtoken, "help", 4)) {
 		dev_info(rvu->dev, "Use echo <%s-lf > qsize\n", blk_string);
 		goto qsize_write_done;
 	}
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
index 9ef4e942e31e..6970540dc470 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c
@@ -2507,6 +2507,9 @@ static void nix_free_tx_vtag_entries(struct rvu *rvu, u16 pcifunc)
 		return;
 
 	nix_hw = get_nix_hw(rvu->hw, blkaddr);
+	if (!nix_hw)
+		return;
+
 	vlan = &nix_hw->txvlan;
 
 	mutex_lock(&vlan->rsrc_lock);
-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [net PATCH v3 0/3] RVU Debugfs fix updates.
  2021-10-27 17:32 [net PATCH v3 0/3] RVU Debugfs fix updates Rakesh Babu Saladi
                   ` (2 preceding siblings ...)
  2021-10-27 17:32 ` [net PATCH v3 3/3] octeontx2-af: Fix possible null pointer dereference Rakesh Babu Saladi
@ 2021-10-28 14:00 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-10-28 14:00 UTC (permalink / raw)
  To: Rakesh Babu Saladi
  Cc: davem, kuba, netdev, linux-kernel, sgoutham, gakula, sbhatta, hkelam

Hello:

This series was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Wed, 27 Oct 2021 23:02:31 +0530 you wrote:
> The following patch series consists of the patch fixes done over
> rvu_debugfs.c and rvu_nix.c files.
> 
> Patch 1: Check and return if ipolicers do not exists.
> Patch 2: Fix rsrc_alloc to print all enabled PF/VF entries with list of LFs
> allocated for each functional block.
> Patch 3: Fix possible null pointer dereference.
> 
> [...]

Here is the summary with links:
  - [net,v3,1/3] octeontx2-af: Check whether ipolicers exists
    https://git.kernel.org/netdev/net/c/cc45b96e2de7
  - [net,v3,2/3] octeontx2-af: Display all enabled PF VF rsrc_alloc entries.
    https://git.kernel.org/netdev/net/c/e77bcdd1f639
  - [net,v3,3/3] octeontx2-af: Fix possible null pointer dereference.
    https://git.kernel.org/netdev/net/c/c2d4c543f74c

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-28 14:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-27 17:32 [net PATCH v3 0/3] RVU Debugfs fix updates Rakesh Babu Saladi
2021-10-27 17:32 ` [net PATCH v3 1/3] octeontx2-af: Check whether ipolicers exists Rakesh Babu Saladi
2021-10-27 17:32 ` [net PATCH v3 2/3] octeontx2-af: Display all enabled PF VF rsrc_alloc entries Rakesh Babu Saladi
2021-10-27 17:32 ` [net PATCH v3 3/3] octeontx2-af: Fix possible null pointer dereference Rakesh Babu Saladi
2021-10-28 14:00 ` [net PATCH v3 0/3] RVU Debugfs fix updates patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®