Publishing the port becomes a release store of the configured flag; the barrier after clearing started becomes a release fence. Both are control path.
Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/event/opdl/opdl_evdev.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/event/opdl/opdl_evdev.c b/drivers/event/opdl/opdl_evdev.c index ffa65ef930..1450fa5ae8 100644 --- a/drivers/event/opdl/opdl_evdev.c +++ b/drivers/event/opdl/opdl_evdev.c @@ -200,8 +200,9 @@ opdl_port_setup(struct rte_eventdev *dev, p->queue_id = OPDL_INVALID_QID; p->external_qid = OPDL_INVALID_QID; dev->data->ports[port_id] = p; - rte_smp_wmb(); - p->configured = 1; + /* Release publishes port setup before the configured flag */ + rte_atomic_store_explicit((uint8_t __rte_atomic *)&p->configured, 1, + rte_memory_order_release); device->nb_ports++; return 0; } @@ -477,7 +478,7 @@ opdl_stop(struct rte_eventdev *dev) device->started = 0; - rte_smp_wmb(); + rte_atomic_thread_fence(rte_memory_order_release); } static int -- 2.53.0

