[PATCH 12/20] KVM: arm64: Handle huge mappings in __pkvm_host_force_reclaim_page_guest()
Wei-Lin Chang
weilin.chang at arm.com
Mon Sep 7 09:52:35 PDT 2026
On Mon, Aug 03, 2026 at 11:08:56AM +0100, Vincent Donnefort wrote:
[...]
> -static void hyp_poison_page(phys_addr_t phys)
> +static void __hyp_poison_page(void *addr, size_t size)
> {
> - void *addr = hyp_fixmap_map(phys);
> -
> - memset(addr, 0, PAGE_SIZE);
> + memset(addr, 0, size);
> /*
> * Prefer kvm_flush_dcache_to_poc() over __clean_dcache_guest_page()
> * here as the latter may elide the CMO under the assumption that FWB
> @@ -1304,19 +1302,15 @@ static void hyp_poison_page(phys_addr_t phys)
> * host stage-2 and would otherwise lead to a malicious host potentially
> * being able to read the contents of newly reclaimed guest pages.
> */
> - kvm_flush_dcache_to_poc(addr, PAGE_SIZE);
> - hyp_fixmap_unmap();
> + kvm_flush_dcache_to_poc(addr, size);
> }
>
> static void hyp_poison_range(phys_addr_t phys, u64 size)
> {
> - u64 offset;
> -
> - for (offset = 0; offset < size; offset += PAGE_SIZE)
> - hyp_poison_page(phys + offset);
> + __apply_guest_page(__hyp_va(phys), size, __hyp_poison_page);
> }
Patch 8 introduces hyp_poison_range(), and it is reimplemented in
another way here. Maybe just do it this way in the first time?
>
> -static int host_stage2_get_guest_info(phys_addr_t phys, struct pkvm_hyp_vm **vm,
> +static int host_stage2_get_guest_info(phys_addr_t phys, u64 *size, struct pkvm_hyp_vm **vm,
> u64 *gfn)
> {
> enum pkvm_page_state state;
> @@ -1344,34 +1338,43 @@ static int host_stage2_get_guest_info(phys_addr_t phys, struct pkvm_hyp_vm **vm,
> if (ret)
> return ret;
>
> - if (WARN_ON(level != KVM_PGTABLE_LAST_LEVEL))
> - return -EINVAL;
> + /* We only support either PAGE_SIZE or PMD_SIZE */
> + if (level < KVM_PGTABLE_LAST_LEVEL - 1)
> + return -E2BIG;
>
> - return host_stage2_decode_gfn_meta(pte, vm, gfn);
> + ret = host_stage2_decode_gfn_meta(pte, vm, gfn);
> + if (ret)
> + return ret;
> +
> + *size = kvm_granule_size(level);
> +
> + return 0;
This can also be moved into its own patch with get_valid_guest_pte(),
hyp_poison_range() changes in my opinion.
Thanks,
Wei-Lin Chang
[...]
More information about the linux-arm-kernel
mailing list