]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
r8169: avoid unsolicited interrupts
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 18 Oct 2024 09:08:16 +0000 (11:08 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Nov 2024 01:02:37 +0000 (02:02 +0100)
[ Upstream commit 10ce0db787004875f4dba068ea952207d1d8abeb ]

It was reported that after resume from suspend a PCI error is logged
and connectivity is broken. Error message is:
PCI error (cmd = 0x0407, status_errs = 0x0000)
The message seems to be a red herring as none of the error bits is set,
and the PCI command register value also is normal. Exception handling
for a PCI error includes a chip reset what apparently brakes connectivity
here. The interrupt status bit triggering the PCI error handling isn't
actually used on PCIe chip versions, so it's not clear why this bit is
set by the chip. Fix this by ignoring this bit on PCIe chip versions.

Fixes: 0e4851502f84 ("r8169: merge with version 8.001.00 of Realtek's r8168 driver")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219388
Tested-by: Atlas Yu <atlas.yu@canonical.com>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/78e2f535-438f-4212-ad94-a77637ac6c9c@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/realtek/r8169_main.c

index 01e18f645c0eda5a0c4ae64b2a5fd8423285f332..91a8c62b180ae5a31f04f8d001bce063d2a0f3bb 100644 (file)
@@ -4669,7 +4669,9 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
        if ((status & 0xffff) == 0xffff || !(status & tp->irq_mask))
                return IRQ_NONE;
 
-       if (unlikely(status & SYSErr)) {
+       /* At least RTL8168fp may unexpectedly set the SYSErr bit */
+       if (unlikely(status & SYSErr &&
+           tp->mac_version <= RTL_GIGA_MAC_VER_06)) {
                rtl8169_pcierr_interrupt(tp->dev);
                goto out;
        }