]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: endpoint: Fix error handling in epf_ntb_epc_cleanup()
authorDan Carpenter <dan.carpenter@linaro.org>
Mon, 10 Jun 2024 09:33:49 +0000 (12:33 +0300)
committerKrzysztof Wilczyński <kwilczynski@kernel.org>
Thu, 4 Jul 2024 14:40:53 +0000 (14:40 +0000)
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")
Link: https://lore.kernel.org/linux-pci/aaffbe8d-7094-4083-8146-185f4a84e8a1@moroto.mountain
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/pci/endpoint/functions/pci-epf-vntb.c

index 7f05a44e9a9fde4c5a4e930dd5fd3f3c7f460d32..874cb097b093ae645bbc4bf3c9d28ca812d7689d 100644 (file)
@@ -799,8 +799,9 @@ err_config_interrupt:
  */
 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);