From: Vamsi Attunuru <vattunuru@marvell.com>
To: <dev@dpdk.org>
Cc: <jerinj@marvell.com>, <vattunuru@marvell.com>,
<ndabilpuram@marvell.com>, <yux.jiang@intel.com>,
<stable@dpdk.org>, Wei Ling <weix.ling@intel.com>,
Srikanth Yalavarthi <syalavarthi@marvell.com>
Subject: [PATCH v2 1/1] common/cnxk: fix static assertion failure
Date: Wed, 2 Mar 2022 19:16:54 +0530 [thread overview]
Message-ID: <20220302134654.2760076-1-vattunuru@marvell.com> (raw)
In-Reply-To: <20220302120701.2749772-1-vattunuru@marvell.com>
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>
---
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
next prev parent reply other threads:[~2022-03-02 13:48 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-02 12:07 [PATCH " Vamsi Attunuru
2022-03-02 12:46 ` Jerin Jacob
2022-03-02 13:46 ` Vamsi Attunuru [this message]
2022-03-03 5:59 ` [PATCH v2 " Jerin Jacob
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=20220302134654.2760076-1-vattunuru@marvell.com \
--to=vattunuru@marvell.com \
--cc=dev@dpdk.org \
--cc=jerinj@marvell.com \
--cc=ndabilpuram@marvell.com \
--cc=stable@dpdk.org \
--cc=syalavarthi@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).