Re: [PATCH] virtio_net: Use u64_stats_fetch_begin() for stats fetch
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2024-07-09 12:45:33
Also in:
virtualization
On Wed, Jun 19, 2024 at 10:55:29AM +0800, Li RongQing wrote:
This place is fetching the stats, so u64_stats_fetch_begin
and u64_stats_fetch_retry should be used
Fixes: 6208799553a8 ("virtio-net: support rx netdim")
Signed-off-by: Li RongQing <redacted>So I dropped this from my tree, if you think it's still necessary, pls resubmit to net-next. Thanks!
quoted hunk ↗ jump to hunk
--- drivers/net/virtio_net.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 61a57d1..b669e73 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c@@ -2332,16 +2332,18 @@ static void virtnet_poll_cleantx(struct receive_queue *rq) static void virtnet_rx_dim_update(struct virtnet_info *vi, struct receive_queue *rq) { struct dim_sample cur_sample = {}; + unsigned int start; if (!rq->packets_in_napi) return; - u64_stats_update_begin(&rq->stats.syncp); - dim_update_sample(rq->calls, - u64_stats_read(&rq->stats.packets), - u64_stats_read(&rq->stats.bytes), - &cur_sample); - u64_stats_update_end(&rq->stats.syncp); + do { + start = u64_stats_fetch_begin(&rq->stats.syncp); + dim_update_sample(rq->calls, + u64_stats_read(&rq->stats.packets), + u64_stats_read(&rq->stats.bytes), + &cur_sample); + } while (u64_stats_fetch_retry(&rq->stats.syncp, start)); net_dim(&rq->dim, cur_sample); rq->packets_in_napi = 0;-- 2.9.4