The shutdown code only stopped the PHYs but does not diconnect them
properly. This could lead to null pointer deref related kernel oopses
during reboot. Fix this by calling phy_disconnect() after the PHYs are
stopped.

Signed-off-by: John Crispin <j...@phrozen.org>
---
 net/dsa/slave.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 68714a5..725d9f7 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -154,8 +154,10 @@ static int dsa_slave_close(struct net_device *dev)
        struct net_device *master = p->parent->dst->master_netdev;
        struct dsa_switch *ds = p->parent;
 
-       if (p->phy)
+       if (p->phy) {
                phy_stop(p->phy);
+               phy_disconnect(p->phy);
+       }
 
        dev_mc_unsync(master, dev);
        dev_uc_unsync(master, dev);
-- 
1.7.10.4

Reply via email to