Thread (4 messages) flat view 4 messages, 4 authors, 2017-09-15

Re: [PATCH v2] net: smsc911x: Quieten netif during suspend

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2017-09-14 09:09:57
Also in: linux-pm, linux-renesas-soc, lkml

Hi Florian,

On Thu, Sep 14, 2017 at 1:28 AM, Florian Fainelli [off-list ref] wrote:
On 09/13/2017 10:42 AM, Geert Uytterhoeven wrote:
quoted
If the network interface is kept running during suspend, the net core
may call net_device_ops.ndo_start_xmit() while the Ethernet device is
still suspended, which may lead to a system crash.

E.g. on sh73a0/kzm9g and r8a73a4/ape6evm, the external Ethernet chip is
driven by a PM controlled clock.  If the Ethernet registers are accessed
while the clock is not running, the system will crash with an imprecise
external abort.

As this is a race condition with a small time window, it is not so easy
to trigger at will.  Using pm_test may increase your chances:

    # echo 0 > /sys/module/printk/parameters/console_suspend
    # echo platform > /sys/power/pm_test
    # echo mem > /sys/power/state

To fix this, make sure the network interface is quietened during
suspend.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Thank you!
You may want to take the opportunity to suspend the PHY device
(conversely resume it) if WoL is not enabled on this device.
Despite the WoL comment visible in the context below, I believe this driver
doesn't support WoL yet (ethtool_ops.[gs]et_wol() not implemented).
quoted
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -2595,6 +2595,11 @@ static int smsc911x_suspend(struct device *dev)
      struct net_device *ndev = dev_get_drvdata(dev);
      struct smsc911x_data *pdata = netdev_priv(ndev);

+     if (netif_running(ndev)) {
+             netif_stop_queue(ndev);
+             netif_device_detach(ndev);
+     }
+
      /* enable wake on LAN, energy detection and the external PME
       * signal. */
      smsc911x_reg_write(pdata, PMT_CTRL,
Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help