[RFC 24/32] event/dsw: replace SMP barriers with release fences

Mattias Rönnblom hofors at lysator.liu.se
Fri Jul 31 06:37:50 CEST 2026


On 7/29/26 19:54, Stephen Hemminger wrote:
> All four barriers publish flow table or ring updates before a
> control message enqueue, which is release ordering. All are on the
> migration control path, not per event.
> 
> The fences may in fact be removable: the control messages travel
> through rte_ring, whose producer tail update is itself a release
> store covering the preceding writes. Left in place here to keep
> this a like for like conversion.
> 

I also suspect you can remove some or all of these. Not sure it's worth 
the trouble though.

> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
>   drivers/event/dsw/dsw_event.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/event/dsw/dsw_event.c b/drivers/event/dsw/dsw_event.c
> index 399d9f050e..82d3636b29 100644
> --- a/drivers/event/dsw/dsw_event.c
> +++ b/drivers/event/dsw/dsw_event.c
> @@ -339,7 +339,7 @@ dsw_port_handle_pause_flows(struct dsw_evdev *dsw, struct dsw_port *port,
>   	/* Make sure any stores to the original port's in_ring is seen
>   	 * before the ctl message.
>   	 */
> -	rte_smp_wmb();
> +	rte_atomic_thread_fence(rte_memory_order_release);
>   
>   	dsw_port_ctl_enqueue(&dsw->ports[originating_port_id], &cfm);
>   }
> @@ -821,7 +821,7 @@ dsw_port_move_parallel_flows(struct dsw_evdev *dsw,
>   		}
>   	}
>   
> -	rte_smp_wmb();
> +	rte_atomic_thread_fence(rte_memory_order_release);
>   
>   	dsw_port_end_emigration(dsw, source_port, RTE_SCHED_TYPE_PARALLEL);
>   }
> @@ -1190,7 +1190,7 @@ dsw_port_move_emigrating_flows(struct dsw_evdev *dsw,
>   		    dest_port_id;
>   	}
>   
> -	rte_smp_wmb();
> +	rte_atomic_thread_fence(rte_memory_order_release);
>   
>   	dsw_port_drain_in_ring(source_port);
>   	dsw_port_forward_emigrated_flows(dsw, source_port);
> @@ -1213,7 +1213,7 @@ dsw_port_move_emigrating_flows(struct dsw_evdev *dsw,
>   	/* Flow table update and migration destination port's enqueues
>   	 * must be seen before the control message.
>   	 */
> -	rte_smp_wmb();
> +	rte_atomic_thread_fence(rte_memory_order_release);
>   
>   	dsw_port_ctl_broadcast(dsw, source_port, DSW_CTL_UNPAUSE_REQ,
>   			       source_port->emigration_target_qfs,

Reviewed-by: Mattias Rönnblom <mattias.ronnblom at ericsson.com>



More information about the dev mailing list