net: dsa: felix: don't deinitialize unused ports
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 16 Feb 2021 11:14:46 +0000 (13:14 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Feb 2021 21:52:14 +0000 (13:52 -0800)
ocelot_init_port is called only if dsa_is_unused_port == false, however
ocelot_deinit_port is called unconditionally. This causes a warning in
the skb_queue_purge inside ocelot_deinit_port saying that the spin lock
protecting ocelot_port->tx_skbs was not initialized.

Fixes: e5fb512d81d0 ("net: mscc: ocelot: deinitialize only initialized ports")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/ocelot/felix.c

index 800f27d..3e72f0a 100644 (file)
@@ -1262,8 +1262,12 @@ static void felix_teardown(struct dsa_switch *ds)
        ocelot_deinit_timestamp(ocelot);
        ocelot_deinit(ocelot);
 
-       for (port = 0; port < ocelot->num_phys_ports; port++)
+       for (port = 0; port < ocelot->num_phys_ports; port++) {
+               if (dsa_is_unused_port(ds, port))
+                       continue;
+
                ocelot_deinit_port(ocelot, port);
+       }
 
        if (felix->info->mdio_bus_free)
                felix->info->mdio_bus_free(ocelot);