12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- From a5e7f7e277bd4403c45c1c7922d56d0eb08dbc7c Mon Sep 17 00:00:00 2001
- From: Vladimir Oltean <[email protected]>
- Date: Tue, 29 Nov 2022 16:12:15 +0200
- Subject: [PATCH 08/14] 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 <[email protected]>
- Reviewed-by: Ioana Ciornei <[email protected]>
- Tested-by: Ioana Ciornei <[email protected]>
- Signed-off-by: Paolo Abeni <[email protected]>
- ---
- .../ethernet/freescale/dpaa2/dpaa2-switch.c | 21 +++++++++++--------
- 1 file changed, 12 insertions(+), 9 deletions(-)
- --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
- +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
- @@ -1450,9 +1450,8 @@ static int dpaa2_switch_port_connect_mac
- 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,
- @@ -1462,11 +1461,12 @@ static int dpaa2_switch_port_connect_mac
- }
- }
-
- + port_priv->mac = mac;
- +
- return 0;
-
- err_close_mac:
- dpaa2_mac_close(mac);
- - port_priv->mac = NULL;
- err_free_mac:
- kfree(mac);
- return err;
- @@ -1474,15 +1474,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;
- +
- + port_priv->mac = NULL;
-
- - if (!dpaa2_switch_port_has_mac(port_priv))
- + 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)
|