[PATCH 02/20] KVM: arm64: Propagate host stage-2 annotated entries on block split
Wei-Lin Chang
weilin.chang at arm.com
Mon Sep 7 06:58:41 PDT 2026
On Mon, Aug 03, 2026 at 11:08:46AM +0100, Vincent Donnefort wrote:
[...]
> static void stage2_map_prefault_idmap(const struct kvm_pgtable_visit_ctx *ctx, kvm_pte_t *ptep)
> {
> kvm_pte_t block_pte = ctx->old;
> + bool counted, valid;
> u64 pa;
> int i;
>
> - if (!kvm_pte_valid(block_pte))
> + counted = stage2_pte_is_counted(block_pte);
> + valid = kvm_pte_valid(block_pte);
> +
> + if (!valid && !counted)
> + return;
> +
> + /*
> + * Shared walks not supported: cannot rollback refcounts on break
> + * failure.
> + */
> + if (counted && WARN_ON_ONCE(kvm_pgtable_walk_shared(ctx)))
Doesn't patch 1 also need this shared walk check,
> return;
>
> pa = ALIGN_DOWN(ctx->addr, kvm_granule_size(ctx->level));
> for (i = 0; i < PTRS_PER_PTE; ++i, ++ptep, pa += kvm_granule_size(ctx->level + 1)) {
> - kvm_pte_t pte = kvm_init_valid_leaf_pte(pa, block_pte, ctx->level + 1);
> + kvm_pte_t pte = valid ?
> + kvm_init_valid_leaf_pte(pa, block_pte, ctx->level + 1) :
> + block_pte;
>
> /*
> * Skip ptes in the range being modified by the caller if we're
> @@ -1053,8 +1066,11 @@ static void stage2_map_prefault_idmap(const struct kvm_pgtable_visit_ctx *ctx, k
> * that should happen very infrequently.
> */
> if ((ctx->level < (KVM_PGTABLE_LAST_LEVEL - 1)) ||
> - (pa < ctx->addr) || (pa >= ctx->end))
> + (pa < ctx->addr) || (pa >= ctx->end)) {
> *ptep = pte;
> + if (counted)
> + ctx->mm_ops->get_page(ptep);
and this get_page() ?
Thanks,
Wei-Lin Chang
[...]
More information about the linux-arm-kernel
mailing list