Version: 3.2~rc4-1~experimental.1
found 650771 linux-2.6/2.6.32-39
tags 650771 + patch moreinfo
quit

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
pm_schedule_suspend, 2011-11-07).

> 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 <[email protected]>
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 protected]>
Acked-by: Francois Romieu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Jonathan Nieder <[email protected]>
---
 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
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1115,7 +1115,7 @@ static void __rtl8169_check_link_status(struct net_device 
*dev,
                netif_carrier_off(dev);
                netif_info(tp, ifdown, dev, "link down\n");
                if (pm)
-                       pm_schedule_suspend(&tp->pci_dev->dev, 100);
+                       pm_schedule_suspend(&tp->pci_dev->dev, 5000);
        }
        spin_unlock_irqrestore(&tp->lock, flags);
 }
-- 
1.7.8.rc3

Reply via email to