netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Saeed Mahameed <saeed@kernel.org>
To: "David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Eric Dumazet <edumazet@google.com>
Cc: Saeed Mahameed <saeedm@nvidia.com>,
	netdev@vger.kernel.org, Tariq Toukan <tariqt@nvidia.com>,
	Eli Cohen <elic@nvidia.com>,
	Ben Hutchings <bhutchings@solarflare.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Decotigny <decot@googlers.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH net-next 02/14] lib: cpu_rmap: Use allocator for rmap entries
Date: Sun, 19 Feb 2023 22:14:30 -0800	[thread overview]
Message-ID: <20230220061442.403092-3-saeed@kernel.org> (raw)
In-Reply-To: <20230220061442.403092-1-saeed@kernel.org>

From: Eli Cohen <elic@nvidia.com>

Use a proper allocator for rmap entries using a naive for loop. The
allocator relies on whether an entry is NULL to be considered free.
Remove the used field of rmap which is not needed.

Also, avoid crashing the kernel if an entry is not available.

CC: Ben Hutchings <bhutchings@solarflare.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: David Decotigny <decot@googlers.com>
CC: Eric Dumazet <edumazet@google.com>
CC: linux-kernel@vger.kernel.org
Signed-off-by: Eli Cohen <elic@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
---
 include/linux/cpu_rmap.h |  3 +--
 lib/cpu_rmap.c           | 23 +++++++++++++++++++----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/include/linux/cpu_rmap.h b/include/linux/cpu_rmap.h
index be8aea04d023..0ec745e6cd36 100644
--- a/include/linux/cpu_rmap.h
+++ b/include/linux/cpu_rmap.h
@@ -16,14 +16,13 @@
  * struct cpu_rmap - CPU affinity reverse-map
  * @refcount: kref for object
  * @size: Number of objects to be reverse-mapped
- * @used: Number of objects added
  * @obj: Pointer to array of object pointers
  * @near: For each CPU, the index and distance to the nearest object,
  *      based on affinity masks
  */
 struct cpu_rmap {
 	struct kref	refcount;
-	u16		size, used;
+	u16		size;
 	void		**obj;
 	struct {
 		u16	index;
diff --git a/lib/cpu_rmap.c b/lib/cpu_rmap.c
index e77f12bb3c77..e95d018e01c2 100644
--- a/lib/cpu_rmap.c
+++ b/lib/cpu_rmap.c
@@ -128,6 +128,17 @@ debug_print_rmap(const struct cpu_rmap *rmap, const char *prefix)
 }
 #endif
 
+static int get_free_index(struct cpu_rmap *rmap)
+{
+	int i;
+
+	for (i = 0; i < rmap->size; i++)
+		if (!rmap->obj[i])
+			return i;
+
+	return -1;
+}
+
 /**
  * cpu_rmap_add - add object to a rmap
  * @rmap: CPU rmap allocated with alloc_cpu_rmap()
@@ -137,10 +148,11 @@ debug_print_rmap(const struct cpu_rmap *rmap, const char *prefix)
  */
 int cpu_rmap_add(struct cpu_rmap *rmap, void *obj)
 {
-	u16 index;
+	u16 index = get_free_index(rmap);
+
+	if (index == -1)
+		return index;
 
-	BUG_ON(rmap->used >= rmap->size);
-	index = rmap->used++;
 	rmap->obj[index] = obj;
 	return index;
 }
@@ -230,7 +242,7 @@ void free_irq_cpu_rmap(struct cpu_rmap *rmap)
 	if (!rmap)
 		return;
 
-	for (index = 0; index < rmap->used; index++) {
+	for (index = 0; index < rmap->size; index++) {
 		glue = rmap->obj[index];
 		if (glue)
 			irq_set_affinity_notifier(glue->notify.irq, NULL);
@@ -296,6 +308,9 @@ int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq)
 	glue->rmap = rmap;
 	cpu_rmap_get(rmap);
 	glue->index = cpu_rmap_add(rmap, glue);
+	if (glue->index == -1)
+		return -ENOSPC;
+
 	rc = irq_set_affinity_notifier(irq, &glue->notify);
 	if (rc) {
 		cpu_rmap_put(glue->rmap);
-- 
2.39.1


  parent reply	other threads:[~2023-02-20  6:17 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-20  6:14 [PATCH net-next 00/14] mlx5 dynamic msix Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 01/14] lib: cpu_rmap: Avoid use after free on rmap->obj array entries Saeed Mahameed
2023-02-20  6:14 ` Saeed Mahameed [this message]
2023-02-20  6:14 ` [PATCH net-next 03/14] lib: cpu_rmap: Add irq_cpu_rmap_remove to complement irq_cpu_rmap_add Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 04/14] net/mlx5e: Coding style fix, add empty line Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 05/14] net/mlx5: Fix wrong comment Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 06/14] net/mlx5: Modify struct mlx5_irq to use struct msi_map Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 07/14] net/mlx5: Use newer affinity descriptor Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 08/14] net/mlx5: Improve naming of pci function vectors Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 09/14] net/mlx5: Refactor completion irq request/release code Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 10/14] net/mlx5: Use dynamic msix vectors allocation Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 11/14] net/mlx5: Move devlink registration before mlx5_load Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 12/14] net/mlx5: Refactor calculation of required completion vectors Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 13/14] net/mlx5: Use one completion vector if eth is disabled Saeed Mahameed
2023-02-20  6:14 ` [PATCH net-next 14/14] net/mlx5: Provide external API for allocating vectors Saeed Mahameed
2023-02-21  0:51 ` [PATCH net-next 00/14] mlx5 dynamic msix Jakub Kicinski

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=20230220061442.403092-3-saeed@kernel.org \
    --to=saeed@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=decot@googlers.com \
    --cc=edumazet@google.com \
    --cc=elic@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=saeedm@nvidia.com \
    --cc=tariqt@nvidia.com \
    /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).