From: "Hubert Wiśniewski" <hubert.wisniewski.25632@gmail.com>
To: "Alan Stern" <stern@rowland.harvard.edu>,
"Oleksij Rempel" <o.rempel@pengutronix.de>
Cc: "Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
<stable@vger.kernel.org>, <kernel@pengutronix.de>,
<linux-kernel@vger.kernel.org>, <netdev@vger.kernel.org>,
"Lukas Wunner" <lukas@wunner.de>,
"Russell King" <linux@armlinux.org.uk>,
"Xu Yang" <xu.yang_2@nxp.com>, <linux-usb@vger.kernel.org>
Subject: Re: [PATCH net v1 1/1] net: usb: asix: forbid runtime PM to avoid PM/MDIO + RTNL deadlock
Date: Wed, 17 Sep 2025 16:31:40 +0200 [thread overview]
Message-ID: <DCV5CKKQTTMV.GA825CXM0H9F@gmail.com> (raw)
In-Reply-To: <c94af0e9-dc67-432e-a853-e41bfa59e863@rowland.harvard.edu>
On Wed Sep 17, 2025 at 3:54 PM CEST, Alan Stern wrote:
> On Wed, Sep 17, 2025 at 11:54:57AM +0200, Oleksij Rempel wrote:
>> Forbid USB runtime PM (autosuspend) for AX88772* in bind.
>>
>> usbnet enables runtime PM by default in probe, so disabling it via the
>> usb_driver flag is ineffective. For AX88772B, autosuspend shows no
>> measurable power saving in my tests (no link partner, admin up/down).
>> The ~0.453 W -> ~0.248 W reduction on 6.1 comes from phylib powering
>> the PHY off on admin-down, not from USB autosuspend.
>>
>> With autosuspend active, resume paths may require calling phylink/phylib
>> (caller must hold RTNL) and doing MDIO I/O. Taking RTNL from a USB PM
>> resume can deadlock (RTNL may already be held), and MDIO can attempt a
>> runtime-wake while the USB PM lock is held. Given the lack of benefit
>> and poor test coverage (autosuspend is usually disabled by default in
>> distros), forbid runtime PM here to avoid these hazards.
>>
>> This affects only AX88772* devices (per-interface in bind). System
>> sleep/resume is unchanged.
>
>> @@ -919,6 +935,16 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
>> if (ret)
>> goto initphy_err;
>>
>> + /* Disable USB runtime PM (autosuspend) for this interface.
>> + * Rationale:
>> + * - No measurable power saving from autosuspend for this device.
>> + * - phylink/phylib calls require caller-held RTNL and do MDIO I/O,
>> + * which is unsafe from USB PM resume paths (possible RTNL already
>> + * held, USB PM lock held).
>> + * System suspend/resume is unaffected.
>> + */
>> + pm_runtime_forbid(&intf->dev);
>
> Are you aware that the action of pm_runtime_forbid() can be reversed by
> the user (by writing "auto" to the .../power/control sysfs file)?
I have tested this. With this patch, it seems that writing "auto" to
power/control has no effect -- power/runtime_status remains "active" and
the device does not get suspended. But maybe there is a way to force the
suspension anyway?
> To prevent the user from re-enabling runtime PM, you should call
> pm_runtime_get_noresume() (and then of course pm_runtime_put() or
> equivalent while unbinding).
>
> Alan Stern
next prev parent reply other threads:[~2025-09-17 14:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-17 9:54 [PATCH net v1 1/1] net: usb: asix: forbid runtime PM to avoid PM/MDIO + RTNL deadlock Oleksij Rempel
2025-09-17 10:10 ` Oliver Neukum
2025-09-17 11:52 ` Oleksij Rempel
2025-09-17 12:25 ` Oliver Neukum
2025-09-17 11:26 ` Hubert Wiśniewski
2025-09-17 13:54 ` Alan Stern
2025-09-17 14:31 ` Hubert Wiśniewski [this message]
2025-09-17 14:57 ` Alan Stern
2025-09-17 18:58 ` Lukas Wunner
2025-09-22 7:11 ` Oleksij Rempel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DCV5CKKQTTMV.GA825CXM0H9F@gmail.com \
--to=hubert.wisniewski.25632@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kernel@pengutronix.de \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=lukas@wunner.de \
--cc=m.szyprowski@samsung.com \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=xu.yang_2@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.