[PATCH v2 3/6] KVM: arm64: Avoid mapping size adjustment on permission fault
Alexandru Elisei
alexandru.elisei at arm.com
Tue Jul 27 09:00:37 PDT 2021
Hi Marc,
On 7/26/21 4:35 PM, Marc Zyngier wrote:
> Since we only support PMD-sized mappings for THP, getting
> a permission fault on a level that results in a mapping
> being larger than PAGE_SIZE is a sure indication that we have
> already upgraded our mapping to a PMD.
>
> In this case, there is no need to try and parse userspace page
> tables, as the fault information already tells us everything.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/kvm/mmu.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> index 0adc1617c557..ebb28dd4f2c9 100644
> --- a/arch/arm64/kvm/mmu.c
> +++ b/arch/arm64/kvm/mmu.c
> @@ -1076,9 +1076,14 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
> * If we are not forced to use page mapping, check if we are
> * backed by a THP and thus use block mapping if possible.
> */
> - if (vma_pagesize == PAGE_SIZE && !(force_pte || device))
> - vma_pagesize = transparent_hugepage_adjust(kvm, memslot, hva,
> - &pfn, &fault_ipa);
> + if (vma_pagesize == PAGE_SIZE && !(force_pte || device)) {
> + if (fault_status == FSC_PERM && fault_granule > PAGE_SIZE)
> + vma_pagesize = fault_granule;
> + else
> + vma_pagesize = transparent_hugepage_adjust(kvm, memslot,
> + hva, &pfn,
> + &fault_ipa);
> + }
Looks good:
Reviewed-by: Alexandru Elisei <alexandru.elisei at arm.com>
Thanks,
Alex
>
> if (fault_status != FSC_PERM && !device && kvm_has_mte(kvm)) {
> /* Check the VMM hasn't introduced a new VM_SHARED VMA */
More information about the linux-arm-kernel
mailing list