The register_netdev() call should be made only when ready to process any
user request on the interface. Move the call to be the last one issued
in the probe sequence.

Reported-by: Andrew Lunn <[email protected]>
Signed-off-by: Ioana Ciornei <[email protected]>
---
Changes in v2:
 - added Reported-by tag
Changes in v3:
 - none

 drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c 
b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
index 28da109aef5e..14a9eebf687e 100644
--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
+++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c
@@ -1588,23 +1588,21 @@ static int ethsw_probe_port(struct ethsw_core *ethsw, 
u16 port_idx)
        port_netdev->min_mtu = ETH_MIN_MTU;
        port_netdev->max_mtu = ETHSW_MAX_FRAME_LENGTH;
 
+       err = ethsw_port_init(port_priv, port_idx);
+       if (err)
+               goto err_port_probe;
+
        err = register_netdev(port_netdev);
        if (err < 0) {
                dev_err(dev, "register_netdev error %d\n", err);
-               goto err_register_netdev;
+               goto err_port_probe;
        }
 
        ethsw->ports[port_idx] = port_priv;
 
-       err = ethsw_port_init(port_priv, port_idx);
-       if (err)
-               goto err_ethsw_port_init;
-
        return 0;
 
-err_ethsw_port_init:
-       unregister_netdev(port_netdev);
-err_register_netdev:
+err_port_probe:
        free_netdev(port_netdev);
 
        return err;
-- 
1.9.1

Reply via email to