Message ID | aaffbe8d-7094-4083-8146-185f4a84e8a1@moroto.mountain (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Krzysztof Wilczyński |
Headers | show |
Series | PCI: endpoint: fix a couple error handling bugs | expand |
On Mon, 10 Jun 2024, Dan Carpenter wrote: > There are two issues related to epf_ntb_epc_cleanup(). > 1) It should call epf_ntb_config_sspad_bar_clear(). > 2) The epf_ntb_bind() function should call epf_ntb_epc_cleanup() > to cleanup. > > I also changed the ordering a bit. Unwinding should be done in the > mirror order from how they are allocated. > > Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP") > Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> > --- > drivers/pci/endpoint/functions/pci-epf-vntb.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/endpoint/functions/pci-epf-vntb.c > index 7f05a44e9a9f..874cb097b093 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c > +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c > @@ -799,8 +799,9 @@ static int epf_ntb_epc_init(struct epf_ntb *ntb) > */ > static void epf_ntb_epc_cleanup(struct epf_ntb *ntb) > { > - epf_ntb_db_bar_clear(ntb); > epf_ntb_mw_bar_clear(ntb, ntb->num_mws); > + epf_ntb_db_bar_clear(ntb); > + epf_ntb_config_sspad_bar_clear(ntb); > } > > #define EPF_NTB_R(_name) \ > @@ -1337,7 +1338,7 @@ static int epf_ntb_bind(struct pci_epf *epf) > ret = pci_register_driver(&vntb_pci_driver); > if (ret) { > dev_err(dev, "failure register vntb pci driver\n"); > - goto err_bar_alloc; > + goto err_epc_cleanup; > } > > ret = vpci_scan_bus(ntb); > @@ -1348,6 +1349,8 @@ static int epf_ntb_bind(struct pci_epf *epf) > > err_unregister: > pci_unregister_driver(&vntb_pci_driver); > +err_epc_cleanup: > + epf_ntb_epc_cleanup(ntb); > err_bar_alloc: > epf_ntb_config_spad_bar_free(ntb); Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/endpoint/functions/pci-epf-vntb.c index 7f05a44e9a9f..874cb097b093 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -799,8 +799,9 @@ static int epf_ntb_epc_init(struct epf_ntb *ntb) */ static void epf_ntb_epc_cleanup(struct epf_ntb *ntb) { - epf_ntb_db_bar_clear(ntb); epf_ntb_mw_bar_clear(ntb, ntb->num_mws); + epf_ntb_db_bar_clear(ntb); + epf_ntb_config_sspad_bar_clear(ntb); } #define EPF_NTB_R(_name) \ @@ -1337,7 +1338,7 @@ static int epf_ntb_bind(struct pci_epf *epf) ret = pci_register_driver(&vntb_pci_driver); if (ret) { dev_err(dev, "failure register vntb pci driver\n"); - goto err_bar_alloc; + goto err_epc_cleanup; } ret = vpci_scan_bus(ntb); @@ -1348,6 +1349,8 @@ static int epf_ntb_bind(struct pci_epf *epf) err_unregister: pci_unregister_driver(&vntb_pci_driver); +err_epc_cleanup: + epf_ntb_epc_cleanup(ntb); err_bar_alloc: epf_ntb_config_spad_bar_free(ntb);
There are two issues related to epf_ntb_epc_cleanup(). 1) It should call epf_ntb_config_sspad_bar_clear(). 2) The epf_ntb_bind() function should call epf_ntb_epc_cleanup() to cleanup. I also changed the ordering a bit. Unwinding should be done in the mirror order from how they are allocated. Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP") Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)