|WARNING| pw108247 [PATCH] [v2, 1/1] net/cnxk: support outbound soft expiry notification
dpdklab at iol.unh.edu
dpdklab at iol.unh.edu
Thu Feb 24 15:28:57 CET 2022
Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/108247
_apply patch failure_
Submitter: Vamsi Attunuru <vattunuru at marvell.com>
Date: Thursday, February 24 2022 09:49:31
Applied on: CommitID:ee05a93e1e6633d0fdec409faf09f12a2e05b991
Apply patch set 108247 failed:
Checking patch drivers/common/cnxk/roc_idev.c...
Checking patch drivers/common/cnxk/roc_idev.h...
Checking patch drivers/common/cnxk/roc_ie_ot.h...
Hunk #2 succeeded at 450 (offset -1 lines).
Checking patch drivers/common/cnxk/roc_nix_inl.c...
Hunk #2 succeeded at 396 (offset -36 lines).
Hunk #3 succeeded at 442 (offset -36 lines).
Hunk #4 succeeded at 476 (offset -36 lines).
Hunk #5 succeeded at 669 (offset -67 lines).
Checking patch drivers/common/cnxk/roc_nix_inl.h...
error: while searching for:
bool wqe_skip;
uint8_t spb_drop_pc;
uint8_t lpb_drop_pc;
/* End of input parameters */
#define ROC_NIX_INL_MEM_SZ (1280)
uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned;
} __plt_cache_aligned;
error: patch failed: drivers/common/cnxk/roc_nix_inl.h:115
Hunk #4 succeeded at 170 (offset -8 lines).
Checking patch drivers/common/cnxk/roc_nix_inl_dev.c...
Hunk #1 succeeded at 13 (offset -2 lines).
Hunk #2 succeeded at 31 (offset -8 lines).
error: while searching for:
return rc;
}
int
roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev)
{
error: patch failed: drivers/common/cnxk/roc_nix_inl_dev.c:637
Hunk #4 succeeded at 585 (offset -255 lines).
Hunk #5 succeeded at 634 (offset -255 lines).
Checking patch drivers/common/cnxk/roc_nix_inl_dev_irq.c...
Hunk #1 succeeded at 29 (offset -3 lines).
Checking patch drivers/common/cnxk/roc_nix_inl_priv.h...
Hunk #2 succeeded at 50 (offset -5 lines).
Checking patch drivers/common/cnxk/roc_nix_priv.h...
Hunk #1 succeeded at 178 (offset -5 lines).
Checking patch drivers/common/cnxk/roc_platform.h...
Checking patch drivers/common/cnxk/version.map...
error: while searching for:
roc_nix_inl_outb_sa_base_get;
roc_nix_inl_outb_sso_pffunc_get;
roc_nix_inl_outb_is_enabled;
roc_nix_inl_sa_sync;
roc_nix_inl_ctx_write;
roc_nix_inl_dev_pffunc_get;
error: patch failed: drivers/common/cnxk/version.map:156
Checking patch drivers/net/cnxk/cn10k_ethdev.h...
error: while searching for:
void cn10k_eth_sec_ops_override(void);
/* SSO Work callback */
void cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args);
#define LMT_OFF(lmt_addr, lmt_num, offset) \
(void *)((uintptr_t)(lmt_addr) + \
error: patch failed: drivers/net/cnxk/cn10k_ethdev.h:82
Checking patch drivers/net/cnxk/cn10k_ethdev_sec.c...
error: while searching for:
}
void
cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args)
{
struct rte_eth_event_ipsec_desc desc;
struct cn10k_sec_sess_priv sess_priv;
error: patch failed: drivers/net/cnxk/cn10k_ethdev_sec.c:153
Hunk #3 succeeded at 173 (offset -15 lines).
error: while searching for:
free(iv_str);
}
static int
cn10k_eth_sec_session_create(void *device,
struct rte_security_session_conf *conf,
error: patch failed: drivers/net/cnxk/cn10k_ethdev_sec.c:309
error: while searching for:
if (iv_str)
outb_dbg_iv_update(outb_sa_dptr, iv_str);
/* Save userdata */
outb_priv->userdata = conf->userdata;
outb_priv->sa_idx = sa_idx;
error: patch failed: drivers/net/cnxk/cn10k_ethdev_sec.c:478
Checking patch drivers/net/cnxk/cnxk_ethdev.c...
Hunk #1 succeeded at 1405 (offset -17 lines).
Hunk #2 succeeded at 1505 (offset -23 lines).
Checking patch drivers/net/cnxk/cnxk_ethdev_sec.c...
error: while searching for:
inl_dev->attach_cptlf = true;
/* WQE skip is one for DPDK */
inl_dev->wqe_skip = true;
rc = roc_nix_inl_dev_init(inl_dev);
if (rc) {
plt_err("Failed to init nix inl device, rc=%d(%s)", rc,
error: patch failed: drivers/net/cnxk/cnxk_ethdev_sec.c:288
Applied patch drivers/common/cnxk/roc_idev.c cleanly.
Applied patch drivers/common/cnxk/roc_idev.h cleanly.
Applied patch drivers/common/cnxk/roc_ie_ot.h cleanly.
Applied patch drivers/common/cnxk/roc_nix_inl.c cleanly.
Applying patch drivers/common/cnxk/roc_nix_inl.h with 1 reject...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Rejected hunk #3.
Hunk #4 applied cleanly.
Applying patch drivers/common/cnxk/roc_nix_inl_dev.c with 1 reject...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Rejected hunk #3.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Applied patch drivers/common/cnxk/roc_nix_inl_dev_irq.c cleanly.
Applied patch drivers/common/cnxk/roc_nix_inl_priv.h cleanly.
Applied patch drivers/common/cnxk/roc_nix_priv.h cleanly.
Applied patch drivers/common/cnxk/roc_platform.h cleanly.
Applying patch drivers/common/cnxk/version.map with 1 reject...
Hunk #1 applied cleanly.
Rejected hunk #2.
Applying patch drivers/net/cnxk/cn10k_ethdev.h with 1 reject...
Rejected hunk #1.
Applying patch drivers/net/cnxk/cn10k_ethdev_sec.c with 3 rejects...
Hunk #1 applied cleanly.
Rejected hunk #2.
Hunk #3 applied cleanly.
Rejected hunk #4.
Rejected hunk #5.
Applied patch drivers/net/cnxk/cnxk_ethdev.c cleanly.
Applying patch drivers/net/cnxk/cnxk_ethdev_sec.c with 1 reject...
Rejected hunk #1.
diff a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h (rejected hunks)
@@ -115,9 +128,10 @@ struct roc_nix_inl_dev {
bool wqe_skip;
uint8_t spb_drop_pc;
uint8_t lpb_drop_pc;
+ bool set_soft_exp_poll;
/* End of input parameters */
-#define ROC_NIX_INL_MEM_SZ (1280)
+#define ROC_NIX_INL_MEM_SZ (2304)
uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned;
} __plt_cache_aligned;
diff a/drivers/common/cnxk/roc_nix_inl_dev.c b/drivers/common/cnxk/roc_nix_inl_dev.c (rejected hunks)
@@ -637,6 +641,133 @@ roc_nix_inl_dev_xaq_realloc(uint64_t aura_handle)
return rc;
}
+static void
+inl_outb_soft_exp_poll(struct nix_inl_dev *inl_dev, uint32_t ring_idx)
+{
+ union roc_ot_ipsec_err_ring_head head;
+ struct roc_ot_ipsec_outb_sa *sa;
+ uint16_t head_l, tail_l;
+ uint64_t *ring_base;
+ 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];
+ if (!ring_base) {
+ plt_err("Invalid soft exp ring base");
+ return;
+ }
+
+ head.u64 = __atomic_load_n(ring_base, __ATOMIC_ACQUIRE);
+ head_l = head.s.head_pos;
+ tail_l = head.s.tail_pos;
+
+ while (tail_l != head_l) {
+ union roc_ot_ipsec_err_ring_entry entry;
+ int poll_counter = 0;
+
+ while (poll_counter++ <
+ ROC_NIX_INL_SA_SOFT_EXP_ERR_MAX_POLL_COUNT) {
+ plt_delay_us(20);
+ entry.u64 = __atomic_load_n(ring_base + tail_l + 1,
+ __ATOMIC_ACQUIRE);
+ if (likely(entry.u64))
+ break;
+ }
+
+ entry.u64 = plt_be_to_cpu_64(entry.u64);
+ sa = (struct roc_ot_ipsec_outb_sa *)(((uint64_t)entry.s.data1
+ << 51) |
+ (entry.s.data0 << 7));
+
+ if (sa != NULL) {
+ uint64_t tmp = ~(uint32_t)0x0;
+ inl_dev->work_cb(&tmp, sa, (port_id << 8) | 0x1);
+ __atomic_store_n(ring_base + tail_l + 1, 0ULL,
+ __ATOMIC_RELAXED);
+ __atomic_add_fetch((uint32_t *)ring_base, 1,
+ __ATOMIC_ACQ_REL);
+ } else
+ plt_err("Invalid SA");
+
+ tail_l++;
+ }
+}
+
+static void *
+nix_inl_outb_poll_thread(void *args)
+{
+ struct nix_inl_dev *inl_dev = args;
+ uint32_t poll_freq;
+ uint32_t i;
+ bool bit;
+
+ poll_freq = inl_dev->soft_exp_poll_freq;
+
+ while (!soft_exp_poll_thread_exit) {
+ if (soft_exp_consumer_cnt) {
+ for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++) {
+ bit = plt_bitmap_get(
+ inl_dev->soft_exp_ring_bmap, i);
+ if (bit)
+ inl_outb_soft_exp_poll(inl_dev, i);
+ }
+ }
+ plt_delay_us(poll_freq);
+ }
+
+ return 0;
+}
+
+static int
+nix_inl_outb_poll_thread_setup(struct nix_inl_dev *inl_dev)
+{
+ struct plt_bitmap *bmap;
+ size_t bmap_sz;
+ uint32_t i;
+ void *mem;
+ int rc;
+
+ /* Allocate a bitmap that pool thread uses to get the port_id
+ * that's corresponding to the inl_outb_soft_exp_ring
+ */
+ bmap_sz =
+ plt_bitmap_get_memory_footprint(ROC_NIX_INL_MAX_SOFT_EXP_RNGS);
+ mem = plt_zmalloc(bmap_sz, PLT_CACHE_LINE_SIZE);
+ if (mem == NULL) {
+ plt_err("soft expiry ring bmap alloc failed");
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ bmap = plt_bitmap_init(ROC_NIX_INL_MAX_SOFT_EXP_RNGS, mem, bmap_sz);
+ if (!bmap) {
+ plt_err("soft expiry ring bmap init failed");
+ plt_free(mem);
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ inl_dev->soft_exp_ring_bmap_mem = mem;
+ inl_dev->soft_exp_ring_bmap = bmap;
+
+ for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++)
+ plt_bitmap_clear(inl_dev->soft_exp_ring_bmap, i);
+
+ soft_exp_consumer_cnt = 0;
+ soft_exp_poll_thread_exit = false;
+ inl_dev->soft_exp_poll_freq = 100;
+ rc = plt_ctrl_thread_create(&inl_dev->soft_exp_poll_thread,
+ "OUTB_SOFT_EXP_POLL_THREAD", NULL,
+ nix_inl_outb_poll_thread, inl_dev);
+ if (rc) {
+ plt_bitmap_free(inl_dev->soft_exp_ring_bmap);
+ plt_free(inl_dev->soft_exp_ring_bmap_mem);
+ }
+
+exit:
+ return rc;
+}
+
int
roc_nix_inl_dev_init(struct roc_nix_inl_dev *roc_inl_dev)
{
diff a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map (rejected hunks)
@@ -156,6 +157,7 @@ INTERNAL {
roc_nix_inl_outb_sa_base_get;
roc_nix_inl_outb_sso_pffunc_get;
roc_nix_inl_outb_is_enabled;
+ roc_nix_inl_outb_soft_exp_poll_switch;
roc_nix_inl_sa_sync;
roc_nix_inl_ctx_write;
roc_nix_inl_dev_pffunc_get;
diff a/drivers/net/cnxk/cn10k_ethdev.h b/drivers/net/cnxk/cn10k_ethdev.h (rejected hunks)
@@ -82,7 +82,8 @@ void cn10k_eth_set_tx_function(struct rte_eth_dev *eth_dev);
void cn10k_eth_sec_ops_override(void);
/* SSO Work callback */
-void cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args);
+void cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args,
+ uint32_t soft_exp_event);
#define LMT_OFF(lmt_addr, lmt_num, offset) \
(void *)((uintptr_t)(lmt_addr) + \
diff a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c (rejected hunks)
@@ -153,7 +154,7 @@ cnxk_pktmbuf_free_no_cache(struct rte_mbuf *mbuf)
}
void
-cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args)
+cn10k_eth_sec_sso_work_cb(uint64_t *gw, void *args, uint32_t soft_exp_event)
{
struct rte_eth_event_ipsec_desc desc;
struct cn10k_sec_sess_priv sess_priv;
@@ -309,6 +320,30 @@ outb_dbg_iv_update(struct roc_ot_ipsec_outb_sa *outb_sa, const char *__iv_str)
free(iv_str);
}
+static int
+cn10k_eth_sec_outb_sa_misc_fill(struct roc_nix *roc_nix,
+ struct roc_ot_ipsec_outb_sa *sa, void *sa_cptr,
+ struct rte_security_ipsec_xform *ipsec_xfrm,
+ uint32_t sa_idx)
+{
+ uint64_t *ring_base, ring_addr;
+
+ if (ipsec_xfrm->life.bytes_soft_limit |
+ ipsec_xfrm->life.packets_soft_limit) {
+ ring_base = roc_nix_inl_outb_ring_base_get(roc_nix);
+ if (ring_base == NULL)
+ return -ENOTSUP;
+
+ ring_addr = ring_base[sa_idx >>
+ ROC_NIX_SOFT_EXP_ERR_RING_MAX_ENTRY_LOG2];
+ sa->ctx.err_ctl.s.mode = ROC_IE_OT_ERR_CTL_MODE_RING;
+ sa->ctx.err_ctl.s.address = ring_addr >> 3;
+ sa->w0.s.ctx_id = ((uintptr_t)sa_cptr >> 51) & 0x1ff;
+ }
+
+ return 0;
+}
+
static int
cn10k_eth_sec_session_create(void *device,
struct rte_security_session_conf *conf,
@@ -478,6 +513,17 @@ cn10k_eth_sec_session_create(void *device,
if (iv_str)
outb_dbg_iv_update(outb_sa_dptr, iv_str);
+ /* Fill outbound sa misc params */
+ rc = cn10k_eth_sec_outb_sa_misc_fill(&dev->nix, outb_sa_dptr,
+ outb_sa, ipsec, sa_idx);
+ if (rc) {
+ snprintf(tbuf, sizeof(tbuf),
+ "Failed to init outb sa misc params, rc=%d",
+ rc);
+ rc |= cnxk_eth_outb_sa_idx_put(dev, sa_idx);
+ goto mempool_put;
+ }
+
/* Save userdata */
outb_priv->userdata = conf->userdata;
outb_priv->sa_idx = sa_idx;
diff a/drivers/net/cnxk/cnxk_ethdev_sec.c b/drivers/net/cnxk/cnxk_ethdev_sec.c (rejected hunks)
@@ -288,6 +288,7 @@ cnxk_nix_inl_dev_probe(struct rte_pci_driver *pci_drv,
inl_dev->attach_cptlf = true;
/* WQE skip is one for DPDK */
inl_dev->wqe_skip = true;
+ inl_dev->set_soft_exp_poll = true;
rc = roc_nix_inl_dev_init(inl_dev);
if (rc) {
plt_err("Failed to init nix inl device, rc=%d(%s)", rc,
https://lab.dpdk.org/results/dashboard/patchsets/21244/
UNH-IOL DPDK Community Lab
More information about the test-report
mailing list