Publishing the port becomes a release store of the configured flag. Control path.
Drop the barrier after clearing started in opdl_stop(): no store follows it, and the datapath tests data->dev_started, not device->started. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/event/opdl/opdl_evdev.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/event/opdl/opdl_evdev.c b/drivers/event/opdl/opdl_evdev.c index ffa65ef930..44a648a11a 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; } @@ -474,10 +475,7 @@ opdl_stop(struct rte_eventdev *dev) destroy_queues_and_rings(dev); - device->started = 0; - - rte_smp_wmb(); } static int -- 2.53.0

