]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: dpaa2-switch: phylink_disconnect_phy needs rtnl_lock
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 19 Aug 2021 14:40:18 +0000 (17:40 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Aug 2021 13:34:49 +0000 (14:34 +0100)
There is an ASSERT_RTNL in phylink_disconnect_phy which triggers
whenever dpaa2_switch_port_disconnect_mac is called.

To follow the pattern established by dpaa2_eth_disconnect_mac, take the
rtnl_mutex every time we call dpaa2_switch_port_disconnect_mac.

Fixes: 84cba72956fd ("dpaa2-switch: integrate the MAC endpoint support")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c

index 1419c8dccea2c793db76ad57a4caae999ac822b0..71c8501ab4715b0bbba6aaf8e97dbdfab7ee0757 100644 (file)
@@ -1508,10 +1508,12 @@ static irqreturn_t dpaa2_switch_irq0_handler_thread(int irq_num, void *arg)
        }
 
        if (status & DPSW_IRQ_EVENT_ENDPOINT_CHANGED) {
+               rtnl_lock();
                if (dpaa2_switch_port_has_mac(port_priv))
                        dpaa2_switch_port_disconnect_mac(port_priv);
                else
                        dpaa2_switch_port_connect_mac(port_priv);
+               rtnl_unlock();
        }
 
 out:
@@ -3201,7 +3203,9 @@ static int dpaa2_switch_remove(struct fsl_mc_device *sw_dev)
        for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
                port_priv = ethsw->ports[i];
                unregister_netdev(port_priv->netdev);
+               rtnl_lock();
                dpaa2_switch_port_disconnect_mac(port_priv);
+               rtnl_unlock();
                free_netdev(port_priv->netdev);
        }