2019-08-06 05:19:15

by Dexuan Cui

[permalink] [raw]
Subject: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage


This fixes a warning of "suspicious rcu_dereference_check() usage"
when nload runs.

Signed-off-by: Stephen Hemminger <[email protected]>
Signed-off-by: Dexuan Cui <[email protected]>
---
drivers/net/hyperv/netvsc_drv.c | 44 +++++++++++++++++++--------------
1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index f9209594624b5..25502d335b94f 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1236,25 +1236,10 @@ static void netvsc_get_pcpu_stats(struct net_device *net,
}
}

-static void netvsc_get_stats64(struct net_device *net,
- struct rtnl_link_stats64 *t)
+static void netvsc_get_per_chan_stats(struct netvsc_device *nvdev,
+ struct rtnl_link_stats64 *t)
{
- struct net_device_context *ndev_ctx = netdev_priv(net);
- struct netvsc_device *nvdev = rcu_dereference_rtnl(ndev_ctx->nvdev);
- struct netvsc_vf_pcpu_stats vf_tot;
- int i;
-
- if (!nvdev)
- return;
-
- netdev_stats_to_stats64(t, &net->stats);
-
- netvsc_get_vf_stats(net, &vf_tot);
- t->rx_packets += vf_tot.rx_packets;
- t->tx_packets += vf_tot.tx_packets;
- t->rx_bytes += vf_tot.rx_bytes;
- t->tx_bytes += vf_tot.tx_bytes;
- t->tx_dropped += vf_tot.tx_dropped;
+ u32 i;

for (i = 0; i < nvdev->num_chn; i++) {
const struct netvsc_channel *nvchan = &nvdev->chan_table[i];
@@ -1286,6 +1271,29 @@ static void netvsc_get_stats64(struct net_device *net,
}
}

+static void netvsc_get_stats64(struct net_device *net,
+ struct rtnl_link_stats64 *t)
+{
+ struct net_device_context *ndev_ctx = netdev_priv(net);
+ struct netvsc_device *nvdev;
+ struct netvsc_vf_pcpu_stats vf_tot;
+
+ netdev_stats_to_stats64(t, &net->stats);
+
+ netvsc_get_vf_stats(net, &vf_tot);
+ t->rx_packets += vf_tot.rx_packets;
+ t->tx_packets += vf_tot.tx_packets;
+ t->rx_bytes += vf_tot.rx_bytes;
+ t->tx_bytes += vf_tot.tx_bytes;
+ t->tx_dropped += vf_tot.tx_dropped;
+
+ rcu_read_lock();
+ nvdev = rcu_dereference(ndev_ctx->nvdev);
+ if (nvdev)
+ netvsc_get_per_chan_stats(nvdev, t);
+ rcu_read_unlock();
+}
+
static int netvsc_set_mac_addr(struct net_device *ndev, void *p)
{
struct net_device_context *ndc = netdev_priv(ndev);


2019-08-06 19:14:09

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage

On Tue, 6 Aug 2019 05:17:44 +0000, Dexuan Cui wrote:
> This fixes a warning of "suspicious rcu_dereference_check() usage"
> when nload runs.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
> Signed-off-by: Dexuan Cui <[email protected]>

Minor change in behaviour would perhaps be worth acknowledging in the
commit message (since you check ndev for NULL later now), and a Fixes
tag would be good.

But the looks pretty straightforward and correct!

2019-08-07 06:57:44

by Dexuan Cui

[permalink] [raw]
Subject: RE: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage

> From: Jakub Kicinski <[email protected]>
> Sent: Tuesday, August 6, 2019 12:13 PM
> To: Dexuan Cui <[email protected]>
>
> On Tue, 6 Aug 2019 05:17:44 +0000, Dexuan Cui wrote:
> > This fixes a warning of "suspicious rcu_dereference_check() usage"
> > when nload runs.
> >
> > Signed-off-by: Stephen Hemminger <[email protected]>
> > Signed-off-by: Dexuan Cui <[email protected]>
>
> Minor change in behaviour would perhaps be worth acknowledging in the
> commit message (since you check ndev for NULL later now), and a Fixes
> tag would be good.
>
> But the looks pretty straightforward and correct!

Hi,
Yeah, it looks the minor behavior change doesn't matter, because IMO the
'nvdev' can only be NULL when the NIC is being removed, or the MTU is
being changed, etc.

The Fixes tag is:
Fixes: 776e726bfb34 ("netvsc: fix RCU warning in get_stats")

If I should send a v2, please let me know.

Thanks,
-- Dexuan

2019-08-09 01:16:09

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage

From: Dexuan Cui <[email protected]>
Date: Tue, 6 Aug 2019 05:17:44 +0000

>
> This fixes a warning of "suspicious rcu_dereference_check() usage"
> when nload runs.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
> Signed-off-by: Dexuan Cui <[email protected]>

Please resend with appropriate fixes tag.

2019-08-09 01:17:39

by Dexuan Cui

[permalink] [raw]
Subject: RE: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage

> From: David Miller <[email protected]>
> Sent: Thursday, August 8, 2019 6:14 PM
> To: Dexuan Cui <[email protected]>
> Cc: [email protected]; Haiyang Zhang <[email protected]>;
> Stephen Hemminger <[email protected]>; [email protected]; KY
> Srinivasan <[email protected]>; Michael Kelley <[email protected]>;
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; vkuznets
> <[email protected]>; [email protected]
> Subject: Re: [PATCH net] hv_netvsc: Fix a warning of suspicious RCU usage
>
> From: Dexuan Cui <[email protected]>
> Date: Tue, 6 Aug 2019 05:17:44 +0000
>
> >
> > This fixes a warning of "suspicious rcu_dereference_check() usage"
> > when nload runs.
> >
> > Signed-off-by: Stephen Hemminger <[email protected]>
> > Signed-off-by: Dexuan Cui <[email protected]>
>
> Please resend with appropriate fixes tag.

Will do shortly.

Thanks,
-- Dexuan