All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
@ 2015-01-07 17:56 Shrikrishna Khare
  2015-01-07 21:57 ` Sergei Shtylyov
  0 siblings, 1 reply; 5+ messages in thread
From: Shrikrishna Khare @ 2015-01-07 17:56 UTC (permalink / raw)
  To: sbhatewara, pv-drivers, netdev, linux-kernel
  Cc: Shrikrishna Khare, Srividya Murali

Failing to reinitialize on wakeup results in loss of network connectivity for
vmxnet3 interface.

Signed-off-by: Srividya Murali <smurali@vmware.com>
Signed-off-by: Shrikrishna Khare <skhare@vmware.com>
Reviewed-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_drv.c |   50 +++++++++++++++++++++---------------
 drivers/net/vmxnet3/vmxnet3_int.h |    4 +-
 2 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/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;
 
 	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,
+			   "%s: failed to re-activate on resume, error: %d",
+		    netdev->name, err);
+		vmxnet3_force_close(adapter);
+		goto err;
+	}
+	netif_device_attach(netdev);
+
+err:
+	return err;
 }
 
 static const struct dev_pm_ops vmxnet3_pm_ops = {
 	.suspend = vmxnet3_suspend,
 	.resume = vmxnet3_resume,
+	.freeze = vmxnet3_suspend,
+	.restore = vmxnet3_resume,
 };
 #endif
 
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 048f020..6297d9f 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -69,10 +69,10 @@
 /*
  * Version numbers
  */
-#define VMXNET3_DRIVER_VERSION_STRING   "1.3.1.0-k"
+#define VMXNET3_DRIVER_VERSION_STRING   "1.3.2.0-k"
 
 /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
-#define VMXNET3_DRIVER_VERSION_NUM      0x01030100
+#define VMXNET3_DRIVER_VERSION_NUM      0x01030200
 
 #if defined(CONFIG_PCI_MSI)
 	/* RSS only makes sense if MSI-X is supported. */
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
  2015-01-07 17:56 [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate Shrikrishna Khare
@ 2015-01-07 21:57 ` Sergei Shtylyov
  2015-01-09 23:20   ` Shrikrishna Khare
  0 siblings, 1 reply; 5+ messages in thread
From: Sergei Shtylyov @ 2015-01-07 21:57 UTC (permalink / raw)
  To: Shrikrishna Khare, sbhatewara, pv-drivers, netdev, linux-kernel
  Cc: Srividya Murali

Hello.

On 01/07/2015 08:56 PM, Shrikrishna Khare wrote:

> Failing to reinitialize on wakeup results in loss of network connectivity for
> vmxnet3 interface.

> Signed-off-by: Srividya Murali <smurali@vmware.com>
> Signed-off-by: Shrikrishna Khare <skhare@vmware.com>
> Reviewed-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
> ---
>   drivers/net/vmxnet3/vmxnet3_drv.c |   50 +++++++++++++++++++++---------------
>   drivers/net/vmxnet3/vmxnet3_int.h |    4 +-
>   2 files changed, 31 insertions(+), 23 deletions(-)

> diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/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?

>
>   	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'?

> +			   "%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?

> +		vmxnet3_force_close(adapter);
> +		goto err;

    Why not just *return*?

> +	}
> +	netif_device_attach(netdev);
> +
> +err:
> +	return err;
>   }
[...]

WBR, Sergei


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
  2015-01-07 21:57 ` Sergei Shtylyov
@ 2015-01-09 23:20   ` Shrikrishna Khare
  0 siblings, 0 replies; 5+ messages in thread
From: Shrikrishna Khare @ 2015-01-09 23:20 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: sbhatewara, pv-drivers, netdev, linux-kernel, Srividya Murali


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:
> 
> > Failing to reinitialize on wakeup results in loss of network connectivity
> > for
> > vmxnet3 interface.
> 
> > Signed-off-by: Srividya Murali <smurali@vmware.com>
> > Signed-off-by: Shrikrishna Khare <skhare@vmware.com>
> > Reviewed-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
> > ---
> >   drivers/net/vmxnet3/vmxnet3_drv.c |   50
> > +++++++++++++++++++++---------------
> >   drivers/net/vmxnet3/vmxnet3_int.h |    4 +-
> >   2 files changed, 31 insertions(+), 23 deletions(-)
> 
> > diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c
> > b/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?
> 
> > 
> >   	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'?
> 
> > +			   "%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?
> 
> > +		vmxnet3_force_close(adapter);
> > +		goto err;
> 
>    Why not just *return*?
> 
> > +	}
> > +	netif_device_attach(netdev);
> > +
> > +err:
> > +	return err;
> >   }
> [...]
> 
> WBR, Sergei
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
  2015-01-09 23:19 Shrikrishna Khare
@ 2015-01-12 21:44 ` David Miller
  0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2015-01-12 21:44 UTC (permalink / raw)
  To: skhare; +Cc: sbhatewara, pv-drivers, netdev, linux-kernel, smurali

From: Shrikrishna Khare <skhare@vmware.com>
Date: Fri,  9 Jan 2015 15:19:14 -0800

> Failing to reinitialize on wakeup results in loss of network connectivity for
> vmxnet3 interface.
> 
> Signed-off-by: Srividya Murali <smurali@vmware.com>
> Signed-off-by: Shrikrishna Khare <skhare@vmware.com>
> Reviewed-by: Shreyas N Bhatewara <sbhatewara@vmware.com>

Applied, thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate
@ 2015-01-09 23:19 Shrikrishna Khare
  2015-01-12 21:44 ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: Shrikrishna Khare @ 2015-01-09 23:19 UTC (permalink / raw)
  To: sbhatewara, pv-drivers, netdev, linux-kernel
  Cc: Shrikrishna Khare, Srividya Murali

Failing to reinitialize on wakeup results in loss of network connectivity for
vmxnet3 interface.

Signed-off-by: Srividya Murali <smurali@vmware.com>
Signed-off-by: Shrikrishna Khare <skhare@vmware.com>
Reviewed-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_drv.c |   44 +++++++++++++++++++++----------------
 drivers/net/vmxnet3/vmxnet3_int.h |    4 +-
 2 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 7af1f5c..3143981 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -3290,27 +3290,15 @@ 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);
@@ -3319,15 +3307,31 @@ vmxnet3_resume(struct device *device)
 
 	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);
+
+	vmxnet3_reset_dev(adapter);
+	err = vmxnet3_activate_dev(adapter);
+	if (err != 0) {
+		netdev_err(netdev,
+			   "failed to re-activate on resume, error: %d", err);
+		vmxnet3_force_close(adapter);
+		return err;
+	}
+	netif_device_attach(netdev);
 
 	return 0;
 }
@@ -3335,6 +3339,8 @@ vmxnet3_resume(struct device *device)
 static const struct dev_pm_ops vmxnet3_pm_ops = {
 	.suspend = vmxnet3_suspend,
 	.resume = vmxnet3_resume,
+	.freeze = vmxnet3_suspend,
+	.restore = vmxnet3_resume,
 };
 #endif
 
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 048f020..6297d9f 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -69,10 +69,10 @@
 /*
  * Version numbers
  */
-#define VMXNET3_DRIVER_VERSION_STRING   "1.3.1.0-k"
+#define VMXNET3_DRIVER_VERSION_STRING   "1.3.2.0-k"
 
 /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
-#define VMXNET3_DRIVER_VERSION_NUM      0x01030100
+#define VMXNET3_DRIVER_VERSION_NUM      0x01030200
 
 #if defined(CONFIG_PCI_MSI)
 	/* RSS only makes sense if MSI-X is supported. */
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-01-12 21:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-07 17:56 [PATCH net-next] Driver: Vmxnet3: Reinitialize vmxnet3 backend on wakeup from hibernate Shrikrishna Khare
2015-01-07 21:57 ` Sergei Shtylyov
2015-01-09 23:20   ` Shrikrishna Khare
2015-01-09 23:19 Shrikrishna Khare
2015-01-12 21:44 ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.