DPDK patches and discussions
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Dmitry Kozlyuk <dkozlyuk@nvidia.com>,
	Olivier Matz <olivier.matz@6wind.com>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	Ray Kinsella <mdr@ashroe.eu>,
	Stephen Hemminger <stephen@networkplumber.org>
Subject: [dpdk-dev] [PATCH] mempool: accept user flags only
Date: Mon, 18 Oct 2021 10:26:35 +0200	[thread overview]
Message-ID: <20211018082635.2054-1-david.marchand@redhat.com> (raw)

As reported by Dmitry, MEMPOOL_F_POOL_CREATED is a flag only manipulated
internally.
This flag is not supposed to be requested from an application and would
probably result in an incorrect behavior if an application did pass it.

Other internal flags may be introduced later.

Rework the check and export a mask of valid user flags for use in the
unit test.

Fixes: b240af8b10f9 ("mempool: enforce valid flags at creation")

Reported-by: Dmitry Kozlyuk <dkozlyuk@nvidia.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 app/test/test_mempool.c   |  8 ++++----
 lib/mempool/rte_mempool.c | 11 ++---------
 lib/mempool/rte_mempool.h |  9 +++++++++
 3 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/app/test/test_mempool.c b/app/test/test_mempool.c
index 66bc8d86b7..ba05742f76 100644
--- a/app/test/test_mempool.c
+++ b/app/test/test_mempool.c
@@ -205,15 +205,15 @@ static int test_mempool_creation_with_exceeded_cache_size(void)
 	return 0;
 }
 
-static int test_mempool_creation_with_unknown_flag(void)
+static int test_mempool_creation_with_invalid_flags(void)
 {
 	struct rte_mempool *mp_cov;
 
-	mp_cov = rte_mempool_create("test_mempool_unknown_flag", MEMPOOL_SIZE,
+	mp_cov = rte_mempool_create("test_mempool_invalid_flags", MEMPOOL_SIZE,
 		MEMPOOL_ELT_SIZE, 0, 0,
 		NULL, NULL,
 		NULL, NULL,
-		SOCKET_ID_ANY, MEMPOOL_F_NO_IOVA_CONTIG << 1);
+		SOCKET_ID_ANY, ~MEMPOOL_VALID_USER_FLAGS);
 
 	if (mp_cov != NULL) {
 		rte_mempool_free(mp_cov);
@@ -653,7 +653,7 @@ test_mempool(void)
 	if (test_mempool_creation_with_exceeded_cache_size() < 0)
 		GOTO_ERR(ret, err);
 
-	if (test_mempool_creation_with_unknown_flag() < 0)
+	if (test_mempool_creation_with_invalid_flags() < 0)
 		GOTO_ERR(ret, err);
 
 	if (test_mempool_same_name_twice_creation() < 0)
diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c
index 607419ccaf..7f92d79c89 100644
--- a/lib/mempool/rte_mempool.c
+++ b/lib/mempool/rte_mempool.c
@@ -777,13 +777,6 @@ rte_mempool_cache_free(struct rte_mempool_cache *cache)
 	rte_free(cache);
 }
 
-#define MEMPOOL_KNOWN_FLAGS (MEMPOOL_F_NO_SPREAD \
-	| MEMPOOL_F_NO_CACHE_ALIGN \
-	| MEMPOOL_F_SP_PUT \
-	| MEMPOOL_F_SC_GET \
-	| MEMPOOL_F_POOL_CREATED \
-	| MEMPOOL_F_NO_IOVA_CONTIG \
-	)
 /* create an empty mempool */
 struct rte_mempool *
 rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
@@ -828,8 +821,8 @@ rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
 		return NULL;
 	}
 
-	/* enforce no unknown flag is passed by the application */
-	if ((flags & ~MEMPOOL_KNOWN_FLAGS) != 0) {
+	/* enforce only user flags are passed by the application */
+	if ((flags & ~MEMPOOL_VALID_USER_FLAGS) != 0) {
 		rte_errno = EINVAL;
 		return NULL;
 	}
diff --git a/lib/mempool/rte_mempool.h b/lib/mempool/rte_mempool.h
index 88bcbc51ef..d2bf2843f7 100644
--- a/lib/mempool/rte_mempool.h
+++ b/lib/mempool/rte_mempool.h
@@ -258,6 +258,15 @@ struct rte_mempool {
 #define MEMPOOL_F_POOL_CREATED   0x0010 /**< Internal: pool is created. */
 #define MEMPOOL_F_NO_IOVA_CONTIG 0x0020 /**< Don't need IOVA contiguous objs. */
 
+/**
+ * This macro lists all the mempool flags an application may request.
+ */
+#define MEMPOOL_VALID_USER_FLAGS (MEMPOOL_F_NO_SPREAD \
+	| MEMPOOL_F_NO_CACHE_ALIGN \
+	| MEMPOOL_F_SP_PUT \
+	| MEMPOOL_F_SC_GET \
+	| MEMPOOL_F_NO_IOVA_CONTIG \
+	)
 /**
  * @internal When debug is enabled, store some statistics.
  *
-- 
2.23.0


             reply	other threads:[~2021-10-18  8:26 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-18  8:26 David Marchand [this message]
2021-10-18  8:35 ` Olivier Matz
2021-10-20  7:53   ` David Marchand
2021-10-18  8:37 ` Andrew Rybchenko
2021-10-18  8:58   ` Olivier Matz
2021-10-18  9:05     ` Andrew Rybchenko
2021-10-18 12:06       ` David Marchand
2021-10-18 14:51         ` Andrew Rybchenko
2021-10-19 13:42   ` David Marchand
2021-10-19 18:17     ` Andrew Rybchenko

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=20211018082635.2054-1-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=dkozlyuk@nvidia.com \
    --cc=mdr@ashroe.eu \
    --cc=olivier.matz@6wind.com \
    --cc=stephen@networkplumber.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).