Segmentation fault is observed as soon as any dpdk application with ethdev event is launched. Handling the event types appropriately.
Also fixing sub event type violation as in OCTEONTX event device we use sub_event_type to store the ethernet port identifier when we receive work from OCTEONTX ethernet device. This violates the event device spec as sub_event_type should be 0 in the initial receive stage. Set sub_event_type to 0 after copying the port id in single workslot mode. Fixes: 8dc6c2f12ecf ("crypto/octeontx: add crypto adapter data path") Signed-off-by: Harman Kalra <hka...@marvell.com> Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> --- V3: * fixing sub event type violation V2: * Seperated out a generic patch from the series drivers/event/octeontx/ssovf_worker.h | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/event/octeontx/ssovf_worker.h b/drivers/event/octeontx/ssovf_worker.h index e6ee292688..57be476394 100644 --- a/drivers/event/octeontx/ssovf_worker.h +++ b/drivers/event/octeontx/ssovf_worker.h @@ -179,16 +179,22 @@ ssows_get_work(struct ssows *ws, struct rte_event *ev, const uint16_t flag) ev->event = sched_type_queue | (get_work0 & 0xffffffff); if (get_work1) { - if (ev->event_type == RTE_EVENT_TYPE_ETHDEV) - get_work1 = (uintptr_t)ssovf_octeontx_wqe_to_pkt( - get_work1, (ev->event >> 20) & 0x7F, flag, - ws->lookup_mem); - else if (ev->event_type == RTE_EVENT_TYPE_CRYPTODEV) + if (ev->event_type == RTE_EVENT_TYPE_ETHDEV) { + uint16_t port = (ev->event >> 20) & 0x7F; + + ev->sub_event_type = 0; + ev->mbuf = ssovf_octeontx_wqe_to_pkt( + get_work1, port, flag, ws->lookup_mem); + } else if (ev->event_type == RTE_EVENT_TYPE_CRYPTODEV) { get_work1 = otx_crypto_adapter_dequeue(get_work1); - ev->u64 = get_work1; - } else if (unlikely((get_work0 & 0xFFFFFFFF) == 0xFFFFFFFF)) { - ssovf_octeontx_wqe_free(get_work1); - return 0; + ev->u64 = get_work1; + } else { + if (unlikely((get_work0 & 0xFFFFFFFF) == 0xFFFFFFFF)) { + ssovf_octeontx_wqe_free(get_work1); + return 0; + } + ev->u64 = get_work1; + } } return !!get_work1; -- 2.18.0