| From 73204b342fbee1fd9364365c1213815cc715eee2 Mon Sep 17 00:00:00 2001 |
| From: Claudiu Manoil <claudiu.manoil@nxp.com> |
| Date: Thu, 14 Nov 2019 16:22:39 +0200 |
| Subject: [PATCH] enetc: Remove mdio bus on PF probe error path |
| |
| Fixes following kernel panic on the probing error |
| path, when pci=nomsi bootarg is used (which is |
| not supporrted by the enetc dirver): |
| |
| fsl_enetc 0000:00:00.0: MSIX alloc failed |
| ------------[ cut here ]------------ |
| kernel BUG at drivers/net/phy/mdio_bus.c:487! |
| Internal error: Oops - BUG: 0 [#1] PREEMPT SMP |
| Modules linked in: |
| Process swapper/0 (pid: 1, stack limit = 0x(____ptrval____)) |
| CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.19.68-00004-g85dc4876e6e6 #1 |
| Hardware name: LS1028A RDB Board (DT) |
| pstate: 80000005 (Nzcv daif -PAN -UAO) |
| pc : mdiobus_free+0x5c/0x60 |
| lr : _devm_mdiobus_free+0x20/0x30 |
| [...] |
| Call trace: |
| mdiobus_free+0x5c/0x60 |
| _devm_mdiobus_free+0x20/0x30 |
| release_nodes+0x148/0x238 |
| devres_release_all+0x3c/0x68 |
| really_probe+0x90/0x2a0 |
| driver_probe_device+0x5c/0x100 |
| __driver_attach+0xf0/0xf8 |
| bus_for_each_dev+0x84/0xd8 |
| driver_attach+0x30/0x40 |
| bus_add_driver+0x1c4/0x230 |
| driver_register+0x64/0x110 |
| __pci_register_driver+0x58/0x68 |
| enetc_pf_driver_init+0x28/0x30 |
| do_one_initcall+0x54/0x268 |
| kernel_init_freeable+0x2d0/0x37c |
| kernel_init+0x18/0x118 |
| ret_from_fork+0x10/0x1c |
| Code: 97e0dd79 f9400bf3 a8c27bfd d65f03c0 (d4210000) |
| ---[ end trace 1e4e5729f059b773 ]--- |
| |
| Fixes: ebfcb23d62ab ("enetc: Add ENETC PF level external MDIO support") |
| Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> |
| --- |
| drivers/net/ethernet/freescale/enetc/enetc_pf.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c |
| +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c |
| @@ -1041,6 +1041,7 @@ err_alloc_si_res: |
| si->ndev = NULL; |
| free_netdev(ndev); |
| err_alloc_netdev: |
| + enetc_mdio_remove(pf); |
| enetc_of_put_phy(pf); |
| err_device_disabled: |
| err_map_pf_space: |