DPDK patches and discussions
 help / color / mirror / Atom feed
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).

  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).