summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuad Tabba <tabba@google.com>2026-03-06 17:02:26 +0300
committerMarc Zyngier <maz@kernel.org>2026-03-28 14:29:40 +0300
commit2175ca5384ba9f3d1f45745522cdeb5865488400 (patch)
tree356aea437ed639792208275be55b6c8353430482
parent5557a3f843bcef3de9a1237020348b2859812170 (diff)
downloadlinux-2175ca5384ba9f3d1f45745522cdeb5865488400.tar.xz
KVM: arm64: Simplify nested VMA shift calculation
In the kvm_s2_resolve_vma_size() helper, the local variable vma_pagesize is calculated from vma_shift, only to be used to bound the vma_pagesize by max_map_size and subsequently convert it back to a shift via __ffs(). Because vma_pagesize and max_map_size are both powers of two, we can simplify the logic by omitting vma_pagesize entirely and bounding the vma_shift directly using the shift of max_map_size. This achieves the same result while keeping the size-to-shift conversion out of the helper logic. Signed-off-by: Fuad Tabba <tabba@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org>
-rw-r--r--arch/arm64/kvm/mmu.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index 478fceeeb44b..1d423bc29e6c 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -1646,7 +1646,6 @@ static short kvm_s2_resolve_vma_size(struct vm_area_struct *vma,
bool *force_pte, phys_addr_t *ipa)
{
short vma_shift;
- long vma_pagesize;
if (*force_pte)
vma_shift = PAGE_SHIFT;
@@ -1677,8 +1676,6 @@ static short kvm_s2_resolve_vma_size(struct vm_area_struct *vma,
WARN_ONCE(1, "Unknown vma_shift %d", vma_shift);
}
- vma_pagesize = 1UL << vma_shift;
-
if (nested) {
unsigned long max_map_size;
@@ -1703,8 +1700,7 @@ static short kvm_s2_resolve_vma_size(struct vm_area_struct *vma,
max_map_size = PAGE_SIZE;
*force_pte = (max_map_size == PAGE_SIZE);
- vma_pagesize = min_t(long, vma_pagesize, max_map_size);
- vma_shift = __ffs(vma_pagesize);
+ vma_shift = min_t(short, vma_shift, __ffs(max_map_size));
}
return vma_shift;