Hi Marc,

On 9/2/20 9:10 PM, Marc Zyngier wrote:
On 2020-09-02 11:59, Alexandru Elisei wrote:

[...]


 From 2a345a826a47f9061bb37045a1d89ea54b51fb80 Mon Sep 17 00:00:00 2001
From: Marc Zyngier <m...@kernel.org>
Date: Wed, 2 Sep 2020 11:18:29 +0100
Subject: [PATCH] KVM: arm64: Do not try to map PUDs when they are folded into
  PMD

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: sta...@vger.kernel.org
Fixes: b8e0ba7c8bea ("KVM: arm64: Add support for creating PUD hugepages at stage 
2")
Reported-by: Gavin Shan <gs...@redhat.com>
Reported-by: Eric Auger <eric.au...@redhat.com>
Signed-off-by: Marc Zyngier <m...@kernel.org>
---
  arch/arm64/kvm/mmu.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)


It worked for me either:

Reviewed-by: Gavin Shan <gs...@redhat.com>
Tested-by: Gavin Shan <gs...@redhat.com>

diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index ba00bcc0c884..c3a92fa537fd 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -1970,7 +1970,7 @@ 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 && vma_pagesize == PUD_SIZE) {
          pud_t new_pud = kvm_pfn_pud(pfn, mem_type);

          new_pud = kvm_pud_mkhuge(new_pud);

Thanks,
Gavin

_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to