diff --git a/arch/arm64/kvm/hyp/include/nvhe/mm.h b/arch/arm64/kvm/hyp/include/nvhe/mm.h index 164a0986dc52..3ceb29b36069 100644 --- a/arch/arm64/kvm/hyp/include/nvhe/mm.h +++ b/arch/arm64/kvm/hyp/include/nvhe/mm.h @@ -28,5 +28,6 @@ int __pkvm_create_private_mapping(phys_addr_t phys, size_t size, enum kvm_pgtable_prot prot, unsigned long *haddr); int pkvm_alloc_private_va_range(size_t size, unsigned long *haddr); +void pkvm_remove_mappings(void *from, void *to); #endif /* __KVM_HYP_MM_H */ diff --git a/arch/arm64/kvm/hyp/nvhe/mm.c b/arch/arm64/kvm/hyp/nvhe/mm.c index c80b2c007619..ca4ccc4e9894 100644 --- a/arch/arm64/kvm/hyp/nvhe/mm.c +++ b/arch/arm64/kvm/hyp/nvhe/mm.c @@ -136,6 +136,15 @@ int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot) return ret; } +void pkvm_remove_mappings(void *from, void *to) +{ + unsigned long size = (unsigned long)to - (unsigned long)from; + + 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;