summaryrefslogtreecommitdiffstats
path: root/arch/arm64
diff options
context:
space:
mode:
authorDavid Brazdil <dbrazdil@google.com>2021-07-28 15:32:32 +0000
committerMarc Zyngier <maz@kernel.org>2021-08-20 12:02:36 +0100
commit14ecf075fe5be01860927fdf3aa11d7b18023ab2 (patch)
treec5bfbedf9936a95d253a0dd474cc243fc3084650 /arch/arm64
parentfb1c16c0aea805500ea62f007a92ea10945e3b63 (diff)
downloadlinux-stable-14ecf075fe5be01860927fdf3aa11d7b18023ab2.tar.gz
linux-stable-14ecf075fe5be01860927fdf3aa11d7b18023ab2.tar.bz2
linux-stable-14ecf075fe5be01860927fdf3aa11d7b18023ab2.zip
KVM: arm64: Minor optimization of range_is_memory
Currently range_is_memory finds the corresponding struct memblock_region for both the lower and upper bounds of the given address range with two rounds of binary search, and then checks that the two memblocks are the same. Simplify this by only doing binary search on the lower bound and then checking that the upper bound is in the same memblock. Signed-off-by: David Brazdil <dbrazdil@google.com> Reviewed-by: Quentin Perret <qperret@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20210728153232.1018911-3-dbrazdil@google.com
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/kvm/hyp/nvhe/mem_protect.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c
index c11b50dd0050..5af2e28b9cd7 100644
--- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c
+++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c
@@ -204,16 +204,19 @@ bool addr_is_memory(phys_addr_t phys)
return find_mem_range(phys, &range);
}
+static bool is_in_mem_range(u64 addr, struct kvm_mem_range *range)
+{
+ return range->start <= addr && addr < range->end;
+}
+
static bool range_is_memory(u64 start, u64 end)
{
- struct kvm_mem_range r1, r2;
+ struct kvm_mem_range r;
- if (!find_mem_range(start, &r1) || !find_mem_range(end - 1, &r2))
- return false;
- if (r1.start != r2.start)
+ if (!find_mem_range(start, &r))
return false;
- return true;
+ return is_in_mem_range(end - 1, &r);
}
static inline int __host_stage2_idmap(u64 start, u64 end,