> -----Original Message-----
> From: Stephen Hemminger <[email protected]>
> Sent: Monday, September 21, 2026 2:10 AM
> To: [email protected]
> Cc: Stephen Hemminger <[email protected]>; Wei Hu
> <[email protected]>
> Subject: [EXTERNAL] [PATCH v2 27/33] net/netvsc: replace SMP barrier in
> RNDIS response
>
> Publishing the copied response before clearing the pending id is release
> ordering. The following cmpset is a full barrier today, but keep the explicit
> fence
> so the ordering survives when cmpset is converted to a release compare
> exchange.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
> ---
> drivers/net/netvsc/hn_rndis.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c
> index 7c54eebcef..d1142fa1dd 100644
> --- a/drivers/net/netvsc/hn_rndis.c
> +++ b/drivers/net/netvsc/hn_rndis.c
> @@ -357,7 +357,7 @@ void hn_rndis_receive_response(struct hn_data *hv,
> memcpy(hv->rndis_resp, data, len);
>
> /* make sure response copied before update */
> - rte_smp_wmb();
> + rte_atomic_thread_fence(rte_memory_order_release);
>
> if (rte_atomic32_cmpset(&hv->rndis_pending, hdr->rid, 0) == 0) {
> PMD_DRV_LOG(NOTICE,
> --
> 2.53.0
Reviewed-by: Wei Hu <[email protected]>
The review reveals a pre-existing issue, not introduced by this patch.
The old rte_smp_wmb() only ordered the producer. Hn_rndis_execl() loaked
an acquire operation before reading rndis_resp.
The change perserves the existing producer-side semantics and is stronger on
arm64, so it does not create a regression.
The missing consumer acquire should be reported as a separate follow-up fix.
Thanks,
Wei