[PATCH v2 02/18] KVM: arm64: Add pkvm_remove_mappings

Fuad Tabba fuad.tabba at linux.dev
Tue Jul 14 10:48:12 PDT 2026


On Mon, 6 Jul 2026 at 18:54, Vincent Donnefort <vdonnefort at google.com> wrote:
>
> Add the counterpart to pkvm_create_mappings(), allowing previously
> mapped ranges to be removed. This will be useful for the upcoming pKVM
> heap allocator to manage its private mappings.
>
> Signed-off-by: Vincent Donnefort <vdonnefort at google.com>

Reviewed-by: Fuad Tabba <fuad.tabba at linux.dev>

Cheers,
/fuad

>
> diff --git a/arch/arm64/kvm/hyp/include/nvhe/mm.h b/arch/arm64/kvm/hyp/include/nvhe/mm.h
> index d3137c16b632..725bb0fb941d 100644
> --- a/arch/arm64/kvm/hyp/include/nvhe/mm.h
> +++ b/arch/arm64/kvm/hyp/include/nvhe/mm.h
> @@ -25,6 +25,7 @@ int hyp_back_vmemmap(phys_addr_t back);
>  int pkvm_cpu_set_vector(enum arm64_hyp_spectre_vector slot);
>  int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot);
>  int pkvm_create_mappings_locked(void *from, void *to, enum kvm_pgtable_prot prot);
> +void pkvm_remove_mappings(void *from, void *to);
>  int __pkvm_create_private_mapping(phys_addr_t phys, size_t size,
>                                   enum kvm_pgtable_prot prot,
>                                   unsigned long *haddr);
> diff --git a/arch/arm64/kvm/hyp/nvhe/mm.c b/arch/arm64/kvm/hyp/nvhe/mm.c
> index 773426a68d2d..ec59da1322a7 100644
> --- a/arch/arm64/kvm/hyp/nvhe/mm.c
> +++ b/arch/arm64/kvm/hyp/nvhe/mm.c
> @@ -146,6 +146,20 @@ int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot)
>         return ret;
>  }
>
> +void pkvm_remove_mappings(void *from, void *to)
> +{
> +       u64 size;
> +
> +       to = PTR_ALIGN(to, PAGE_SIZE);
> +       from = PTR_ALIGN_DOWN(from, PAGE_SIZE);
> +       size = (u64)to - (u64)from;
> +       WARN_ON(from > to);
> +
> +       hyp_spin_lock(&pkvm_pgd_lock);
> +       WARN_ON(kvm_pgtable_hyp_unmap(&pkvm_pgtable, (u64)from, size) != size);
> +       hyp_spin_unlock(&pkvm_pgd_lock);
> +}
> +
>  int hyp_back_vmemmap(phys_addr_t back)
>  {
>         unsigned long i, start, size, end = 0;
> --
> 2.55.0.rc2.803.g1fd1e6609c-goog
>



More information about the linux-arm-kernel mailing list