Bug#650771: r8169 connectivity intermittent, link up messages in syslog
found 650771 linux-2.6/2.6.32-39
tags 650771 + patch moreinfo
Robbert Haarman wrote:
>> Robbert Haarman wrote:
>>> I compiled a vanilla 3.2.0-rc4 kernel and that seems to fix the problem.
> After a few days still no problems. Looking good!
That means one of two things: (a) v3.2-rc4 fixes this, or (b) some
patch or configuration detail in the Debian kernel provokes it.
Marking under the assumption that it is (a).
Presumably soon we'll know for sure. ;-)
I blame v3.2-rc3~25^2~63 (r8169: increase the delay parameter of
> I tested using linux-image-2.6.32-5-amd64 version 2.6.32-39, which I
> think is current for both squeeze and squeeze-proposed-updates. This
> kernel is affected (problem reproduced using the r8169 driver as shipped
> by Debian).
Potential patch attached. Thanks for checking so quickly.
From: hayeswang <firstname.lastname@example.org>
Date: Mon, 7 Nov 2011 20:44:37 +0000
Subject: r8169: increase the delay parameter of pm_schedule_suspend
commit 10953db8e1a278742ef7e64a3d1491802bcfa98b upstream.
The link down would occur when reseting PHY. And it would take about 2 ~ 5 seconds
from link down to link up. If the delay of pm_schedule_suspend is not long enough,
the device would enter runtime_suspend before link up. After link up, the device
would wake up and reset PHY again. Then, you would find the driver keep in a loop
of runtime_suspend and rumtime_resume.
Signed-off-by: Hayes Wang <email@example.com>
Acked-by: Francois Romieu <firstname.lastname@example.org>
Signed-off-by: David S. Miller <email@example.com>
Signed-off-by: Jonathan Nieder <firstname.lastname@example.org>
drivers/net/r8169.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 0e2bf4bfd6db..003a5f710833 100644
@@ -1115,7 +1115,7 @@ static void __rtl8169_check_link_status(struct net_device *dev,
netif_info(tp, ifdown, dev, "link down\n");
- pm_schedule_suspend(&tp->pci_dev->dev, 100);
+ pm_schedule_suspend(&tp->pci_dev->dev, 5000);