[PATCH v3 03/23] KVM: arm64: Allow block-level stage-2 annotation
Vincent Donnefort
vdonnefort at google.com
Mon Nov 2 12:46:08 PST 2026
On host to guest donation, pKVM annotates the host stage-2 invalid
entries with the GFN. Now that the host stage-2 preserves annotations on
block split, we can allow these annotations at block-level. This enables
safe support for guest stage-2 huge mappings.
Allowing block-level annotations also reduces stage-2 fragmentation when
unmapping a huge region, and reduces host stage-2 memory usage by
avoiding the allocation of intermediate page tables.
Signed-off-by: Vincent Donnefort <vdonnefort at google.com>
---
arch/arm64/kvm/hyp/pgtable.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index bf5c8e75dd52..abd32e94f6ff 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -949,9 +949,6 @@ static bool stage2_leaf_mapping_allowed(const struct kvm_pgtable_visit_ctx *ctx,
if (data->force_pte && ctx->level < KVM_PGTABLE_LAST_LEVEL)
return false;
- if (data->annotation)
- return true;
-
return kvm_block_mapping_supported(ctx, phys);
}
@@ -1180,8 +1177,9 @@ int kvm_pgtable_stage2_annotate(struct kvm_pgtable *pgt, u64 addr, u64 size,
struct stage2_map_data map_data = {
.mmu = pgt->mmu,
.memcache = mc,
- .force_pte = true,
.annotation = true,
+ /* Pretend ID-mapped for kvm_block_mapping_supported() */
+ .phys = ALIGN_DOWN(addr, PAGE_SIZE),
.pte_annot = pte_annot |
FIELD_PREP(KVM_INVALID_PTE_TYPE_MASK, type),
};
--
2.56.0.385.gac671c819a-goog
More information about the linux-arm-kernel
mailing list