|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