[PATCH 7/9] KVM: arm64: Do not try to map PUDs when they are folded into PMD
Punit Agrawal
punit1.agrawal at toshiba.co.jp
Tue Sep 8 23:23:07 EDT 2020
Hi Marc,
Noticed this patch while catching up with the lists.
Marc Zyngier <maz at kernel.org> writes:
> For the obscure cases where PMD and PUD are the same size
> (64kB pages with 42bit VA, for example, which results in only
> two levels of page tables), we can't map anything as a PUD,
> because there is... erm... no PUD to speak of. Everything is
> either a PMD or a PTE.
>
> So let's only try and map a PUD when its size is different from
> that of a PMD.
>
> Cc: stable at vger.kernel.org
> Fixes: b8e0ba7c8bea ("KVM: arm64: Add support for creating PUD hugepages at stage 2")
> Reported-by: Gavin Shan <gshan at redhat.com>
> Reported-by: Eric Auger <eric.auger at redhat.com>
> Reviewed-by: Alexandru Elisei <alexandru.elisei at arm.com>
> Reviewed-by: Gavin Shan <gshan at redhat.com>
> Tested-by: Gavin Shan <gshan at redhat.com>
> Tested-by: Eric Auger <eric.auger at redhat.com>
> Tested-by: Alexandru Elisei <alexandru.elisei at arm.com>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/kvm/mmu.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> index 0121ef2c7c8d..16b8660ddbcc 100644
> --- a/arch/arm64/kvm/mmu.c
> +++ b/arch/arm64/kvm/mmu.c
> @@ -1964,7 +1964,12 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
> (fault_status == FSC_PERM &&
> stage2_is_exec(mmu, fault_ipa, vma_pagesize));
>
> - if (vma_pagesize == PUD_SIZE) {
> + /*
> + * If PUD_SIZE == PMD_SIZE, there is no real PUD level, and
> + * all we have is a 2-level page table. Trying to map a PUD in
> + * this case would be fatally wrong.
> + */
> + if (PUD_SIZE != PMD_SIZE && vma_pagesize == PUD_SIZE) {
> pud_t new_pud = kvm_pfn_pud(pfn, mem_type);
>
> new_pud = kvm_pud_mkhuge(new_pud);
Good catch!
Missed the 64kb / 42b VA case while adding the initial support.
Thanks for fixing it.
Punit
More information about the linux-arm-kernel
mailing list