iommu/iova: Improve restart logic
authorRobin Murphy <robin.murphy@arm.com>
Fri, 5 Mar 2021 16:35:23 +0000 (16:35 +0000)
committerJoerg Roedel <jroedel@suse.de>
Thu, 18 Mar 2021 10:01:09 +0000 (11:01 +0100)
commit371d7955e3102fe38daf06de4ed9bfd29864354b
treed36edbb58f5b8083fcd0350d192b92a73c836384
parent7ae31cec5b70e301788b95de543abb56748dcfb6
iommu/iova: Improve restart logic

When restarting after searching below the cached node fails, resetting
the start point to the anchor node is often overly pessimistic. If
allocations are made with mixed limits - particularly in the case of the
opportunistic 32-bit allocation for PCI devices - this could mean
significant time wasted walking through the whole populated upper range
just to reach the initial limit. We can improve on that by implementing
a proper tree traversal to find the first node above the relevant limit,
and set the exact start point.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/076b3484d1e5057b95d8c387c894bd6ad2514043.1614962123.git.robin.murphy@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/iova.c