Commit d52ef12f authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller
Browse files

net: dpaa2-switch: phylink_disconnect_phy needs rtnl_lock



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: 84cba729 ("dpaa2-switch: integrate the MAC endpoint support")
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6985157c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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);
	}