Re: [PATCH] PCI: endpoint: pci-epf-test: Roll back BAR mapping when subrange setup fails

From: Bjorn Helgaas

Date: Tue Mar 17 2026 - 11:27:18 EST


On Mon, Mar 16, 2026 at 11:02:25PM +0900, Koichiro Den wrote:
> When the BAR subrange mapping test on DWC-based platforms fails due to
> insufficient free inbound iATU regions,
> pci_epf_test_bar_subrange_setup() returns an error (-ENOSPC) but does
> not restore the original BAR mapping. This causes subsequent test runs
> to become confusing, since the failure may leave room for the next
> subrange mapping test to pass.
>
> Fix this by restoring the original BAR mapping when preparation of the
> subrange mapping fails, so that no side effect remains regardless of the
> test success or failure.
>
> Fixes: 6c5e6101423b ("PCI: endpoint: pci-epf-test: Add BAR subrange mapping test support")
> Reported-by: Christian Bruel <christian.bruel@xxxxxxxxxxx>
> Closes: https://lore.kernel.org/linux-pci/b2b03ebe-9482-4a13-b22f-7b44da096eed@xxxxxxxxxxx/
> Signed-off-by: Koichiro Den <den@xxxxxxxxxxxxx>

Applied to pci/for-linus for v7.0, thanks.

> ---
> drivers/pci/endpoint/functions/pci-epf-test.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c
> index 14e61ebe1f11..f44c36f5cac5 100644
> --- a/drivers/pci/endpoint/functions/pci-epf-test.c
> +++ b/drivers/pci/endpoint/functions/pci-epf-test.c
> @@ -898,16 +898,22 @@ static void pci_epf_test_bar_subrange_setup(struct pci_epf_test *epf_test,
> bar->submap = submap;
> bar->num_submap = nsub;
>
> ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar);
> if (ret) {
> dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret);
> bar->submap = old_submap;
> bar->num_submap = old_nsub;
> + ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar);
> + if (ret)
> + dev_warn(&epf->dev,
> + "failed to restore the original BAR mapping: %d\n",
> + ret);
> +
> kfree(submap);
> goto err;
> }
> kfree(old_submap);
>
> /*
> * Fill deterministic signatures into the physical regions that
> * each BAR subrange maps to. RC verifies these to ensure the
> --
> 2.51.0
>