From: Shreyas Bhatewara Date: Fri, 14 Jan 2011 14:59:52 +0000 (+0000) Subject: vmxnet3: Disable napi in suspend, reenable in resume. X-Git-Tag: firefly_0821_release~7613^2~2412^2~155 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=51956cd68b0c3039968485317b77a89dfec95eab;p=firefly-linux-kernel-4.4.55.git vmxnet3: Disable napi in suspend, reenable in resume. There is a small possibility of a race where the suspend routine gets called, while a napi callback is still pending and when that comes up, it enables interrupts which just got disabled in the suspend routine. This change adds napi disable call in suspend and enable in resume to avoid race. Signed-off-by: Shreyas N Bhatewara Acked-by: Dmitry Torokhov Signed-off-by: David S. Miller --- diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index a1632a995380..20ef4f36ea2e 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -3101,6 +3101,9 @@ vmxnet3_suspend(struct device *device) if (!netif_running(netdev)) return 0; + for (i = 0; i < adapter->num_rx_queues; i++) + napi_disable(&adapter->rx_queue[i].napi); + vmxnet3_disable_all_intrs(adapter); vmxnet3_free_irqs(adapter); vmxnet3_free_intr_resources(adapter); @@ -3192,7 +3195,7 @@ skip_arp: static int vmxnet3_resume(struct device *device) { - int err; + int err, i = 0; struct pci_dev *pdev = to_pci_dev(device); struct net_device *netdev = pci_get_drvdata(pdev); struct vmxnet3_adapter *adapter = netdev_priv(netdev); @@ -3224,6 +3227,8 @@ vmxnet3_resume(struct device *device) VMXNET3_CMD_UPDATE_PMCFG); vmxnet3_alloc_intr_resources(adapter); vmxnet3_request_irqs(adapter); + for (i = 0; i < adapter->num_rx_queues; i++) + napi_enable(&adapter->rx_queue[i].napi); vmxnet3_enable_all_intrs(adapter); return 0;