Re: [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
From: Shrikrishna Khare <hidden>
Date: 2015-01-09 23:20:12
Also in:
lkml
Hi Sergei, Thanks for the review. I have addressed all the review comments and resubmitted the patch. Thanks, Shri On Wed, 7 Jan 2015, Sergei Shtylyov wrote:
Hello. On 01/07/2015 08:56 PM, Shrikrishna Khare wrote:quoted
Failing to reinitialize on wakeup results in loss of network connectivity for vmxnet3 interface.quoted
Signed-off-by: Srividya Murali <redacted> Signed-off-by: Shrikrishna Khare <redacted> Reviewed-by: Shreyas N Bhatewara <redacted> --- drivers/net/vmxnet3/vmxnet3_drv.c | 50 +++++++++++++++++++++--------------- drivers/net/vmxnet3/vmxnet3_int.h | 4 +- 2 files changed, 31 insertions(+), 23 deletions(-)quoted
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.cb/drivers/net/vmxnet3/vmxnet3_drv.c index 7af1f5c..124cb9f 100644--- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c@@ -3290,51 +3290,59 @@ skip_arp: static int vmxnet3_resume(struct device *device) { - int err, i = 0; + int err; unsigned long flags; struct pci_dev *pdev = to_pci_dev(device); struct net_device *netdev = pci_get_drvdata(pdev); struct vmxnet3_adapter *adapter = netdev_priv(netdev); - struct Vmxnet3_PMConf *pmConf; if (!netif_running(netdev)) return 0; - /* Destroy wake-up filters. */ - pmConf = adapter->pm_conf; - memset(pmConf, 0, sizeof(*pmConf)); - - adapter->shared->devRead.pmConfDesc.confVer = cpu_to_le32(1); - adapter->shared->devRead.pmConfDesc.confLen = cpu_to_le32(sizeof( - *pmConf)); - adapter->shared->devRead.pmConfDesc.confPA = - cpu_to_le64(adapter->pm_conf_pa); - - netif_device_attach(netdev); pci_set_power_state(pdev, PCI_D0); pci_restore_state(pdev); err = pci_enable_device_mem(pdev); if (err != 0) - return err; + goto err;Why?quoted
pci_enable_wake(pdev, PCI_D0, 0); + vmxnet3_alloc_intr_resources(adapter); + + /* During hibernate and suspend, device has to be reinitialized as the + * device state need not be preserved. + */ + + /* Need not check adapter state as other reset tasks cannot run during + * device resume. + */ spin_lock_irqsave(&adapter->cmd_lock, flags); VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, - VMXNET3_CMD_UPDATE_PMCFG); + VMXNET3_CMD_QUIESCE_DEV); spin_unlock_irqrestore(&adapter->cmd_lock, flags); - 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); + vmxnet3_tq_cleanup_all(adapter); + vmxnet3_rq_cleanup_all(adapter); - return 0; + vmxnet3_reset_dev(adapter); + err = vmxnet3_activate_dev(adapter); + if (err) { + netdev_err(adapter->netdev,Not just 'netdev'?quoted
+ "%s: failed to re-activate on resume, error: %d", + netdev->name, err);Should have been aligned with the line right above. And isn't netdev->name printed by netdev_err() already?quoted
+ vmxnet3_force_close(adapter); + goto err;Why not just *return*?quoted
+ } + netif_device_attach(netdev); + +err: + return err; }[...] WBR, Sergei