netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Florian Fainelli <f.fainelli@gmail.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Ioana Ciornei" <ciorneiioana@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Jakub Kicinski <kuba@kernel.org>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	Alexandru Ardelean <alexandru.ardelean@analog.com>,
	Andre Edich <andre.edich@microchip.com>,
	Antoine Tenart <atenart@kernel.org>,
	Baruch Siach <baruch@tkos.co.il>,
	Christophe Leroy <christophe.leroy@c-s.fr>,
	Divya Koppera <Divya.Koppera@microchip.com>,
	Hauke Mehrtens <hauke@hauke-m.de>,
	Jerome Brunet <jbrunet@baylibre.com>,
	Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Marco Felsch <m.felsch@pengutronix.de>,
	Marek Vasut <marex@denx.de>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Mathias Kresin <dev@kresin.me>,
	Maxim Kochetkov <fido_max@inbox.ru>,
	Michael Walle <michael@walle.cc>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Nisar Sayed <Nisar.Sayed@microchip.com>,
	Oleksij Rempel <o.rempel@pengutronix.de>,
	Philippe Schenker <philippe.schenker@toradex.com>,
	Willy Liu <willy.liu@realtek.com>,
	Yuiko Oshino <yuiko.oshino@microchip.com>
Subject: Re: [PATCH net-next v2 02/19] net: phy: add a shutdown procedure
Date: Thu, 3 Aug 2023 11:24:04 -0700	[thread overview]
Message-ID: <7e365fa4-7a50-382c-5a99-288a417a82a7@gmail.com> (raw)
In-Reply-To: <20230803181640.yzxsk2xphwryxww4@pengutronix.de>

On 8/3/23 11:16, Uwe Kleine-König wrote:
> Hello,
> 
> this patch became commit e2f016cf775129c050d6c79483073423db15c79a and is
> contained in v5.11-rc1.
> 
> It broke wake-on-lan on my NAS (an ARM machine with an Armada 370 SoC,
> armada-370-netgear-rn104.dts). The used phy driver is marvell.c. I only
> report it now as I just upgraded that machine from Debian 11 (with
> kernel 5.10.x) to Debian 12 (with kernel 6.1.x).
> 
> Commenting out phy_disable_interrupts(...) in v6.1.41's phy_shutdown()
> fixes the problem for me.
> 
> On Sun, Nov 01, 2020 at 02:50:57PM +0200, Ioana Ciornei wrote:
>> In case of a board which uses a shared IRQ we can easily end up with an
>> IRQ storm after a forced reboot.
>>
>> For example, a 'reboot -f' will trigger a call to the .shutdown()
>> callbacks of all devices. Because phylib does not implement that hook,
>> the PHY is not quiesced, thus it can very well leave its IRQ enabled.
>>
>> At the next boot, if that IRQ line is found asserted by the first PHY
>> driver that uses it, but _before_ the driver that is _actually_ keeping
>> the shared IRQ asserted is probed, the IRQ is not going to be
>> acknowledged, thus it will keep being fired preventing the boot process
>> of the kernel to continue. This is even worse when the second PHY driver
>> is a module.
>>
>> To fix this, implement the .shutdown() callback and disable the
>> interrupts if these are used.
> 
> I don't know how this should interact with wake-on-lan, but I would
> expect that there is a way to fix this without reintroducing the problem
> fixed by this change. However I cannot say if this needs fixing in the
> generic phy code or the phy driver. Any hints?

It depends upon what the PHY drivers and underlying hardware are capable 
and willing to do. Some PHY drivers will shutdown the TX path completely 
since you do not need that part to receive Wake-on-LAN packets and pass 
them up to the PHY and/or MAC Wake-on-LAN matching logic. This would 
invite us to let individual PHY drivers make a decision as to what they 
want to do in a .shutdown() routine that would then need to be added to 
each and every driver that wants to do something special. In the absence 
of said routine, you could default to calling phy_disable_interrupts() 
unless the PHY has WoL enabled?

phydev::wol_enabled reflects whether the PHY and/or the MAC has 
Wake-on-LAN enabled which could you could key off to "nullify" what the 
shutdown does.

>   
>> Note that we are still susceptible to IRQ storms if the previous kernel
>> exited with a panic or if the bootloader left the shared IRQ active, but
>> there is absolutely nothing we can do about these cases.
> 
> I'd say the bootloader could handle that, knowing that for some machines
> changing the bootloader isn't an option.

There is also the case of the boot loader not touching any 
PHY/MAC/networking and just booting as fast as possible to the kernel. 
It really becomes a problem that can be distributed against multiple SW 
agents to solve it, though clearly the kernel could do it too, so why 
not keep it there I guess.
-- 
Florian


  reply	other threads:[~2023-08-03 18:24 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-01 12:50 [PATCH net-next v2 00/19] net: phy: add support for shared interrupts (part 1) Ioana Ciornei
2020-11-01 12:50 ` [PATCH net-next v2 01/19] net: phy: export phy_error and phy_trigger_machine Ioana Ciornei
2020-11-01 12:50 ` [PATCH net-next v2 02/19] net: phy: add a shutdown procedure Ioana Ciornei
2023-08-03 18:16   ` Uwe Kleine-König
2023-08-03 18:24     ` Florian Fainelli [this message]
2023-08-03 18:49       ` Russell King (Oracle)
2020-11-01 12:50 ` [PATCH net-next v2 03/19] net: phy: make .ack_interrupt() optional Ioana Ciornei
2020-11-01 12:50 ` [PATCH net-next v2 04/19] net: phy: at803x: implement generic .handle_interrupt() callback Ioana Ciornei
2020-11-04 18:09   ` Oleksij Rempel
2020-11-01 12:51 ` [PATCH net-next v2 05/19] net: phy: at803x: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-04 18:09   ` Oleksij Rempel
2020-11-01 12:51 ` [PATCH net-next v2 06/19] net: phy: mscc: use phy_trigger_machine() to notify link change Ioana Ciornei
2020-11-05  0:10   ` Vladimir Oltean
2020-11-01 12:51 ` [PATCH net-next v2 07/19] net: phy: mscc: implement generic .handle_interrupt() callback Ioana Ciornei
2020-11-05  0:08   ` Vladimir Oltean
2020-11-01 12:51 ` [PATCH net-next v2 08/19] net: phy: mscc: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-05  0:07   ` Vladimir Oltean
2020-11-01 12:51 ` [PATCH net-next v2 09/19] net: phy: aquantia: implement generic .handle_interrupt() callback Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 10/19] net: phy: aquantia: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 11/19] net: phy: broadcom: implement generic .handle_interrupt() callback Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 12/19] net: phy: broadcom: remove use of ack_interrupt() Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 13/19] net: phy: cicada: implement the generic .handle_interrupt() callback Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 14/19] net: phy: cicada: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 15/19] net: phy: davicom: implement generic .handle_interrupt() calback Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 16/19] net: phy: davicom: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 17/19] net: phy: add genphy_handle_interrupt_no_ack() Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 18/19] net: phy: realtek: implement generic .handle_interrupt() callback Ioana Ciornei
2020-11-01 12:51 ` [PATCH net-next v2 19/19] net: phy: realtek: remove the use of .ack_interrupt() Ioana Ciornei
2020-11-03 16:44 ` [PATCH net-next v2 00/19] net: phy: add support for shared interrupts (part 1) Andrew Lunn
2020-11-03 22:53 ` Michael Walle
2020-11-06  0:36 ` Jakub Kicinski

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=7e365fa4-7a50-382c-5a99-288a417a82a7@gmail.com \
    --to=f.fainelli@gmail.com \
    --cc=Divya.Koppera@microchip.com \
    --cc=Nisar.Sayed@microchip.com \
    --cc=alexandru.ardelean@analog.com \
    --cc=andre.edich@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=atenart@kernel.org \
    --cc=baruch@tkos.co.il \
    --cc=christophe.leroy@c-s.fr \
    --cc=ciorneiioana@gmail.com \
    --cc=dev@kresin.me \
    --cc=fido_max@inbox.ru \
    --cc=hauke@hauke-m.de \
    --cc=hkallweit1@gmail.com \
    --cc=ioana.ciornei@nxp.com \
    --cc=jbrunet@baylibre.com \
    --cc=kavyasree.kotagiri@microchip.com \
    --cc=kuba@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.felsch@pengutronix.de \
    --cc=marex@denx.de \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=michael@walle.cc \
    --cc=narmstrong@baylibre.com \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=philippe.schenker@toradex.com \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=willy.liu@realtek.com \
    --cc=yuiko.oshino@microchip.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 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).