net: mvneta: set rx mode during resume if interface is running
authorJisheng Zhang <jszhang@marvell.com>
Wed, 29 Mar 2017 08:47:19 +0000 (16:47 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Mar 2017 21:08:57 +0000 (14:08 -0700)
I found a bug by:

0. boot and start dhcp client
1. echo mem > /sys/power/state
2. resume back immediately
3. don't touch dhcp client to renew the lease
4. ping the gateway. No acks

Usually, after step2, the DHCP lease isn't expired, so in theory we
should resume all back. But in fact, it doesn't. It turns out
the rx mode isn't resumed correctly. This patch fixes it by adding
mvneta_set_rx_mode(dev) in the resume hook if interface is running.

Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvneta.c

index 7a6c65b44d7eb9584fa8a7aaec9cacf394143607..34a3686d2ce669091510f5dc85773a84d7880c92 100644 (file)
@@ -4451,8 +4451,11 @@ static int mvneta_resume(struct device *device)
                mvneta_fixed_link_update(pp, dev->phydev);
 
        netif_device_attach(dev);
-       if (netif_running(dev))
+       if (netif_running(dev)) {
                mvneta_open(dev);
+               mvneta_set_rx_mode(dev);
+       }
+
        return 0;
 }
 #endif