r8169: fix WoL on shutdown if CONFIG_DEBUG_SHIRQ is set
Heiner Kallweit
maintainerPATCH 1/1 r8169: fix WoL on shutdown if CONFIG_DEBUG_SHIRQ is set
So far phy_disconnect() is called before free_irq(). If CONFIG_DEBUG_SHIRQ is set and interrupt is shared, then free_irq() creates an "artificial" interrupt by calling the interrupt handler. The "link change" flag is set in the interrupt status register, causing phylib to eventually call phy_suspend(). Because the net_device is detached from the PHY already, the PHY driver can't recognize that WoL is configured and powers down the PHY.
--- drivers/net/ethernet/realtek/r8169_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/ethernet/realtek/r8169_main.c +2 -2
@@ -4667,10 +4667,10 @@ static int rtl8169_close(struct net_device *dev)cancel_work_sync (&tp->wk.work); -phy_disconnect (tp->phydev); -free_irq (pci_irq_vector (pdev,0 ), tp); +phy_disconnect (tp->phydev); +dma_free_coherent (&pdev->dev,R8169_RX_RING_BYTES , tp->RxDescArray, tp->RxPhyAddr); dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
Signature · 1 line
2.30.0
This patch was applied to netdev/net.git (refs/heads/master):
Hello:
This patch was applied to netdev/net.git (refs/heads/master):
Quoted 9 lines · On Mon, 1 Feb 2021 21:50:56 +0100 you wrote:
So far
phy_disconnect()is called beforefree_irq(). IfCONFIG_DEBUG_SHIRQis set and interrupt is shared, thenfree_irq()creates an "artificial" interrupt by calling the interrupt handler. The "link change" flag is set in the interrupt status register, causing phylib to eventually callphy_suspend(). Because thenet_deviceis detached from the PHY already, the PHY driver can't recognize that WoL is configured and powers down the PHY.[...]
Here is the summary with links:
- [net] r8169: fix WoL on shutdown if CONFIG_DEBUG_SHIRQ is set
https://git.kernel.org/netdev/net/c/cc9f07a838c4
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html