linux/drivers/net/usb
Oleksij Rempel 3d3c4cd5c6 net: usb: asix: hold PM usage ref to avoid PM/MDIO + RTNL deadlock
Prevent USB runtime PM (autosuspend) for AX88772* in bind.

usbnet enables runtime PM (autosuspend) by default, so disabling it via
the usb_driver flag is ineffective. On AX88772B, autosuspend shows no
measurable power saving with current driver (no link partner, admin
up/down). The ~0.453 W -> ~0.248 W drop on v6.1 comes from phylib powering
the PHY off on admin-down, not from USB autosuspend.

The real hazard is that with runtime PM enabled, ndo_open() (under RTNL)
may synchronously trigger autoresume (usb_autopm_get_interface()) into
asix_resume() while the USB PM lock is held. Resume paths then invoke
phylink/phylib and MDIO, which also expect RTNL, leading to possible
deadlocks or PM lock vs MDIO wake issues.

To avoid this, keep the device runtime-PM active by taking a usage
reference in ax88772_bind() and dropping it in unbind(). A non-zero PM
usage count blocks runtime suspend regardless of userspace policy
(.../power/control - pm_runtime_allow/forbid), making this approach
robust against sysfs overrides.

Holding a runtime-PM usage ref does not affect system-wide suspend;
system sleep/resume callbacks continue to run as before.

Fixes: 4a2c7217cd ("net: usb: asix: ax88772: manage PHY PM from MAC")
Reported-by: Hubert Wiśniewski <hubert.wisniewski.25632@gmail.com>
Closes: https://lore.kernel.org/all/DCGHG5UJT9G3.2K1GHFZ3H87T0@gmail.com
Tested-by: Hubert Wiśniewski <hubert.wisniewski.25632@gmail.com>
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Closes: https://lore.kernel.org/all/b5ea8296-f981-445d-a09a-2f389d7f6fdd@samsung.com
Cc: stable@vger.kernel.org
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20251005081203.3067982-1-o.rempel@pengutronix.de
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2025-10-07 12:35:37 +02:00
..
Kconfig net: usb: lan78xx: add support for generic net selftests via ethtool 2025-08-25 16:22:19 -07:00
Makefile
aqc111.c net: usb: aqc111: debug info before sanitation 2025-05-30 12:14:53 +01:00
aqc111.h
asix.h usbnet: asix AX88772: leave the carrier control to phylink 2025-04-10 18:42:50 -07:00
asix_common.c usbnet: asix AX88772: leave the carrier control to phylink 2025-04-10 18:42:50 -07:00
asix_devices.c net: usb: asix: hold PM usage ref to avoid PM/MDIO + RTNL deadlock 2025-10-07 12:35:37 +02:00
ax88172a.c net: usb: asix: ax88772: Increase phy_name size 2025-03-25 14:35:32 -07:00
ax88179_178a.c net: usb: ax88179_178a: improve link status logs 2024-06-24 10:15:09 +01:00
catc.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
cdc-phonet.c
cdc_eem.c
cdc_ether.c cdc_ether|r8152: ThinkPad Hybrid USB-C/A Dock quirk 2025-03-17 21:25:25 +01:00
cdc_mbim.c net: usb: cdc_mbim: fix Telit Cinterion FE990A name 2025-02-28 17:55:02 -08:00
cdc_ncm.c cdc_ncm: Flag Intel OEM version of Fibocom L850-GL as WWAN 2025-08-19 17:16:37 -07:00
cdc_subset.c
ch9200.c net: ch9200: fix uninitialised access during mii_nway_restart 2025-05-28 19:10:04 -07:00
cx82310_eth.c
dm9601.c net: usb: dm9601: fix wrong return value in dm9601_mdio_read 2024-02-27 18:17:23 -08:00
gl620a.c usbnet: gl620a: fix endpoint checking in genelink_bind() 2025-02-27 11:35:10 +01:00
hso.c net: hso: constify the struct device_type usage 2024-02-21 09:45:23 +00:00
huawei_cdc_ncm.c
int51x1.c
ipheth.c usbnet: ipheth: document scope of NCM implementation 2025-01-28 12:16:32 +01:00
kalmia.c
kaweth.c
lan78xx.c net: usb: lan78xx: Fix lost EEPROM read timeout error(-ETIMEDOUT) in lan78xx_read_raw_eeprom 2025-10-03 10:15:35 -07:00
lan78xx.h
lg-vl600.c
mcs7830.c
net1080.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
pegasus.c
pegasus.h
plusb.c
qmi_wwan.c net: usb: qmi_wwan: add Telit Cinterion LE910C4-WWX new compositions 2025-08-26 17:08:42 -07:00
r8152.c net: usb: r8152: Add device ID for TP-Link UE200 2025-06-10 14:41:43 -07:00
r8153_ecm.c cdc_ether|r8152: ThinkPad Hybrid USB-C/A Dock quirk 2025-03-17 21:25:25 +01:00
rndis_host.c Revert "rndis_host: Flag RNDIS modems as WWAN devices" 2025-04-25 18:46:13 -07:00
rtl8150.c net: usb: Remove disruptive netif_wake_queue in rtl8150_set_multicast 2025-09-26 15:11:37 -07:00
sierra_net.c usb: net: sierra: check for no status endpoint 2025-07-15 16:02:13 -07:00
smsc75xx.c net: usb: remove unused structs 'usb_context' 2024-05-28 15:24:34 +02:00
smsc75xx.h
smsc95xx.c net: usb: smsc95xx: add support for ethtool pause parameters 2025-07-21 17:42:12 -07:00
smsc95xx.h
sr9700.c net: usb: sr9700: only store little-endian values in __le16 variable 2024-10-17 18:09:13 -05:00
sr9700.h
sr9800.c sr9800: Add check for usbnet_get_endpoints 2024-03-06 20:33:01 -08:00
sr9800.h
usbnet.c net: usbnet: Fix the wrong netif_carrier_on() call 2025-08-06 04:39:42 +03:00
zaurus.c