All of lore.kernel.org
 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: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-02 12:07 [PATCH 1/1] common/cnxk: fix static assertion failure Vamsi Attunuru
2022-03-02 12:46 ` Jerin Jacob
2022-03-02 13:46 ` [PATCH v2 " 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.