Commit ef4d5fcc authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

r8169: improve runtime pm in rtl8169_check_link_status

This patch partially reverts commit e4fbce74 "r8169: Fix runtime
power management" from 2010. At that time the suspend delay was 100ms
and therefore suspending happened during initial aneg. Currently
suspend delay is 5s, so suspend starts after aneg and the issue
doesn't exist any longer. On my system aneg takes almost 3s, to be on
the safe side let's increase the suspend delay to 10s.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b9aa1c75
...@@ -1675,14 +1675,13 @@ static void rtl_link_chg_patch(struct rtl8169_private *tp) ...@@ -1675,14 +1675,13 @@ static void rtl_link_chg_patch(struct rtl8169_private *tp)
} }
} }
static void __rtl8169_check_link_status(struct net_device *dev, static void rtl8169_check_link_status(struct net_device *dev,
struct rtl8169_private *tp, struct rtl8169_private *tp,
void __iomem *ioaddr, bool pm) void __iomem *ioaddr)
{ {
if (tp->link_ok(ioaddr)) { if (tp->link_ok(ioaddr)) {
rtl_link_chg_patch(tp); rtl_link_chg_patch(tp);
/* This is to cancel a scheduled suspend if there's one. */ /* This is to cancel a scheduled suspend if there's one. */
if (pm)
pm_request_resume(&tp->pci_dev->dev); pm_request_resume(&tp->pci_dev->dev);
netif_carrier_on(dev); netif_carrier_on(dev);
if (net_ratelimit()) if (net_ratelimit())
...@@ -1690,18 +1689,10 @@ static void __rtl8169_check_link_status(struct net_device *dev, ...@@ -1690,18 +1689,10 @@ static void __rtl8169_check_link_status(struct net_device *dev,
} else { } else {
netif_carrier_off(dev); netif_carrier_off(dev);
netif_info(tp, ifdown, dev, "link down\n"); netif_info(tp, ifdown, dev, "link down\n");
if (pm) pm_schedule_suspend(&tp->pci_dev->dev, 10000);
pm_schedule_suspend(&tp->pci_dev->dev, 5000);
} }
} }
static void rtl8169_check_link_status(struct net_device *dev,
struct rtl8169_private *tp,
void __iomem *ioaddr)
{
__rtl8169_check_link_status(dev, tp, ioaddr, false);
}
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST) #define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
static u32 __rtl8169_get_wol(struct rtl8169_private *tp) static u32 __rtl8169_get_wol(struct rtl8169_private *tp)
...@@ -7746,7 +7737,7 @@ static void rtl_slow_event_work(struct rtl8169_private *tp) ...@@ -7746,7 +7737,7 @@ static void rtl_slow_event_work(struct rtl8169_private *tp)
rtl8169_pcierr_interrupt(dev); rtl8169_pcierr_interrupt(dev);
if (status & LinkChg) if (status & LinkChg)
__rtl8169_check_link_status(dev, tp, tp->mmio_addr, true); rtl8169_check_link_status(dev, tp, tp->mmio_addr);
rtl_irq_enable_all(tp); rtl_irq_enable_all(tp);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment