All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiner Kallweit <hkallweit1@gmail.com>
To: Jian-Hong Pan <jian-hong@endlessm.com>,
	David Miller <davem@davemloft.net>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: Re: [PATCH] r8169: don't use MSI-X on RTL8106e
Date: Thu, 16 Aug 2018 20:59:06 +0200	[thread overview]
Message-ID: <ff5ea624-0bd5-ef9e-9c02-deb4c1de601b@gmail.com> (raw)
In-Reply-To: <2676c1ed-4450-d720-84a0-95e5884490cb@web.de>

> From: Jian-Hong Pan <jian-hong@endlessm.com>
> 
> Found the ethernet network on ASUS X441UAR doesn't come back on resume
> from suspend when using MSI-X.  The chip is RTL8106e - version 39.
> 
The patch itself looks good, just the commit message is wrong in one
place and a little bit long.

> asus@endless:~$ dmesg | grep r8169
> [   21.848357] libphy: r8169: probed
> [   21.848473] r8169 0000:02:00.0 eth0: RTL8106e, 0c:9d:92:32:67:b4, XID
> 44900000, IRQ 127
> [   22.518860] r8169 0000:02:00.0 enp2s0: renamed from eth0
> [   29.458041] Generic PHY r8169-200:00: attached PHY driver [Generic
> PHY] (mii_bus:phy_addr=r8169-200:00, irq=IGNORE)
> [   63.227398] r8169 0000:02:00.0 enp2s0: Link is Up - 100Mbps/Full -
> flow control off
> [  124.514648] Generic PHY r8169-200:00: attached PHY driver [Generic
> PHY] (mii_bus:phy_addr=r8169-200:00, irq=IGNORE)
> 
> Here is the ethernet controller in detail:
> 
> asus@endless:~$ sudo lspci -nnvs 02:00.0
> [sudo] password for asus:
> 02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd.
> RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller [10ec:8136]
> (rev 07)
> 	Subsystem: ASUSTeK Computer Inc. RTL810xE PCI Express Fast
> Ethernet controller [1043:200f]
> 	Flags: bus master, fast devsel, latency 0, IRQ 16
> 	I/O ports at e000 [size=256]
> 	Memory at ef100000 (64-bit, non-prefetchable) [size=4K]
> 	Memory at e0000000 (64-bit, prefetchable) [size=16K]
> 	Capabilities: [40] Power Management version 3
> 	Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
> 	Capabilities: [70] Express Endpoint, MSI 01
> 	Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
> 	Capabilities: [d0] Vital Product Data
> 	Capabilities: [100] Advanced Error Reporting
> 	Capabilities: [140] Virtual Channel
> 	Capabilities: [160] Device Serial Number 01-00-00-00-36-4c-e0-00
> 	Capabilities: [170] Latency Tolerance Reporting
> 	Kernel driver in use: r8169
> 	Kernel modules: r8169
> 
> Here is the system interrupt table:
> 
> asus@endless:~$ cat /proc/interrupts
>             CPU0       CPU1       CPU2       CPU3
>    0:         22          0          0          0   IO-APIC    2-edge
> timer
>    1:        157         42          0          0   IO-APIC    1-edge
> i8042
>    8:          0          0          1          0   IO-APIC    8-edge
> rtc0
>    9:         10         13          0          0   IO-APIC    9-fasteoi
> acpi
>   16:          0          0          0          0   IO-APIC   16-fasteoi
> i2c_designware.0, i801_smbus
>   17:       2445          0       3453          0   IO-APIC   17-fasteoi
> i2c_designware.1, rtl_pci
>  109:          2          0          0          1   IO-APIC  109-fasteoi
> FTE1200:00
>  120:          0          0          0          0   PCI-MSI 458752-edge
> PCIe PME
>  121:          0          0          0          0   PCI-MSI 466944-edge
> PCIe PME
>  122:          0          0          0          0   PCI-MSI 468992-edge
> PCIe PME
>  123:       1465          0          0      21263   PCI-MSI 376832-edge
> ahci[0000:00:17.0]
>  124:          0        530          0          0   PCI-MSI 327680-edge
> xhci_hcd
>  125:       5204          0          0          0   PCI-MSI 32768-edge
> i915
>  126:          0          0        149          0   PCI-MSI 514048-edge
> snd_hda_intel:card0
>  127:          0          0        337          0   PCI-MSI 1048576-edge
> enp2s0
>  NMI:          0          0          0          0   Non-maskable
> interrupts
>  LOC:      45049      39474      38978      46677   Local timer
> interrupts
>  SPU:          0          0          0          0   Spurious interrupts
>  PMI:          0          0          0          0   Performance
> monitoring interrupts
>  IWI:        619          8          0          1   IRQ work interrupts
>  RTR:          6          0          0          0   APIC ICR read
> retries
>  RES:       4918       4436       3835       2943   Rescheduling
> interrupts
>  CAL:       1399       1478       1598       1465   Function call
> interrupts
>  TLB:        608        513        723        559   TLB shootdowns
>  TRM:          0          0          0          0   Thermal event
> interrupts
>  THR:          0          0          0          0   Threshold APIC
> interrupts
>  DFR:          0          0          0          0   Deferred Error APIC
> interrupts
>  MCE:          0          0          0          0   Machine check
> exceptions
>  MCP:          3          4          4          4   Machine check polls
>  ERR:          0
>  MIS:          0
>  PIN:          0          0          0          0   Posted-interrupt
> notification event
>  NPI:          0          0          0          0   Nested
> posted-interrupt event
>  PIW:          0          0          0          0   Posted-interrupt
> wakeup event
> 
> It is the IRQ 127 - PCI-MSI used by enp2s0.  However, lspci lists MSI is
> disabled and MSI-X is enabled which conflicts to the interrupt table.
> 
Both types of interrupts, MSI and MSI-X, are listed with irq chip name
"PCI-MSI", because MSI-X is treated as a sub-feature of MSI.
Therefore the output of /proc/interrupts doesn't allow to tell whether
a MSI or MSI-X interrupt is used, and as a consequence there is no such
conflict.
Indeed only lspci provides the information whether MSI or MSI-X is used.

> Falling back to MSI fixes the issue.
> 
> Here is the test result with this patch in dmesg:
> 
> asus@endless:~$ dmesg | grep r8169
> [   22.017477] libphy: r8169: probed
> [   22.017735] r8169 0000:02:00.0 eth0: RTL8106e, 0c:9d:92:32:67:b4, XID
> 44900000, IRQ 127
> [   22.041489] r8169 0000:02:00.0 enp2s0: renamed from eth0
> [   29.138312] Generic PHY r8169-200:00: attached PHY driver [Generic
> PHY] (mii_bus:phy_addr=r8169-200:00, irq=IGNORE)
> [   30.927359] r8169 0000:02:00.0 enp2s0: Link is Up - 100Mbps/Full -
> flow control off
> [  289.998077] r8169 0000:02:00.0 enp2s0: Link is Up - 100Mbps/Full -
> flow control off
> [  290.508084] Generic PHY r8169-200:00: attached PHY driver [Generic
> PHY] (mii_bus:phy_addr=r8169-200:00, irq=IGNORE)
> [  290.745690] r8169 0000:02:00.0 enp2s0: Link is Down
> [  292.367717] r8169 0000:02:00.0 enp2s0: Link is Up - 100Mbps/Full -
> flow control off
> 
> lspci lists MSI is enabled and MSI-X is disabled with this patch:
> 
> asus@endless:~/linux-net$ sudo lspci -nnvs 02:00.0
> [sudo] password for asus:
> 02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd.
> RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller [10ec:8136]
> (rev 07)
> 	Subsystem: ASUSTeK Computer Inc. RTL810xE PCI Express Fast
> Ethernet controller [1043:200f]
> 	Flags: bus master, fast devsel, latency 0, IRQ 127
> 	I/O ports at e000 [size=256]
> 	Memory at ef100000 (64-bit, non-prefetchable) [size=4K]
> 	Memory at e0000000 (64-bit, prefetchable) [size=16K]
> 	Capabilities: [40] Power Management version 3
> 	Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
> 	Capabilities: [70] Express Endpoint, MSI 01
> 	Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
> 	Capabilities: [d0] Vital Product Data
> 	Capabilities: [100] Advanced Error Reporting
> 	Capabilities: [140] Virtual Channel
> 	Capabilities: [160] Device Serial Number 01-00-00-00-36-4c-e0-00
> 	Capabilities: [170] Latency Tolerance Reporting
> 	Kernel driver in use: r8169
> 	Kernel modules: r8169
> 
> Signed-off-by: Jian-Hong Pan <jian-hong@endlessm.com>
> ---
>  drivers/net/ethernet/realtek/r8169.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
> index 0d9c3831838f..0efa977c422d 100644
> --- a/drivers/net/ethernet/realtek/r8169.c
> +++ b/drivers/net/ethernet/realtek/r8169.c
> @@ -7071,17 +7071,20 @@ static int rtl_alloc_irq(struct rtl8169_private *tp)
>  {
>  	unsigned int flags;
>  
> -	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
> +	switch (tp->mac_version) {
> +	case RTL_GIGA_MAC_VER_01 ... RTL_GIGA_MAC_VER_06:
>  		RTL_W8(tp, Cfg9346, Cfg9346_Unlock);
>  		RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~MSIEnable);
>  		RTL_W8(tp, Cfg9346, Cfg9346_Lock);
>  		flags = PCI_IRQ_LEGACY;
> -	} else if (tp->mac_version == RTL_GIGA_MAC_VER_40) {
> +		break;
> +	case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_40:
>  		/* This version was reported to have issues with resume
>  		 * from suspend when using MSI-X
>  		 */
>  		flags = PCI_IRQ_LEGACY | PCI_IRQ_MSI;
> -	} else {
> +		break;
> +	default:
>  		flags = PCI_IRQ_ALL_TYPES;
>  	}
>  
> 

       reply	other threads:[~2018-08-16 21:59 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <2676c1ed-4450-d720-84a0-95e5884490cb@web.de>
2018-08-16 18:59 ` Heiner Kallweit [this message]
2018-08-16 19:18   ` [PATCH] r8169: don't use MSI-X on RTL8106e Heiner Kallweit
2018-08-17  2:03   ` Jian-Hong Pan
2018-08-15  6:21 jian-hong
2018-08-16 19:21 ` David Miller
2018-08-16 19:37   ` Heiner Kallweit
2018-08-16 19:39     ` David Miller
2018-08-16 19:50       ` Heiner Kallweit
2018-08-20 18:44         ` Bjorn Helgaas
2018-08-20 20:46           ` Heiner Kallweit
2018-08-21 19:31             ` David Miller
2018-08-21 20:48               ` Heiner Kallweit
2018-08-22 11:44                 ` Thomas Gleixner
2018-08-22 19:49                   ` Heiner Kallweit
2018-08-23 10:46                     ` Jian-Hong Pan
2018-08-23 13:38                       ` Bjorn Helgaas
2018-08-27 10:46                         ` Jian-Hong Pan
2018-08-21  8:28           ` Marc Zyngier
2018-08-21 20:54             ` Heiner Kallweit
2018-08-20 20:40         ` Florian Fainelli
2018-08-20 20:56           ` Heiner Kallweit

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=ff5ea624-0bd5-ef9e-9c02-deb4c1de601b@gmail.com \
    --to=hkallweit1@gmail.com \
    --cc=davem@davemloft.net \
    --cc=jian-hong@endlessm.com \
    --cc=netdev@vger.kernel.org \
    /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.