Message ID | 20210430123404.31062-2-tim.gardner@canonical.com |
---|---|
State | New |
Headers | show |
Series | hv_netvsc: remove ndo_poll_controller | expand |
On 30/04/2021 14:34, Tim Gardner wrote: > From: Stephen Hemminger <stephen@networkplumber.org> > > BugLink: https://bugs.launchpad.net/bugs/1924314 > > Similar to other patches from ERic. > > As diagnosed by Song Liu, ndo_poll_controller() can > be very dangerous on loaded hosts, since the cpu > calling ndo_poll_controller() might steal all NAPI > contexts (for all RX/TX queues of the NIC). This capture > can last for unlimited amount of time, since one > cpu is generally not able to drain all the queues under load. > > In netvsc driver it uses NAPI for TX completions. The default > poll_napi will do this for us now and avoid the capture. > > Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com> > Cc: Haiyang Zhang <haiyangz@microsoft.com> > Cc: Eric Dumazet <edumazet@google.com> > Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (backported from commit 2a7f8c3b1d3feedee3aa319ac220cbde3725b5d5) > [rtg - minor context adjustment] > Signed-off-by: Tim Gardner <tim.gardner@canonical.com> > --- > drivers/net/hyperv/netvsc_drv.c | 23 ----------------------- > 1 file changed, 23 deletions(-) Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> Best regards, Krzysztof
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 087c05eefdf49..e5c8769a3d399 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -1649,26 +1649,6 @@ netvsc_set_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *info) return -EOPNOTSUPP; } -#ifdef CONFIG_NET_POLL_CONTROLLER -static void netvsc_poll_controller(struct net_device *dev) -{ - struct net_device_context *ndc = netdev_priv(dev); - struct netvsc_device *ndev; - int i; - - rcu_read_lock(); - ndev = rcu_dereference(ndc->nvdev); - if (ndev) { - for (i = 0; i < ndev->num_chn; i++) { - struct netvsc_channel *nvchan = &ndev->chan_table[i]; - - napi_schedule(&nvchan->napi); - } - } - rcu_read_unlock(); -} -#endif - static u32 netvsc_get_rxfh_key_size(struct net_device *dev) { return NETVSC_HASH_KEYLEN; @@ -1875,9 +1855,6 @@ static const struct net_device_ops device_ops = { .ndo_select_queue = netvsc_select_queue, .ndo_get_stats64 = netvsc_get_stats64, .ndo_bpf = netvsc_bpf, -#ifdef CONFIG_NET_POLL_CONTROLLER - .ndo_poll_controller = netvsc_poll_controller, -#endif }; /*