net: dpaa2-switch: assign port_priv->mac after dpaa2_mac_connect() call
The dpaa2-switch has the exact same locking requirements when connected to a DPMAC, so it needs port_priv->mac to always point either to NULL, or to a DPMAC with a fully initialized phylink instance. Make the same preparatory change in the dpaa2-switch driver as in the dpaa2-eth one. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com> Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
02d61948e8
commit
88d64367ce
@ -1449,9 +1449,8 @@ static int dpaa2_switch_port_connect_mac(struct ethsw_port_priv *port_priv)
|
||||
err = dpaa2_mac_open(mac);
|
||||
if (err)
|
||||
goto err_free_mac;
|
||||
port_priv->mac = mac;
|
||||
|
||||
if (dpaa2_switch_port_is_type_phy(port_priv)) {
|
||||
if (dpaa2_mac_is_type_phy(mac)) {
|
||||
err = dpaa2_mac_connect(mac);
|
||||
if (err) {
|
||||
netdev_err(port_priv->netdev,
|
||||
@ -1461,11 +1460,12 @@ static int dpaa2_switch_port_connect_mac(struct ethsw_port_priv *port_priv)
|
||||
}
|
||||
}
|
||||
|
||||
port_priv->mac = mac;
|
||||
|
||||
return 0;
|
||||
|
||||
err_close_mac:
|
||||
dpaa2_mac_close(mac);
|
||||
port_priv->mac = NULL;
|
||||
err_free_mac:
|
||||
kfree(mac);
|
||||
return err;
|
||||
@ -1473,15 +1473,18 @@ err_free_mac:
|
||||
|
||||
static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv)
|
||||
{
|
||||
if (dpaa2_switch_port_is_type_phy(port_priv))
|
||||
dpaa2_mac_disconnect(port_priv->mac);
|
||||
struct dpaa2_mac *mac = port_priv->mac;
|
||||
|
||||
if (!dpaa2_switch_port_has_mac(port_priv))
|
||||
port_priv->mac = NULL;
|
||||
|
||||
if (!mac)
|
||||
return;
|
||||
|
||||
dpaa2_mac_close(port_priv->mac);
|
||||
kfree(port_priv->mac);
|
||||
port_priv->mac = NULL;
|
||||
if (dpaa2_mac_is_type_phy(mac))
|
||||
dpaa2_mac_disconnect(mac);
|
||||
|
||||
dpaa2_mac_close(mac);
|
||||
kfree(mac);
|
||||
}
|
||||
|
||||
static irqreturn_t dpaa2_switch_irq0_handler_thread(int irq_num, void *arg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user