• Vladimir Oltean's avatar
    net: dsa: xrs700x: be compatible with masters which unregister on shutdown · a68e9da4
    Vladimir Oltean authored
    Since commit 2f1e8ea7 ("net: dsa: link interfaces with the DSA
    master to get rid of lockdep warnings"), DSA gained a requirement which
    it did not fulfill, which is to unlink itself from the DSA master at
    shutdown time.
    
    Since the Arrow SpeedChips XRS700x driver was introduced after the bad
    commit, it has never worked with DSA masters which decide to unregister
    their net_device on shutdown, effectively hanging the reboot process.
    To fix that, we need to call dsa_switch_shutdown.
    
    These devices can be connected by I2C or by MDIO, and if I search for
    I2C or MDIO bus drivers that implement their ->shutdown by redirecting
    it to ->remove I don't see any, however this does not mean it would not
    be possible. To be compatible with that pattern, it is necessary to
    implement an "if this then not that" scheme, to avoid ->remove and
    ->shutdown from being called both for the same struct device.
    
    Fixes: ee00b24f ("net: dsa: add Arrow Spee...
    a68e9da4
xrs700x.h 1.15 KB