Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/108247 _apply patch failure_ Submitter: Vamsi Attunuru 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