patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Jerin Jacob <jerinjacobk@gmail.com>
To: Vamsi Attunuru <vattunuru@marvell.com>,
	Ferruh Yigit <ferruh.yigit@intel.com>
Cc: dpdk-dev <dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>,
	 Nithin Dabilpuram <ndabilpuram@marvell.com>,
	YuX <yux.jiang@intel.com>,  dpdk stable <stable@dpdk.org>,
	Wei Ling <weix.ling@intel.com>,
	 Srikanth Yalavarthi <syalavarthi@marvell.com>
Subject: Re: [PATCH v2 1/1] common/cnxk: fix static assertion failure
Date: Thu, 3 Mar 2022 11:29:24 +0530	[thread overview]
Message-ID: <CALBAE1MWjy7zXsC93TTmumhz-CBPpxfy=R_dDMO9589=EmyHxA@mail.gmail.com> (raw)
In-Reply-To: <20220302134654.2760076-1-vattunuru@marvell.com>

On Wed, Mar 2, 2022 at 7:18 PM Vamsi Attunuru <vattunuru@marvell.com> wrote:
>
> Use dynamically allocated memory for storing soft expiry
> ring base addresses which fixes the static assertion failure,
> as the size of dynamic allocation depends on RTE_MAX_ETHPORTS
> which varies based on the build config.
>
> Bugzilla ID: 940
> Fixes: d26185716d3f ("net/cnxk: support outbound soft expiry notification")
> Cc: stable@dpdk.org
>
> Reported-by: Wei Ling <weix.ling@intel.com>
> Reported-by: Yu Jiang <yux.jiang@intel.com>
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
> Signed-off-by: Srikanth Yalavarthi <syalavarthi@marvell.com>

Acked-by: Jerin Jacob <jerinj@marvell.com>
Applied to dpdk-next-net-mrvl/for-next-net. Thanks


> ---
> V2: Add bugzilla & reportee details, remove unused changes.
> ---
>  drivers/common/cnxk/roc_nix_inl.c      | 23 +++++++++++++----------
>  drivers/common/cnxk/roc_nix_inl.h      |  2 +-
>  drivers/common/cnxk/roc_nix_inl_dev.c  | 11 ++++++++++-
>  drivers/common/cnxk/roc_nix_inl_priv.h |  2 +-
>  drivers/common/cnxk/roc_platform.h     |  7 +++++++
>  5 files changed, 32 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/common/cnxk/roc_nix_inl.c b/drivers/common/cnxk/roc_nix_inl.c
> index 11ed157703..826c6e99c1 100644
> --- a/drivers/common/cnxk/roc_nix_inl.c
> +++ b/drivers/common/cnxk/roc_nix_inl.c
> @@ -330,12 +330,13 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
>         struct dev *dev = &nix->dev;
>         struct msix_offset_rsp *rsp;
>         struct nix_inl_dev *inl_dev;
> +       size_t sa_sz, ring_sz;
>         uint16_t sso_pffunc;
>         uint8_t eng_grpmask;
>         uint64_t blkaddr, i;
> +       uint64_t *ring_base;
>         uint16_t nb_lf;
>         void *sa_base;
> -       size_t sa_sz;
>         int j, rc;
>         void *sa;
>
> @@ -468,16 +469,16 @@ roc_nix_inl_outb_init(struct roc_nix *roc_nix)
>         /* Allocate memory to be used as a ring buffer to poll for
>          * soft expiry event from ucode
>          */
> +       ring_sz = (ROC_IPSEC_ERR_RING_MAX_ENTRY + 1) * sizeof(uint64_t);
> +       ring_base = inl_dev->sa_soft_exp_ring;
>         for (i = 0; i < nix->outb_se_ring_cnt; i++) {
> -               inl_dev->sa_soft_exp_ring[nix->outb_se_ring_base + i] =
> -                       plt_zmalloc((ROC_IPSEC_ERR_RING_MAX_ENTRY + 1) *
> -                                           sizeof(uint64_t),
> -                                   0);
> -               if (!inl_dev->sa_soft_exp_ring[i]) {
> +               ring_base[nix->outb_se_ring_base + i] =
> +                       PLT_U64_CAST(plt_zmalloc(ring_sz, 0));
> +               if (!ring_base[nix->outb_se_ring_base + i]) {
>                         plt_err("Couldn't allocate memory for soft exp ring");
>                         while (i--)
> -                               plt_free(inl_dev->sa_soft_exp_ring
> -                                                [nix->outb_se_ring_base + i]);
> +                               plt_free(PLT_PTR_CAST(
> +                                       ring_base[nix->outb_se_ring_base + i]));
>                         rc = -ENOMEM;
>                         goto lf_fini;
>                 }
> @@ -504,6 +505,7 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix)
>         struct idev_cfg *idev = idev_get_cfg();
>         struct dev *dev = &nix->dev;
>         struct nix_inl_dev *inl_dev;
> +       uint64_t *ring_base;
>         int i, rc, ret = 0;
>
>         if (!nix->inl_outb_ena)
> @@ -537,10 +539,11 @@ roc_nix_inl_outb_fini(struct roc_nix *roc_nix)
>
>         if (idev && idev->nix_inl_dev) {
>                 inl_dev = idev->nix_inl_dev;
> +               ring_base = inl_dev->sa_soft_exp_ring;
>
>                 for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++) {
> -                       if (inl_dev->sa_soft_exp_ring[i])
> -                               plt_free(inl_dev->sa_soft_exp_ring[i]);
> +                       if (ring_base[i])
> +                               plt_free(PLT_PTR_CAST(ring_base[i]));
>                 }
>         }
>
> diff --git a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h
> index 1dc58f2da2..2c2a4d76f2 100644
> --- a/drivers/common/cnxk/roc_nix_inl.h
> +++ b/drivers/common/cnxk/roc_nix_inl.h
> @@ -137,7 +137,7 @@ struct roc_nix_inl_dev {
>         bool set_soft_exp_poll;
>         /* End of input parameters */
>
> -#define ROC_NIX_INL_MEM_SZ (2304)
> +#define ROC_NIX_INL_MEM_SZ (1280)
>         uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned;
>  } __plt_cache_aligned;
>
> diff --git a/drivers/common/cnxk/roc_nix_inl_dev.c b/drivers/common/cnxk/roc_nix_inl_dev.c
> index 1cfcdba3f2..5a032aab52 100644
> --- a/drivers/common/cnxk/roc_nix_inl_dev.c
> +++ b/drivers/common/cnxk/roc_nix_inl_dev.c
> @@ -653,7 +653,7 @@ inl_outb_soft_exp_poll(struct nix_inl_dev *inl_dev, uint32_t ring_idx)
>         uint32_t port_id;
>
>         port_id = ring_idx / ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS;
> -       ring_base = inl_dev->sa_soft_exp_ring[ring_idx];
> +       ring_base = PLT_PTR_CAST(inl_dev->sa_soft_exp_ring[ring_idx]);
>         if (!ring_base) {
>                 plt_err("Invalid soft exp ring base");
>                 return;
> @@ -751,6 +751,14 @@ nix_inl_outb_poll_thread_setup(struct nix_inl_dev *inl_dev)
>
>         inl_dev->soft_exp_ring_bmap_mem = mem;
>         inl_dev->soft_exp_ring_bmap = bmap;
> +       inl_dev->sa_soft_exp_ring = plt_zmalloc(
> +               ROC_NIX_INL_MAX_SOFT_EXP_RNGS * sizeof(uint64_t), 0);
> +       if (!inl_dev->sa_soft_exp_ring) {
> +               plt_err("soft expiry ring pointer array alloc failed");
> +               plt_free(mem);
> +               rc = -ENOMEM;
> +               goto exit;
> +       }
>
>         for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++)
>                 plt_bitmap_clear(inl_dev->soft_exp_ring_bmap, i);
> @@ -896,6 +904,7 @@ roc_nix_inl_dev_fini(struct roc_nix_inl_dev *roc_inl_dev)
>                 pthread_join(inl_dev->soft_exp_poll_thread, NULL);
>                 plt_bitmap_free(inl_dev->soft_exp_ring_bmap);
>                 plt_free(inl_dev->soft_exp_ring_bmap_mem);
> +               plt_free(inl_dev->sa_soft_exp_ring);
>         }
>
>         /* Flush Inbound CTX cache entries */
> diff --git a/drivers/common/cnxk/roc_nix_inl_priv.h b/drivers/common/cnxk/roc_nix_inl_priv.h
> index da6d6e9b03..0fa5e090d4 100644
> --- a/drivers/common/cnxk/roc_nix_inl_priv.h
> +++ b/drivers/common/cnxk/roc_nix_inl_priv.h
> @@ -58,7 +58,7 @@ struct nix_inl_dev {
>         /* OUTB soft expiry poll thread */
>         pthread_t soft_exp_poll_thread;
>         uint32_t soft_exp_poll_freq;
> -       void *sa_soft_exp_ring[ROC_NIX_INL_MAX_SOFT_EXP_RNGS];
> +       uint64_t *sa_soft_exp_ring;
>
>         /* Soft expiry ring bitmap */
>         struct plt_bitmap *soft_exp_ring_bmap;
> diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h
> index fa285446bd..28004b1743 100644
> --- a/drivers/common/cnxk/roc_platform.h
> +++ b/drivers/common/cnxk/roc_platform.h
> @@ -63,6 +63,13 @@
>  #ifndef PLT_ETHER_ADDR_LEN
>  #define PLT_ETHER_ADDR_LEN RTE_ETHER_ADDR_LEN
>  #endif
> +
> +/* Cast to specific datatypes */
> +#define PLT_PTR_CAST(val) ((void *)(val))
> +#define PLT_U64_CAST(val) ((uint64_t)(val))
> +#define PLT_U32_CAST(val) ((uint32_t)(val))
> +#define PLT_U16_CAST(val) ((uint16_t)(val))
> +
>  /** Divide ceil */
>  #define PLT_DIV_CEIL(x, y)                     \
>         ({                                      \
> --
> 2.25.1
>

  reply	other threads:[~2022-03-03  5:59 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20220302120701.2749772-1-vattunuru@marvell.com>
2022-03-02 13:46 ` Vamsi Attunuru
2022-03-03  5:59   ` Jerin Jacob [this message]
2022-03-03 11:54   ` Ling, WeiX
2022-03-03 17:21   ` Ferruh Yigit
2022-03-04 10:20     ` [EXT] " Vamsi Krishna Attunuru
2022-03-04 11:15       ` Ferruh Yigit
2022-03-04 11:45         ` Vamsi Krishna Attunuru
2022-03-04 13:14       ` Ferruh Yigit
2022-03-04 13:59         ` Vamsi Krishna Attunuru

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='CALBAE1MWjy7zXsC93TTmumhz-CBPpxfy=R_dDMO9589=EmyHxA@mail.gmail.com' \
    --to=jerinjacobk@gmail.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jerinj@marvell.com \
    --cc=ndabilpuram@marvell.com \
    --cc=stable@dpdk.org \
    --cc=syalavarthi@marvell.com \
    --cc=vattunuru@marvell.com \
    --cc=weix.ling@intel.com \
    --cc=yux.jiang@intel.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).