Patch "net: dsa: microchip: ksz8863: be compatible with masters which unregister on shutdown" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: dsa: microchip: ksz8863: be compatible with masters which unregister on shutdown

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-dsa-microchip-ksz8863-be-compatible-with-masters.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0294db7d706b7950efb7b6c1cac14101d136710e
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Fri Sep 17 16:34:35 2021 +0300

    net: dsa: microchip: ksz8863: be compatible with masters which unregister on shutdown
    
    [ Upstream commit fe4053078cd0f02a3fa140c43660f327702a9f10 ]
    
    Since commit 2f1e8ea726e9 ("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 Microchip sub-driver for KSZ8863 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.
    
    Since this driver expects the MDIO bus to be backed by mdio_bitbang, I
    don't think there is currently any MDIO bus driver which implements its
    ->shutdown by redirecting it to ->remove, but in any case, 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: 60a364760002 ("net: dsa: microchip: Add Microchip KSZ8863 SMI based driver support")
    Link: https://lore.kernel.org/netdev/20210909095324.12978-1-LinoSanfilippo@xxxxxx/
    Reported-by: Lino Sanfilippo <LinoSanfilippo@xxxxxx>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/dsa/microchip/ksz8863_smi.c b/drivers/net/dsa/microchip/ksz8863_smi.c
index 11293485138c..5883fa7edda2 100644
--- a/drivers/net/dsa/microchip/ksz8863_smi.c
+++ b/drivers/net/dsa/microchip/ksz8863_smi.c
@@ -191,6 +191,18 @@ static void ksz8863_smi_remove(struct mdio_device *mdiodev)
 
 	if (dev)
 		ksz_switch_remove(dev);
+
+	dev_set_drvdata(&mdiodev->dev, NULL);
+}
+
+static void ksz8863_smi_shutdown(struct mdio_device *mdiodev)
+{
+	struct ksz_device *dev = dev_get_drvdata(&mdiodev->dev);
+
+	if (dev)
+		dsa_switch_shutdown(dev->ds);
+
+	dev_set_drvdata(&mdiodev->dev, NULL);
 }
 
 static const struct of_device_id ksz8863_dt_ids[] = {
@@ -203,6 +215,7 @@ MODULE_DEVICE_TABLE(of, ksz8863_dt_ids);
 static struct mdio_driver ksz8863_driver = {
 	.probe	= ksz8863_smi_probe,
 	.remove	= ksz8863_smi_remove,
+	.shutdown = ksz8863_smi_shutdown,
 	.mdiodrv.driver = {
 		.name	= "ksz8863-switch",
 		.of_match_table = ksz8863_dt_ids,



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux