From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
To: David Marchand <david.marchand@redhat.com>,
Olivier Matz <olivier.matz@6wind.com>
Cc: Dmitry Kozlyuk <dkozlyuk@nvidia.com>,
Ray Kinsella <mdr@ashroe.eu>,
Stephen Hemminger <stephen@networkplumber.org>,
dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH] mempool: accept user flags only
Date: Mon, 18 Oct 2021 11:37:32 +0300 [thread overview]
Message-ID: <79f4f029-ca13-6048-396c-232fe5ef5fb7@oktetlabs.ru> (raw)
In-Reply-To: <20211018082635.2054-1-david.marchand@redhat.com>
On 10/18/21 11:26 AM, David Marchand wrote:
> 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 \
I think RTE_ prefix is missing here since it is in a public
header now.
> + | 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.
> *
>
Should we make a patch to add defines with RTE_ prefix and
add a deprecation for old flags without RTE_ prefix?
Olivier, what do you think? If you have time to care about it,
it would be great. (I'm unfamiliar with coccinelle yet).
next prev parent reply other threads:[~2021-10-18 8:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-18 8:26 David Marchand
2021-10-18 8:35 ` Olivier Matz
2021-10-20 7:53 ` David Marchand
2021-10-18 8:37 ` Andrew Rybchenko [this message]
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=79f4f029-ca13-6048-396c-232fe5ef5fb7@oktetlabs.ru \
--to=andrew.rybchenko@oktetlabs.ru \
--cc=david.marchand@redhat.com \
--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).