Re: [PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-28 Thread David Miller
From: Thierry Reding 
Date: Thu, 24 May 2018 16:09:07 +0200

> From: Thierry Reding 
> 
> Some drivers, such as DWC EQOS on Tegra, need to perform operations that
> can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
> proper operation. Since there is no need for this lock to be a spinlock,
> convert it to a mutex instead.
> 
> Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
> Reported-by: Jon Hunter 
> Signed-off-by: Thierry Reding 
> ---
> This applies on top of net-next.

Applied to net-next.


Re: [PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-28 Thread David Miller
From: Thierry Reding 
Date: Thu, 24 May 2018 16:09:07 +0200

> From: Thierry Reding 
> 
> Some drivers, such as DWC EQOS on Tegra, need to perform operations that
> can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
> proper operation. Since there is no need for this lock to be a spinlock,
> convert it to a mutex instead.
> 
> Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
> Reported-by: Jon Hunter 
> Signed-off-by: Thierry Reding 
> ---
> This applies on top of net-next.

Applied to net-next.


Re: [PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-25 Thread Bhadram Varka

Hi,

On 5/24/2018 7:39 PM, Thierry Reding wrote:

From: Thierry Reding 

Some drivers, such as DWC EQOS on Tegra, need to perform operations that
can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
proper operation. Since there is no need for this lock to be a spinlock,
convert it to a mutex instead.

Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
Reported-by: Jon Hunter 
Signed-off-by: Thierry Reding 
---


Tested on P3310 Tegra186 platform.

Tested-by: Bhadram Varka 

--
Bhadram


Re: [PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-25 Thread Bhadram Varka

Hi,

On 5/24/2018 7:39 PM, Thierry Reding wrote:

From: Thierry Reding 

Some drivers, such as DWC EQOS on Tegra, need to perform operations that
can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
proper operation. Since there is no need for this lock to be a spinlock,
convert it to a mutex instead.

Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
Reported-by: Jon Hunter 
Signed-off-by: Thierry Reding 
---


Tested on P3310 Tegra186 platform.

Tested-by: Bhadram Varka 

--
Bhadram


[PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-24 Thread Thierry Reding
From: Thierry Reding 

Some drivers, such as DWC EQOS on Tegra, need to perform operations that
can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
proper operation. Since there is no need for this lock to be a spinlock,
convert it to a mutex instead.

Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
Reported-by: Jon Hunter 
Signed-off-by: Thierry Reding 
---
This applies on top of net-next.

 drivers/net/ethernet/stmicro/stmmac/stmmac.h  |  2 +-
 .../ethernet/stmicro/stmmac/stmmac_ethtool.c  | 12 +++
 .../net/ethernet/stmicro/stmmac/stmmac_main.c | 31 +--
 3 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h 
b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index 42fc76e76bf9..5a2570b8d540 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -121,7 +121,7 @@ struct stmmac_priv {
struct net_device *dev;
struct device *device;
struct mac_device_info *hw;
-   spinlock_t lock;
+   struct mutex lock;
 
/* RX Queue */
struct stmmac_rx_queue rx_queue[MTL_MAX_RX_QUEUES];
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 6d82b3ef5c3b..5710864fa809 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -390,9 +390,9 @@ stmmac_ethtool_set_link_ksettings(struct net_device *dev,
ADVERTISED_10baseT_Half |
ADVERTISED_10baseT_Full);
 
-   spin_lock(>lock);
+   mutex_lock(>lock);
stmmac_pcs_ctrl_ane(priv, priv->ioaddr, 1, priv->hw->ps, 0);
-   spin_unlock(>lock);
+   mutex_unlock(>lock);
 
return 0;
}
@@ -632,12 +632,12 @@ static void stmmac_get_wol(struct net_device *dev, struct 
ethtool_wolinfo *wol)
 {
struct stmmac_priv *priv = netdev_priv(dev);
 
-   spin_lock_irq(>lock);
+   mutex_lock(>lock);
if (device_can_wakeup(priv->device)) {
wol->supported = WAKE_MAGIC | WAKE_UCAST;
wol->wolopts = priv->wolopts;
}
-   spin_unlock_irq(>lock);
+   mutex_unlock(>lock);
 }
 
 static int stmmac_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
@@ -666,9 +666,9 @@ static int stmmac_set_wol(struct net_device *dev, struct 
ethtool_wolinfo *wol)
disable_irq_wake(priv->wol_irq);
}
 
-   spin_lock_irq(>lock);
+   mutex_lock(>lock);
priv->wolopts = wol->wolopts;
-   spin_unlock_irq(>lock);
+   mutex_unlock(>lock);
 
return 0;
 }
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d9dbe1355896..8cc63da79a80 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -381,7 +381,6 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 {
struct net_device *ndev = priv->dev;
int interface = priv->plat->interface;
-   unsigned long flags;
bool ret = false;
 
if ((interface != PHY_INTERFACE_MODE_MII) &&
@@ -408,7 +407,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 * changed).
 * In that case the driver disable own timers.
 */
-   spin_lock_irqsave(>lock, flags);
+   mutex_lock(>lock);
if (priv->eee_active) {
netdev_dbg(priv->dev, "disable EEE\n");
del_timer_sync(>eee_ctrl_timer);
@@ -416,11 +415,11 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
tx_lpi_timer);
}
priv->eee_active = 0;
-   spin_unlock_irqrestore(>lock, flags);
+   mutex_unlock(>lock);
goto out;
}
/* Activate the EEE and start timers */
-   spin_lock_irqsave(>lock, flags);
+   mutex_lock(>lock);
if (!priv->eee_active) {
priv->eee_active = 1;
timer_setup(>eee_ctrl_timer,
@@ -435,7 +434,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
stmmac_set_eee_pls(priv, priv->hw, ndev->phydev->link);
 
ret = true;
-   spin_unlock_irqrestore(>lock, flags);
+   mutex_unlock(>lock);
 
netdev_dbg(priv->dev, "Energy-Efficient Ethernet 
initialized\n");
}
@@ -811,13 +810,12 @@ static void stmmac_adjust_link(struct net_device *dev)
 {
struct stmmac_priv *priv = 

[PATCH] net: stmmac: Use mutex instead of spinlock

2018-05-24 Thread Thierry Reding
From: Thierry Reding 

Some drivers, such as DWC EQOS on Tegra, need to perform operations that
can sleep under this lock (clk_set_rate() in tegra_eqos_fix_speed()) for
proper operation. Since there is no need for this lock to be a spinlock,
convert it to a mutex instead.

Fixes: e6ea2d16fc61 ("net: stmmac: dwc-qos: Add Tegra186 support")
Reported-by: Jon Hunter 
Signed-off-by: Thierry Reding 
---
This applies on top of net-next.

 drivers/net/ethernet/stmicro/stmmac/stmmac.h  |  2 +-
 .../ethernet/stmicro/stmmac/stmmac_ethtool.c  | 12 +++
 .../net/ethernet/stmicro/stmmac/stmmac_main.c | 31 +--
 3 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h 
b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index 42fc76e76bf9..5a2570b8d540 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -121,7 +121,7 @@ struct stmmac_priv {
struct net_device *dev;
struct device *device;
struct mac_device_info *hw;
-   spinlock_t lock;
+   struct mutex lock;
 
/* RX Queue */
struct stmmac_rx_queue rx_queue[MTL_MAX_RX_QUEUES];
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 6d82b3ef5c3b..5710864fa809 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -390,9 +390,9 @@ stmmac_ethtool_set_link_ksettings(struct net_device *dev,
ADVERTISED_10baseT_Half |
ADVERTISED_10baseT_Full);
 
-   spin_lock(>lock);
+   mutex_lock(>lock);
stmmac_pcs_ctrl_ane(priv, priv->ioaddr, 1, priv->hw->ps, 0);
-   spin_unlock(>lock);
+   mutex_unlock(>lock);
 
return 0;
}
@@ -632,12 +632,12 @@ static void stmmac_get_wol(struct net_device *dev, struct 
ethtool_wolinfo *wol)
 {
struct stmmac_priv *priv = netdev_priv(dev);
 
-   spin_lock_irq(>lock);
+   mutex_lock(>lock);
if (device_can_wakeup(priv->device)) {
wol->supported = WAKE_MAGIC | WAKE_UCAST;
wol->wolopts = priv->wolopts;
}
-   spin_unlock_irq(>lock);
+   mutex_unlock(>lock);
 }
 
 static int stmmac_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
@@ -666,9 +666,9 @@ static int stmmac_set_wol(struct net_device *dev, struct 
ethtool_wolinfo *wol)
disable_irq_wake(priv->wol_irq);
}
 
-   spin_lock_irq(>lock);
+   mutex_lock(>lock);
priv->wolopts = wol->wolopts;
-   spin_unlock_irq(>lock);
+   mutex_unlock(>lock);
 
return 0;
 }
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d9dbe1355896..8cc63da79a80 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -381,7 +381,6 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 {
struct net_device *ndev = priv->dev;
int interface = priv->plat->interface;
-   unsigned long flags;
bool ret = false;
 
if ((interface != PHY_INTERFACE_MODE_MII) &&
@@ -408,7 +407,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
 * changed).
 * In that case the driver disable own timers.
 */
-   spin_lock_irqsave(>lock, flags);
+   mutex_lock(>lock);
if (priv->eee_active) {
netdev_dbg(priv->dev, "disable EEE\n");
del_timer_sync(>eee_ctrl_timer);
@@ -416,11 +415,11 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
tx_lpi_timer);
}
priv->eee_active = 0;
-   spin_unlock_irqrestore(>lock, flags);
+   mutex_unlock(>lock);
goto out;
}
/* Activate the EEE and start timers */
-   spin_lock_irqsave(>lock, flags);
+   mutex_lock(>lock);
if (!priv->eee_active) {
priv->eee_active = 1;
timer_setup(>eee_ctrl_timer,
@@ -435,7 +434,7 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
stmmac_set_eee_pls(priv, priv->hw, ndev->phydev->link);
 
ret = true;
-   spin_unlock_irqrestore(>lock, flags);
+   mutex_unlock(>lock);
 
netdev_dbg(priv->dev, "Energy-Efficient Ethernet 
initialized\n");
}
@@ -811,13 +810,12 @@ static void stmmac_adjust_link(struct net_device *dev)
 {
struct stmmac_priv *priv = netdev_priv(dev);
struct phy_device *phydev = dev->phydev;
-