linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
@ 2023-04-06 10:04 louts
  2023-04-08  2:57 ` Jakub Kicinski
  0 siblings, 1 reply; 9+ messages in thread
From: louts @ 2023-04-06 10:04 UTC (permalink / raw)
  To: davem
  Cc: alexandre.torgue, peppe.cavallaro, joabreu, edumazet, kuba,
	pabeni, mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, louts

The system hang because of dsa_tag_8021q_port_setup() callbcak
stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
cailing pm_runtime_put() disabled the clock when check the stmmac
dirver.

First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
resume/suspend is active.

Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
The system is hanged for the stmmac_vlan_rx_add_vid()  accesses its
registers after stmmac's clock is closed.

I would suggest adding the pm_runtime_resume_and_get() to the
stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
while in use.

Signed-off-by: louts <rocklouts@sina.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d1a7cf4567bc..91d719ebdd97 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -6191,6 +6191,10 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	bool is_double = false;
 	int ret;
 
+	ret = pm_runtime_resume_and_get(priv->device);
+	if (ret < 0)
+		return ret;
+
 	if (be16_to_cpu(proto) == ETH_P_8021AD)
 		is_double = true;
 
@@ -6198,16 +6202,19 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	ret = stmmac_vlan_update(priv, is_double);
 	if (ret) {
 		clear_bit(vid, priv->active_vlans);
-		return ret;
+		goto update_vlan_error;
 	}
 
 	if (priv->hw->num_vlan) {
 		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
 		if (ret)
-			return ret;
+			goto add_vlan_error;
 	}
+update_vlan_error:
+add_vlan_error:
+	pm_runtime_put(priv->device);
 
-	return 0;
+	return ret;
 }
 
 static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
@ 2023-04-07 16:15 louts
  0 siblings, 0 replies; 9+ messages in thread
From: louts @ 2023-04-07 16:15 UTC (permalink / raw)
  To: davem
  Cc: alexandre.torgue, peppe.cavallaro, joabreu, edumazet, kuba,
	pabeni, mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, louts

The system hang because of dsa_tag_8021q_port_setup() callbcak
stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
cailing pm_runtime_put() disabled the clock when check the stmmac
dirver.

First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
resume/suspend is active.

Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
The system is hanged for the stmmac_vlan_rx_add_vid()  accesses its
registers after stmmac's clock is closed.

I would suggest adding the pm_runtime_resume_and_get() to the
stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
while in use.

Signed-off-by: louts <rocklouts@sina.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d1a7cf4567bc..91d719ebdd97 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -6191,6 +6191,10 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	bool is_double = false;
 	int ret;
 
+	ret = pm_runtime_resume_and_get(priv->device);
+	if (ret < 0)
+		return ret;
+
 	if (be16_to_cpu(proto) == ETH_P_8021AD)
 		is_double = true;
 
@@ -6198,16 +6202,19 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	ret = stmmac_vlan_update(priv, is_double);
 	if (ret) {
 		clear_bit(vid, priv->active_vlans);
-		return ret;
+		goto update_vlan_error;
 	}
 
 	if (priv->hw->num_vlan) {
 		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
 		if (ret)
-			return ret;
+			goto add_vlan_error;
 	}
+update_vlan_error:
+add_vlan_error:
+	pm_runtime_put(priv->device);
 
-	return 0;
+	return ret;
 }
 
 static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-06 10:04 [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports louts
@ 2023-04-08  2:57 ` Jakub Kicinski
  2023-04-08 15:58   ` [PATCH] net: stmmac:fix " Yan Wang
                     ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Jakub Kicinski @ 2023-04-08  2:57 UTC (permalink / raw)
  To: louts
  Cc: davem, alexandre.torgue, peppe.cavallaro, joabreu, edumazet,
	pabeni, mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel

On Thu,  6 Apr 2023 18:04:37 +0800 louts wrote:
> The system hang because of dsa_tag_8021q_port_setup() callbcak
> stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
> cailing pm_runtime_put() disabled the clock when check the stmmac
> dirver.
> 
> First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
> resume/suspend is active.
> 
> Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
> will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
> The system is hanged for the stmmac_vlan_rx_add_vid()  accesses its
> registers after stmmac's clock is closed.
> 
> I would suggest adding the pm_runtime_resume_and_get() to the
> stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
> while in use.
> 
> Signed-off-by: louts <rocklouts@sina.com>

Is that your full name? If your name is not in the Latin alphabet
feel free to put it in brackets after the Latin version, e.g.:

Signed-off-by: John (якесь ім'я) <john@bla.abc>

> @@ -6198,16 +6202,19 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
>  	ret = stmmac_vlan_update(priv, is_double);
>  	if (ret) {
>  		clear_bit(vid, priv->active_vlans);
> -		return ret;
> +		goto update_vlan_error;
>  	}
>  
>  	if (priv->hw->num_vlan) {
>  		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
>  		if (ret)
> -			return ret;
> +			goto add_vlan_error;
>  	}
> +update_vlan_error:
> +add_vlan_error:

Name the labels after the target please.

err_pm_put:

> +	pm_runtime_put(priv->device);
>  
> -	return 0;
> +	return ret;

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH] net: stmmac:fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-07 16:42 [net] " louts
@ 2023-04-08 15:09 ` Yan Wang
  0 siblings, 0 replies; 9+ messages in thread
From: Yan Wang @ 2023-04-08 15:09 UTC (permalink / raw)
  To: kuba, davem
  Cc: alexandre.torgue, peppe.cavallaro, joabreu, edumazet, pabeni,
	mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, Yan Wang

The system hang because of dsa_tag_8021q_port_setup() callbcak
stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
cailing pm_runtime_put() disabled the clock when check the stmmac
dirver.

First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
resume/suspend is active.

Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
The system is hanged for the stmmac_vlan_rx_add_vid() accesses its
registers after stmmac's clock is closed.

I would suggest adding the pm_runtime_resume_and_get() to the
stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
while in use.

Signed-off-by: Yan Wang <rocklouts@sina.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d1a7cf4567bc..1bfbd05497b8 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -6191,6 +6191,10 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	bool is_double = false;
 	int ret;
 
+	ret = pm_runtime_resume_and_get(priv->device);
+	if (ret < 0)
+		return ret;
+
 	if (be16_to_cpu(proto) == ETH_P_8021AD)
 		is_double = true;
 
@@ -6198,16 +6202,18 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	ret = stmmac_vlan_update(priv, is_double);
 	if (ret) {
 		clear_bit(vid, priv->active_vlans);
-		return ret;
+		goto err_pm_put;
 	}
 
 	if (priv->hw->num_vlan) {
 		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
 		if (ret)
-			return ret;
+			goto err_pm_put;
 	}
+err_pm_put:
+	pm_runtime_put(priv->device);
 
-	return 0;
+	return ret;
 }
 
 static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH] net: stmmac:fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-08  2:57 ` Jakub Kicinski
@ 2023-04-08 15:58   ` Yan Wang
  2023-04-11  0:32     ` Jakub Kicinski
  2023-04-08 18:09   ` [PATCH] net: stmmac: fix " Yan Wang
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Yan Wang @ 2023-04-08 15:58 UTC (permalink / raw)
  To: kuba, davem
  Cc: alexandre.torgue, peppe.cavallaro, joabreu, edumazet, pabeni,
	mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, Yan Wang

The system hang because of dsa_tag_8021q_port_setup() callbcak
stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
cailing pm_runtime_put() disabled the clock when check the stmmac
dirver.

First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
resume/suspend is active.

Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
The system is hanged for the stmmac_vlan_rx_add_vid() accesses its
registers after stmmac's clock is closed.

I would suggest adding the pm_runtime_resume_and_get() to the
stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
while in use.

Signed-off-by: Yan Wang <rocklouts@sina.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d1a7cf4567bc..1bfbd05497b8 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -6191,6 +6191,10 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	bool is_double = false;
 	int ret;
 
+	ret = pm_runtime_resume_and_get(priv->device);
+	if (ret < 0)
+		return ret;
+
 	if (be16_to_cpu(proto) == ETH_P_8021AD)
 		is_double = true;
 
@@ -6198,16 +6202,18 @@ static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid
 	ret = stmmac_vlan_update(priv, is_double);
 	if (ret) {
 		clear_bit(vid, priv->active_vlans);
-		return ret;
+		goto err_pm_put;
 	}
 
 	if (priv->hw->num_vlan) {
 		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
 		if (ret)
-			return ret;
+			goto err_pm_put;
 	}
+err_pm_put:
+	pm_runtime_put(priv->device);
 
-	return 0;
+	return ret;
 }
 
 static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-08  2:57 ` Jakub Kicinski
  2023-04-08 15:58   ` [PATCH] net: stmmac:fix " Yan Wang
@ 2023-04-08 18:09   ` Yan Wang
  2023-04-08 18:13   ` Yan Wang
  2023-04-10  7:20   ` Yan Wang
  3 siblings, 0 replies; 9+ messages in thread
From: Yan Wang @ 2023-04-08 18:09 UTC (permalink / raw)
  To: kuba
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu, David S. Miller,
	Eric Dumazet, Paolo Abeni, Maxime Coquelin, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel

Hi,Jakub

So sorry.

My name is Yan Wang, this is my full name.I have sent you the new patch and modified the signature.  

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-08  2:57 ` Jakub Kicinski
  2023-04-08 15:58   ` [PATCH] net: stmmac:fix " Yan Wang
  2023-04-08 18:09   ` [PATCH] net: stmmac: fix " Yan Wang
@ 2023-04-08 18:13   ` Yan Wang
  2023-04-10  7:20   ` Yan Wang
  3 siblings, 0 replies; 9+ messages in thread
From: Yan Wang @ 2023-04-08 18:13 UTC (permalink / raw)
  To: kuba
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu, David S. Miller,
	Eric Dumazet, Paolo Abeni, Maxime Coquelin, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel

Hi,Jakub

So sorry.

My name is Yan Wang, this is my full name.I have sent you the new patch and modified the signature.  

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-08  2:57 ` Jakub Kicinski
                     ` (2 preceding siblings ...)
  2023-04-08 18:13   ` Yan Wang
@ 2023-04-10  7:20   ` Yan Wang
  3 siblings, 0 replies; 9+ messages in thread
From: Yan Wang @ 2023-04-10  7:20 UTC (permalink / raw)
  To: kuba
  Cc: Giuseppe Cavallaro, Alexandre Torgue, Jose Abreu, David S. Miller,
	Eric Dumazet, Paolo Abeni, Maxime Coquelin, netdev, linux-stm32,
	linux-arm-kernel, linux-kernel

On Fri, 7 Apr 2023 19:57:30 -0700 Jakub Kicinski wrote:
>Is that your full name? If your name is not in the Latin alphabet
>feel free to put it in brackets after the Latin version, e.g.:
>
>Signed-off-by: John (якесь ім'я) <john@bla.abc>
Thanks for the pointer.I'm awfully sorry,my full name is Yan Wang,
I have modify Signed-off-by.
>Name the labels after the target please.
>
>err_pm_put:
OK, the label fixed, I resend a new patch on 20230408155823.12834-1-rocklouts@sina.com.

Thanks.

 




_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH] net: stmmac:fix system hang when setting up standalone tag_8021q VLAN for DSA ports
  2023-04-08 15:58   ` [PATCH] net: stmmac:fix " Yan Wang
@ 2023-04-11  0:32     ` Jakub Kicinski
  0 siblings, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2023-04-11  0:32 UTC (permalink / raw)
  To: Yan Wang
  Cc: davem, alexandre.torgue, peppe.cavallaro, joabreu, edumazet,
	pabeni, mcoquelin.stm32, netdev, linux-stm32, linux-arm-kernel,
	linux-kernel, John 'Warthog9' Hawley

On Sat,  8 Apr 2023 23:58:23 +0800 Yan Wang wrote:
> The system hang because of dsa_tag_8021q_port_setup() callbcak
> stmmac_vlan_rx_add_vid().I found in stmmac_drv_probe() that
> cailing pm_runtime_put() disabled the clock when check the stmmac
> dirver.
> 
> First, when the kernel is compiled with CONFIG_PM=y,The stmmac's
> resume/suspend is active.
> 
> Secondly,stmmac as DSA master,the dsa_tag_8021q_port_setup() function
> will callback stmmac_vlan_rx_add_vid when DSA dirver starts. However,
> The system is hanged for the stmmac_vlan_rx_add_vid() accesses its
> registers after stmmac's clock is closed.
> 
> I would suggest adding the pm_runtime_resume_and_get() to the
> stmmac_vlan_rx_add_vid().This guarantees that resuming clock output
> while in use.

Hm, the patch is not making it to the @vger list, even tho it did make
it to lore.kernel.org, it seems. I couldn't spot anything wrong with it.
Could you try sending it to testing@vger.kernel.org and contacting
John (added to CC) who administers vger.kernel.org, to figure out
what's wrong?

Based on this conversation:
https://lore.kernel.org/all/9539b880-642d-9ac5-ccfa-2b237548f4fc@kernel.org/

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, other threads:[~2023-04-11  0:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-06 10:04 [PATCH] net: stmmac: fix system hang when setting up standalone tag_8021q VLAN for DSA ports louts
2023-04-08  2:57 ` Jakub Kicinski
2023-04-08 15:58   ` [PATCH] net: stmmac:fix " Yan Wang
2023-04-11  0:32     ` Jakub Kicinski
2023-04-08 18:09   ` [PATCH] net: stmmac: fix " Yan Wang
2023-04-08 18:13   ` Yan Wang
2023-04-10  7:20   ` Yan Wang
  -- strict thread matches above, loose matches on Subject: below --
2023-04-07 16:15 louts
2023-04-07 16:42 [net] " louts
2023-04-08 15:09 ` [PATCH] net: stmmac:fix " Yan Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).