On Wed, 19 Jun 2024 10:55:29 +0800, Li RongQing <lirongqing@xxxxxxxxx> wrote: > This place is fetching the stats, so u64_stats_fetch_begin > and u64_stats_fetch_retry should be used Reviewed-by: Heng Qi <hengqi@xxxxxxxxxxxxxxxxx> Thanks! > > Fixes: 6208799553a8 ("virtio-net: support rx netdim") > Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx> > --- > 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 >