]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: dwc: ep: Return after clearing BAR-match inbound mapping
authorKoichiro Den <den@valinux.co.jp>
Mon, 2 Feb 2026 14:54:06 +0000 (23:54 +0900)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 19 Feb 2026 21:34:19 +0000 (15:34 -0600)
dw_pcie_ep_clear_ib_maps() first checks whether the inbound mapping for a
BAR is in BAR Match Mode (tracked via ep_func->bar_to_atu[bar]). Once
found, the iATU region is disabled and the bookkeeping is cleared.

BAR Match Mode and Address Match Mode mappings are mutually exclusive for a
given BAR, so there is nothing left for the Address Match Mode teardown
path to do after the BAR Match Mode mapping has been removed.

Return early after clearing the BAR Match Mode mapping to avoid running the
Address Match Mode teardown path. This makes the helper's intention
explicit and helps detect incorrect use of pci_epc_set_bar().

Suggested-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Link: https://patch.msgid.link/20260202145407.503348-2-den@valinux.co.jp
drivers/pci/controller/dwc/pcie-designware-ep.c

index 7e7844ff0f7e7b05dacc83bfd630835fff85019b..0ca05943a1e588efeb72d6418d9dbd12e59b7895 100644 (file)
@@ -165,6 +165,7 @@ static void dw_pcie_ep_clear_ib_maps(struct dw_pcie_ep *ep, u8 func_no, enum pci
                dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, atu_index);
                clear_bit(atu_index, ep->ib_window_map);
                ep_func->bar_to_atu[bar] = 0;
+               return;
        }
 
        /* Tear down all Address Match Mode mappings, if any. */