Re: [PATCH] b44: add 64 bit stats
From: Kevin Groeneveld <hidden>
Date: 2012-07-20 01:56:31
Hi Eric, On Sun, Jul 15, 2012 at 3:26 AM, Eric Dumazet [off-list ref] wrote:
So you must use u64_stats_fetch_begin_bh() Because on 32bit, uniprocessor, u64_stats_fetch_begin() only disables preemption. (there is no seqlock in syncp) So softirq are allowed to interrupt you and corrupt your stats while you read them, and you dont notice you have to retry.
I am still trying to make sure I understand this fully. I want to update some other drivers with 64 bit stats as well. What you said seems to make sense, but... I was looking at the virtio_net.c driver. One spot in this driver which updates the stats is the receive_buf function. recive_buf is called from virtnet_poll which is registered as a napi poll function. According to Documentation/networking/netdevices.txt the poll function is called in a softirq context. However, the function which reads the stats uses u64_stats_fetch_begin/u64_stats_fetch_retry. Shouldn't this be u64_stats_fetch_begin_bh/u64_stats_fetch_retry_bh for the exact reasons you described for my b44 patch? Kevin