netvsc: remove unnecessary lock on shutdown
authorstephen hemminger <stephen@networkplumber.org>
Wed, 22 Mar 2017 21:51:03 +0000 (14:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 Mar 2017 02:38:56 +0000 (19:38 -0700)
The channel inbound lock was not being used at all by the netvsc
device, but the spin_lock was helpful by providing necessary
barrier before waiting.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/hyperv/rndis_filter.c

index 3bd5447277ad6f8868180b23bee51379caf2b242..cd7b83707e04728bb14047dc118e3360e5a32bf3 100644 (file)
@@ -926,8 +926,6 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
        struct rndis_halt_request *halt;
        struct net_device_context *net_device_ctx = netdev_priv(dev->ndev);
        struct netvsc_device *nvdev = net_device_ctx->nvdev;
-       struct hv_device *hdev = net_device_ctx->device_ctx;
-       ulong flags;
 
        /* Attempt to do a rndis device halt */
        request = get_rndis_request(dev, RNDIS_MSG_HALT,
@@ -945,9 +943,10 @@ static void rndis_filter_halt_device(struct rndis_device *dev)
        dev->state = RNDIS_DEV_UNINITIALIZED;
 
 cleanup:
-       spin_lock_irqsave(&hdev->channel->inbound_lock, flags);
        nvdev->destroy = true;
-       spin_unlock_irqrestore(&hdev->channel->inbound_lock, flags);
+
+       /* Force flag to be ordered before waiting */
+       wmb();
 
        /* Wait for all send completions */
        wait_event(nvdev->wait_drain, netvsc_device_idle(nvdev));