On Thu, 15 Sep 2011, Lucas Nussbaum wrote:
> Hi,
>
> On 15/09/11 at 22:56 +0000, Ronciak, John wrote:
> > What I think is happening is that after it come out of suspend the device
> > memory mapping is either no longer mapped or it's somehow changed. The
> > reason I say this is:
> >
> > [ 1569.219047] e1000e 0000:00:19.0: eth0: Error reading PHY register
> > [ 1569.437327] mount.crypt[8294]: segfault at 0 ip 00007fa19feb9a0e sp
> > 00007fffde4e7bd0 error 4 in mount.crypt[7fa19feb2000+a000]
> > [ 1570.014032] e1000e 0000:00:19.0: eth0: Error reading PHY register
> > [ 1570.809335] e1000e 0000:00:19.0: eth0: Error reading PHY register
this is because the device is in D3, probably.
> > There should be no errors from the driver when reading the PHY. This is
> > also probably why ethtool does not work after the suspend.
> > BTW, does ethtool work before the first time the systems been suspended?
> > Please try this if you haven't.
> > Anyway, I think suspend or resume is doing something bad to the system.
>
> > Can you please try something like the latest 3.0 stable kernel and see if
> > it's working there?
> > This is most likely not a driver issue but I guess it still could be.
> > Please let me know if the 3.0 kernel works.
>
> After a fresh boot on 3.0 (without doing any suspend/resume cycle):
> - network doesn't work
> - ethtool shows the same errors as before
runtime PM is doing this.
> dmesg attached.
>
> # ifconfig eth0
> eth0 Link encap:Ethernet HWaddr 00:24:e8:a7:2c:42
> inet6 addr: fe80::224:e8ff:fea7:2c42/64 Scope:Link
> UP BROADCAST MULTICAST MTU:1500 Metric:1
> RX packets:3 errors:0 dropped:0 overruns:0 frame:0
> TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
> collisions:0 txqueuelen:1000
> RX bytes:486 (486.0 B) TX bytes:3657 (3.5 KiB)
> Interrupt:22 Memory:f6ae0000-f6b00000
>
> # lspci -vvv
> 00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network
> Connection (rev 03)
> Subsystem: Dell Device 024d
> Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR+ FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
> <TAbort- <MAbort- >SERR- <PERR- INTx-
> Interrupt: pin A routed to IRQ 22
> Region 0: Memory at f6ae0000 (32-bit, non-prefetchable) [disabled]
> [size=128K]
> Region 1: Memory at f6adb000 (32-bit, non-prefetchable) [disabled]
> [size=4K]
> Region 2: I/O ports at efe0 [disabled] [size=32]
> Capabilities: [c8] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
=> Status: D3 NoSoftRst- PME-Enable+ DSel=0 DScale=1 PME+
look, PME+! that means the device is actually asserting wake signal but
the APIC/cpu is either not enabled or not listening.
> Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
> Address: 00000000fee0300c Data: 41b9
> Capabilities: [e0] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: e1000e
>
> By "network doesn't work", I mean:
> - network manager shows the Ethernet network as disconnected
> - when manually starting DHCP, DHCPDISCOVERs are sent, but then I get "No
> DHCPOFFERS received.".
> - I can assign an IP address manually using ifconfig, but then pinging another
> machine doesn't work.
>
>
> What really surprises me is the "Status: D3" in lspci. Shouldn't it be D0 if
> the interface is up?
This is the crux of the issue, the runtime PM feature of the kernel is
attempting to enable "wake on link event" but for some reason if the cable
is plugged in the adapter is not successfully asserting PME#, therefore
the runtime power management doesn't re-enable the driver, and take the
device to D0.
We also obviously have some bugs in our driver that we don't correctly
manage the runtime power management state when ethtool queries and such
are running.
My guess is we have a bug in the driver where we are not correctly arming
the wake path in the kernel, or there is a kernel bug with your system
where something is not getting hooked up.
we probably need to add a bunch of printk to the driver around the PME and
wake setup code, to see what exactly is being programmed to the device
wake registers. We need to check the upstream bridges and the APIC
enables (via sysfs) to make sure wake is allowed to propogate.
you might try these runtime pm kernel boot options to see if they make any
difference
pcie_pme= [PCIE,PM] Native PCIe PME signaling options:
Format: {auto|force}[,nomsi]
auto Use native PCIe PME signaling if the BIOS allows the
kernel to control PCIe config registers of root ports.
force Use native PCIe PME signaling even if the BIOS refuses
to allow the kernel to control the relevant PCIe config
registers.
nomsi Do not use MSI for native PCIe PME signaling (this makes
all PCIe root ports use INTx for everything).
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
http://p.sf.net/sfu/rim-devcon-copy2
_______________________________________________
E1000-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit
http://communities.intel.com/community/wired