diff options
author | Stephen Hemminger <sthemmin@microsoft.com> | 2018-06-29 14:07:16 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-06-30 21:28:36 +0900 |
commit | 3ffe64f1a641b80a82d9ef4efa7a05ce69049871 (patch) | |
tree | f75e61535c1775e4a0f0c31d5832c66c4a08b51b /drivers/net/hyperv/hyperv_net.h | |
parent | 3f76df198288ceec92fc9eddecad1e73c52769b0 (diff) | |
download | linux-stable-3ffe64f1a641b80a82d9ef4efa7a05ce69049871.tar.gz linux-stable-3ffe64f1a641b80a82d9ef4efa7a05ce69049871.tar.bz2 linux-stable-3ffe64f1a641b80a82d9ef4efa7a05ce69049871.zip |
hv_netvsc: split sub-channel setup into async and sync
When doing device hotplug the sub channel must be async to avoid
deadlock issues because device is discovered in softirq context.
When doing changes to MTU and number of channels, the setup
must be synchronous to avoid races such as when MTU and device
settings are done in a single ip command.
Reported-by: Thomas Walker <Thomas.Walker@twosigma.com>
Fixes: 8195b1396ec8 ("hv_netvsc: fix deadlock on hotplug")
Fixes: 732e49850c5e ("netvsc: fix race on sub channel creation")
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv/hyperv_net.h')
-rw-r--r-- | drivers/net/hyperv/hyperv_net.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h index 1a924b867b07..4b6e308199d2 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -210,7 +210,7 @@ int netvsc_recv_callback(struct net_device *net, void netvsc_channel_cb(void *context); int netvsc_poll(struct napi_struct *napi, int budget); -void rndis_set_subchannel(struct work_struct *w); +int rndis_set_subchannel(struct net_device *ndev, struct netvsc_device *nvdev); int rndis_filter_open(struct netvsc_device *nvdev); int rndis_filter_close(struct netvsc_device *nvdev); struct netvsc_device *rndis_filter_device_add(struct hv_device *dev, |