If an error occurs after a successful ixp4xx_mdio_register() call, it should be undone by a corresponding ixp4xx_mdio_remove(). Add the missing call in the error handling path, as already done in the remove function. Fixes: 2098c18d6cf6 ("IXP4xx: Add PHYLIB support to Ethernet driver.") Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> --- drivers/net/ethernet/xscale/ixp4xx_eth.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c index 3b0c5f177447..007d68b385a5 100644 --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c @@ -1490,8 +1490,10 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) netif_napi_add_weight(ndev, &port->napi, eth_poll, NAPI_WEIGHT); - if (!(port->npe = npe_request(NPE_ID(port->id)))) - return -EIO; + if (!(port->npe = npe_request(NPE_ID(port->id)))) { + err = -EIO; + goto err_remove_mdio; + } port->plat = plat; npe_port_tab[NPE_ID(port->id)] = port; @@ -1530,6 +1532,8 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) err_free_mem: npe_port_tab[NPE_ID(port->id)] = NULL; npe_release(port->npe); +err_remove_mdio: + ixp4xx_mdio_remove(); return err; } -- 2.34.1