Skip to content

Commit

Permalink
PCI: rockchip-ep: Improve rockchip_pcie_ep_unmap_addr()
Browse files Browse the repository at this point in the history
There is no need to loop over all regions to find the memory window used
to map an address. We can use rockchip_ob_region() to determine the
region index, together with a check that the address passed as argument
is the address used to create the mapping. Furthermore, the
ob_region_map bitmap should also be checked to ensure that we are not
attempting to unmap an address that is not mapped.

Link: https://lore.kernel.org/r/20241017015849.190271-4-dlemoal@kernel.org
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Damien Le Moal authored and Bjorn Helgaas committed Nov 25, 2024
1 parent 739e25f commit 57ed93f
Showing 1 changed file with 2 additions and 6 deletions.
8 changes: 2 additions & 6 deletions drivers/pci/controller/pcie-rockchip-ep.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,9 @@ static void rockchip_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn,
{
struct rockchip_pcie_ep *ep = epc_get_drvdata(epc);
struct rockchip_pcie *rockchip = &ep->rockchip;
u32 r;

for (r = 0; r < ep->max_regions; r++)
if (ep->ob_addr[r] == addr)
break;
u32 r = rockchip_ob_region(addr);

if (r == ep->max_regions)
if (addr != ep->ob_addr[r] || !test_bit(r, &ep->ob_region_map))
return;

rockchip_pcie_clear_ep_ob_atu(rockchip, r);
Expand Down

0 comments on commit 57ed93f

Please sign in to comment.