netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
@ 2022-03-05 20:47 Fabio Estevam
  2022-03-07 12:40 ` patchwork-bot+netdevbpf
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Fabio Estevam @ 2022-03-05 20:47 UTC (permalink / raw)
  To: kuba
  Cc: steve.glendinning, UNGLinuxDriver, fntoth, martyn.welch, andrew,
	netdev, linux-usb, marex, Fabio Estevam

From: Fabio Estevam <festevam@denx.de>

According to Documentation/driver-api/usb/URB.rst when a device
is unplugged usb_submit_urb() returns -ENODEV.

This error code propagates all the way up to usbnet_read_cmd() and
usbnet_write_cmd() calls inside the smsc95xx.c driver during
Ethernet cable unplug, unbind or reboot.

This causes the following errors to be shown on reboot, for example:

ci_hdrc ci_hdrc.1: remove, state 1
usb usb2: USB disconnect, device number 1
usb 2-1: USB disconnect, device number 2
usb 2-1.1: USB disconnect, device number 3
smsc95xx 2-1.1:1.0 eth1: unregister 'smsc95xx' usb-ci_hdrc.1-1.1, smsc95xx USB 2.0 Ethernet
smsc95xx 2-1.1:1.0 eth1: Failed to read reg index 0x00000114: -19
smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
smsc95xx 2-1.1:1.0 eth1: Failed to read reg index 0x00000114: -19
smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
smsc95xx 2-1.1:1.0 eth1: hardware isn't capable of remote wakeup
usb 2-1.4: USB disconnect, device number 4
ci_hdrc ci_hdrc.1: USB bus 2 deregistered
ci_hdrc ci_hdrc.0: remove, state 4
usb usb1: USB disconnect, device number 1
ci_hdrc ci_hdrc.0: USB bus 1 deregistered
imx2-wdt 30280000.watchdog: Device shutdown: Expect reboot!
reboot: Restarting system

Ignore the -ENODEV errors inside __smsc95xx_mdio_read() and
__smsc95xx_phy_wait_not_busy() and do not print error messages
when -ENODEV is returned.

Fixes: a049a30fc27c ("net: usb: Correct PHY handling of smsc95xx")
Signed-off-by: Fabio Estevam <festevam@denx.de>
---
Changes since v1:
- Added 'net' annotation - Andrew
- Added Fixes tag - Andrew
- Avoided undefined 'buf' behaviour in __smsc95xx_read_reg() - Andrew

 drivers/net/usb/smsc95xx.c | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index b17bff6a1015..e5b744851146 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -84,9 +84,10 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
 	ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
 		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 		 0, index, &buf, 4);
-	if (unlikely(ret < 0)) {
-		netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n",
-			    index, ret);
+	if (ret < 0) {
+		if (ret != -ENODEV)
+			netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n",
+				    index, ret);
 		return ret;
 	}
 
@@ -116,7 +117,7 @@ static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index,
 	ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT
 		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 		 0, index, &buf, 4);
-	if (unlikely(ret < 0))
+	if (ret < 0 && ret != -ENODEV)
 		netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n",
 			    index, ret);
 
@@ -159,6 +160,9 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev,
 	do {
 		ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
 		if (ret < 0) {
+			/* Ignore -ENODEV error during disconnect() */
+			if (ret == -ENODEV)
+				return 0;
 			netdev_warn(dev->net, "Error reading MII_ACCESS\n");
 			return ret;
 		}
@@ -194,7 +198,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx,
 	addr = mii_address_cmd(phy_id, idx, MII_READ_ | MII_BUSY_);
 	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
 	if (ret < 0) {
-		netdev_warn(dev->net, "Error writing MII_ADDR\n");
+		if (ret != -ENODEV)
+			netdev_warn(dev->net, "Error writing MII_ADDR\n");
 		goto done;
 	}
 
@@ -206,7 +211,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx,
 
 	ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
 	if (ret < 0) {
-		netdev_warn(dev->net, "Error reading MII_DATA\n");
+		if (ret != -ENODEV)
+			netdev_warn(dev->net, "Error reading MII_DATA\n");
 		goto done;
 	}
 
@@ -214,6 +220,10 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx,
 
 done:
 	mutex_unlock(&dev->phy_mutex);
+
+	/* Ignore -ENODEV error during disconnect() */
+	if (ret == -ENODEV)
+		return 0;
 	return ret;
 }
 
@@ -235,7 +245,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id,
 	val = regval;
 	ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
 	if (ret < 0) {
-		netdev_warn(dev->net, "Error writing MII_DATA\n");
+		if (ret != -ENODEV)
+			netdev_warn(dev->net, "Error writing MII_DATA\n");
 		goto done;
 	}
 
@@ -243,7 +254,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id,
 	addr = mii_address_cmd(phy_id, idx, MII_WRITE_ | MII_BUSY_);
 	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
 	if (ret < 0) {
-		netdev_warn(dev->net, "Error writing MII_ADDR\n");
+		if (ret != -ENODEV)
+			netdev_warn(dev->net, "Error writing MII_ADDR\n");
 		goto done;
 	}
 
-- 
2.25.1


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

* Re: [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
  2022-03-05 20:47 [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged Fabio Estevam
@ 2022-03-07 12:40 ` patchwork-bot+netdevbpf
  2022-03-09 13:32 ` (EXT) " Alexander Stein
  2022-03-09 14:02 ` Alexander Stein
  2 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-07 12:40 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: kuba, steve.glendinning, UNGLinuxDriver, fntoth, martyn.welch,
	andrew, netdev, linux-usb, marex, festevam

Hello:

This patch was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Sat,  5 Mar 2022 17:47:20 -0300 you wrote:
> From: Fabio Estevam <festevam@denx.de>
> 
> According to Documentation/driver-api/usb/URB.rst when a device
> is unplugged usb_submit_urb() returns -ENODEV.
> 
> This error code propagates all the way up to usbnet_read_cmd() and
> usbnet_write_cmd() calls inside the smsc95xx.c driver during
> Ethernet cable unplug, unbind or reboot.
> 
> [...]

Here is the summary with links:
  - [v2,net] smsc95xx: Ignore -ENODEV errors when device is unplugged
    https://git.kernel.org/netdev/net/c/c70c453abcbf

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

* Re: (EXT) [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
  2022-03-05 20:47 [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged Fabio Estevam
  2022-03-07 12:40 ` patchwork-bot+netdevbpf
@ 2022-03-09 13:32 ` Alexander Stein
  2022-03-09 14:02 ` Alexander Stein
  2 siblings, 0 replies; 6+ messages in thread
From: Alexander Stein @ 2022-03-09 13:32 UTC (permalink / raw)
  To: Fabio Estevam
  Cc: kuba, steve.glendinning, UNGLinuxDriver, fntoth, martyn.welch,
	andrew, netdev, linux-usb, marex, Fabio Estevam

Hello Fabio,

Am Samstag, 5. März 2022, 21:47:20 CET schrieb Fabio Estevam:
> From: Fabio Estevam <festevam@denx.de>
> 
> According to Documentation/driver-api/usb/URB.rst when a device
> is unplugged usb_submit_urb() returns -ENODEV.
> 
> This error code propagates all the way up to usbnet_read_cmd() and
> usbnet_write_cmd() calls inside the smsc95xx.c driver during
> Ethernet cable unplug, unbind or reboot.
> 
> This causes the following errors to be shown on reboot, for example:
> 
> ci_hdrc ci_hdrc.1: remove, state 1
> usb usb2: USB disconnect, device number 1
> usb 2-1: USB disconnect, device number 2
> usb 2-1.1: USB disconnect, device number 3
> smsc95xx 2-1.1:1.0 eth1: unregister 'smsc95xx' usb-ci_hdrc.1-1.1, smsc95xx
> USB 2.0 Ethernet smsc95xx 2-1.1:1.0 eth1: Failed to read reg index
> 0x00000114: -19
> smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
> smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
> smsc95xx 2-1.1:1.0 eth1: Failed to read reg index 0x00000114: -19
> smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
> smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
> smsc95xx 2-1.1:1.0 eth1: hardware isn't capable of remote wakeup
> usb 2-1.4: USB disconnect, device number 4
> ci_hdrc ci_hdrc.1: USB bus 2 deregistered
> ci_hdrc ci_hdrc.0: remove, state 4
> usb usb1: USB disconnect, device number 1
> ci_hdrc ci_hdrc.0: USB bus 1 deregistered
> imx2-wdt 30280000.watchdog: Device shutdown: Expect reboot!
> reboot: Restarting system
> 
> Ignore the -ENODEV errors inside __smsc95xx_mdio_read() and
> __smsc95xx_phy_wait_not_busy() and do not print error messages
> when -ENODEV is returned.

Just FYI, this even fixed a suspend problem on a 5.10 imx downstream kernel 
which had similar symptoms. Thanks a lot.

Regards
Alexander

> Fixes: a049a30fc27c ("net: usb: Correct PHY handling of smsc95xx")
> Signed-off-by: Fabio Estevam <festevam@denx.de>
> ---
> Changes since v1:
> - Added 'net' annotation - Andrew
> - Added Fixes tag - Andrew
> - Avoided undefined 'buf' behaviour in __smsc95xx_read_reg() - Andrew
> 
>  drivers/net/usb/smsc95xx.c | 28 ++++++++++++++++++++--------
>  1 file changed, 20 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
> index b17bff6a1015..e5b744851146 100644
> --- a/drivers/net/usb/smsc95xx.c
> +++ b/drivers/net/usb/smsc95xx.c
> @@ -84,9 +84,10 @@ static int __must_check __smsc95xx_read_reg(struct usbnet
> *dev, u32 index, ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
> 
>  		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
> 
>  		 0, index, &buf, 4);
> -	if (unlikely(ret < 0)) {
> -		netdev_warn(dev->net, "Failed to read reg index 0x%08x: 
%d\n",
> -			    index, ret);
> +	if (ret < 0) {
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Failed to read reg 
index 0x%08x: %d\n",
> +				    index, ret);
>  		return ret;
>  	}
> 
> @@ -116,7 +117,7 @@ static int __must_check __smsc95xx_write_reg(struct
> usbnet *dev, u32 index, ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
> USB_DIR_OUT
> 
>  		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
> 
>  		 0, index, &buf, 4);
> -	if (unlikely(ret < 0))
> +	if (ret < 0 && ret != -ENODEV)
>  		netdev_warn(dev->net, "Failed to write reg index 0x%08x: 
%d\n",
>  			    index, ret);
> 
> @@ -159,6 +160,9 @@ static int __must_check
> __smsc95xx_phy_wait_not_busy(struct usbnet *dev, do {
>  		ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
>  		if (ret < 0) {
> +			/* Ignore -ENODEV error during disconnect() 
*/
> +			if (ret == -ENODEV)
> +				return 0;
>  			netdev_warn(dev->net, "Error reading 
MII_ACCESS\n");
>  			return ret;
>  		}
> @@ -194,7 +198,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx, addr = mii_address_cmd(phy_id, idx, MII_READ_ |
> MII_BUSY_);
>  	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_ADDR\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_ADDR\n");
>  		goto done;
>  	}
> 
> @@ -206,7 +211,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx,
> 
>  	ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error reading MII_DATA\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error reading 
MII_DATA\n");
>  		goto done;
>  	}
> 
> @@ -214,6 +220,10 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx,
> 
>  done:
>  	mutex_unlock(&dev->phy_mutex);
> +
> +	/* Ignore -ENODEV error during disconnect() */
> +	if (ret == -ENODEV)
> +		return 0;
>  	return ret;
>  }
> 
> @@ -235,7 +245,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev,
> int phy_id, val = regval;
>  	ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_DATA\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_DATA\n");
>  		goto done;
>  	}
> 
> @@ -243,7 +254,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev,
> int phy_id, addr = mii_address_cmd(phy_id, idx, MII_WRITE_ | MII_BUSY_);
>  	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_ADDR\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_ADDR\n");
>  		goto done;
>  	}





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

* Re: (EXT) [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
  2022-03-05 20:47 [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged Fabio Estevam
  2022-03-07 12:40 ` patchwork-bot+netdevbpf
  2022-03-09 13:32 ` (EXT) " Alexander Stein
@ 2022-03-09 14:02 ` Alexander Stein
  2022-03-09 16:41   ` Jakub Kicinski
  2022-03-09 16:50   ` Fabio Estevam
  2 siblings, 2 replies; 6+ messages in thread
From: Alexander Stein @ 2022-03-09 14:02 UTC (permalink / raw)
  To: kuba, Fabio Estevam
  Cc: steve.glendinning, UNGLinuxDriver, fntoth, martyn.welch, andrew,
	netdev, linux-usb, marex, Fabio Estevam

Am Samstag, 5. März 2022, 21:47:20 CET schrieb Fabio Estevam:
> From: Fabio Estevam <festevam@denx.de>
> 
> According to Documentation/driver-api/usb/URB.rst when a device
> is unplugged usb_submit_urb() returns -ENODEV.
> 
> This error code propagates all the way up to usbnet_read_cmd() and
> usbnet_write_cmd() calls inside the smsc95xx.c driver during
> Ethernet cable unplug, unbind or reboot.
> 
> This causes the following errors to be shown on reboot, for example:
> 
> ci_hdrc ci_hdrc.1: remove, state 1
> usb usb2: USB disconnect, device number 1
> usb 2-1: USB disconnect, device number 2
> usb 2-1.1: USB disconnect, device number 3
> smsc95xx 2-1.1:1.0 eth1: unregister 'smsc95xx' usb-ci_hdrc.1-1.1, smsc95xx
> USB 2.0 Ethernet smsc95xx 2-1.1:1.0 eth1: Failed to read reg index
> 0x00000114: -19
> smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
> smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
> smsc95xx 2-1.1:1.0 eth1: Failed to read reg index 0x00000114: -19
> smsc95xx 2-1.1:1.0 eth1: Error reading MII_ACCESS
> smsc95xx 2-1.1:1.0 eth1: __smsc95xx_mdio_read: MII is busy
> smsc95xx 2-1.1:1.0 eth1: hardware isn't capable of remote wakeup
> usb 2-1.4: USB disconnect, device number 4
> ci_hdrc ci_hdrc.1: USB bus 2 deregistered
> ci_hdrc ci_hdrc.0: remove, state 4
> usb usb1: USB disconnect, device number 1
> ci_hdrc ci_hdrc.0: USB bus 1 deregistered
> imx2-wdt 30280000.watchdog: Device shutdown: Expect reboot!
> reboot: Restarting system
> 
> Ignore the -ENODEV errors inside __smsc95xx_mdio_read() and
> __smsc95xx_phy_wait_not_busy() and do not print error messages
> when -ENODEV is returned.
> 
> Fixes: a049a30fc27c ("net: usb: Correct PHY handling of smsc95xx")
> Signed-off-by: Fabio Estevam <festevam@denx.de>

Oh BTW, is this queued for stable? Which versions? If 'Fixes: a049a30fc27c 
("net: usb: Correct PHY handling of smsc95xx")' is the indicator, it's not 
enough. This errors also shows up on v5.15.27 and is fixed with this patch.

Regards,
Alexander

> ---
> Changes since v1:
> - Added 'net' annotation - Andrew
> - Added Fixes tag - Andrew
> - Avoided undefined 'buf' behaviour in __smsc95xx_read_reg() - Andrew
> 
>  drivers/net/usb/smsc95xx.c | 28 ++++++++++++++++++++--------
>  1 file changed, 20 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
> index b17bff6a1015..e5b744851146 100644
> --- a/drivers/net/usb/smsc95xx.c
> +++ b/drivers/net/usb/smsc95xx.c
> @@ -84,9 +84,10 @@ static int __must_check __smsc95xx_read_reg(struct usbnet
> *dev, u32 index, ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
> 
>  		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
> 
>  		 0, index, &buf, 4);
> -	if (unlikely(ret < 0)) {
> -		netdev_warn(dev->net, "Failed to read reg index 0x%08x: 
%d\n",
> -			    index, ret);
> +	if (ret < 0) {
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Failed to read reg 
index 0x%08x: %d\n",
> +				    index, ret);
>  		return ret;
>  	}
> 
> @@ -116,7 +117,7 @@ static int __must_check __smsc95xx_write_reg(struct
> usbnet *dev, u32 index, ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
> USB_DIR_OUT
> 
>  		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
> 
>  		 0, index, &buf, 4);
> -	if (unlikely(ret < 0))
> +	if (ret < 0 && ret != -ENODEV)
>  		netdev_warn(dev->net, "Failed to write reg index 0x%08x: 
%d\n",
>  			    index, ret);
> 
> @@ -159,6 +160,9 @@ static int __must_check
> __smsc95xx_phy_wait_not_busy(struct usbnet *dev, do {
>  		ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
>  		if (ret < 0) {
> +			/* Ignore -ENODEV error during disconnect() 
*/
> +			if (ret == -ENODEV)
> +				return 0;
>  			netdev_warn(dev->net, "Error reading 
MII_ACCESS\n");
>  			return ret;
>  		}
> @@ -194,7 +198,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx, addr = mii_address_cmd(phy_id, idx, MII_READ_ |
> MII_BUSY_);
>  	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_ADDR\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_ADDR\n");
>  		goto done;
>  	}
> 
> @@ -206,7 +211,8 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx,
> 
>  	ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error reading MII_DATA\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error reading 
MII_DATA\n");
>  		goto done;
>  	}
> 
> @@ -214,6 +220,10 @@ static int __smsc95xx_mdio_read(struct usbnet *dev, int
> phy_id, int idx,
> 
>  done:
>  	mutex_unlock(&dev->phy_mutex);
> +
> +	/* Ignore -ENODEV error during disconnect() */
> +	if (ret == -ENODEV)
> +		return 0;
>  	return ret;
>  }
> 
> @@ -235,7 +245,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev,
> int phy_id, val = regval;
>  	ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_DATA\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_DATA\n");
>  		goto done;
>  	}
> 
> @@ -243,7 +254,8 @@ static void __smsc95xx_mdio_write(struct usbnet *dev,
> int phy_id, addr = mii_address_cmd(phy_id, idx, MII_WRITE_ | MII_BUSY_);
>  	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
>  	if (ret < 0) {
> -		netdev_warn(dev->net, "Error writing MII_ADDR\n");
> +		if (ret != -ENODEV)
> +			netdev_warn(dev->net, "Error writing 
MII_ADDR\n");
>  		goto done;
>  	}





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

* Re: (EXT) [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
  2022-03-09 14:02 ` Alexander Stein
@ 2022-03-09 16:41   ` Jakub Kicinski
  2022-03-09 16:50   ` Fabio Estevam
  1 sibling, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2022-03-09 16:41 UTC (permalink / raw)
  To: Alexander Stein
  Cc: Fabio Estevam, steve.glendinning, UNGLinuxDriver, fntoth,
	martyn.welch, andrew, netdev, linux-usb, marex, Fabio Estevam

On Wed, 09 Mar 2022 15:02:21 +0100 Alexander Stein wrote:
> > Fixes: a049a30fc27c ("net: usb: Correct PHY handling of smsc95xx")
> > Signed-off-by: Fabio Estevam <festevam@denx.de>  
> 
> Oh BTW, is this queued for stable? Which versions? If 'Fixes: a049a30fc27c 
> ("net: usb: Correct PHY handling of smsc95xx")' is the indicator, it's not 
> enough. This errors also shows up on v5.15.27 and is fixed with this patch.

The stable machinery will most likely suck it in automatically.
The patch should reach Linus tomorrow evening if you want to ping 
Greg and make sure.

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

* Re: (EXT) [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged
  2022-03-09 14:02 ` Alexander Stein
  2022-03-09 16:41   ` Jakub Kicinski
@ 2022-03-09 16:50   ` Fabio Estevam
  1 sibling, 0 replies; 6+ messages in thread
From: Fabio Estevam @ 2022-03-09 16:50 UTC (permalink / raw)
  To: Alexander Stein
  Cc: Jakub Kicinski, Steve Glendinning, UNGLinuxDriver, fntoth,
	Martyn Welch, Andrew Lunn, netdev, USB list, Marek Vasut,
	Fabio Estevam

Hi Alexander,

On Wed, Mar 9, 2022 at 11:02 AM Alexander Stein
<alexander.stein@ew.tq-group.com> wrote:

> Oh BTW, is this queued for stable? Which versions? If 'Fixes: a049a30fc27c
> ("net: usb: Correct PHY handling of smsc95xx")' is the indicator, it's not
> enough. This errors also shows up on v5.15.27 and is fixed with this patch.

("net: usb: Correct PHY handling of smsc95xx")' is also present in 5.15:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/drivers/net/usb/smsc95xx.c?h=v5.15.27

so the fix should land in 5.15 too.

For 5.10, when the fix reaches Linus' tree, then I will ping
Dave/Jakub/Greg to apply the 3 latest smsc95xx commits
to 5.10 stable tree:
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/log/drivers/net/usb/smsc95xx.c?id=c70c453abcbf

I have been running 5.10 + the 3 commits above and no more smsc95xx
errors are seen.

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

end of thread, other threads:[~2022-03-09 17:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-05 20:47 [PATCH v2 net] smsc95xx: Ignore -ENODEV errors when device is unplugged Fabio Estevam
2022-03-07 12:40 ` patchwork-bot+netdevbpf
2022-03-09 13:32 ` (EXT) " Alexander Stein
2022-03-09 14:02 ` Alexander Stein
2022-03-09 16:41   ` Jakub Kicinski
2022-03-09 16:50   ` Fabio Estevam

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).