Re: [PATCH] KVM: RISC-V: Fix wrong usage of PGDIR_SIZE to check page sizes

From: Alexandre Ghiti
Date: Mon Jan 23 2023 - 06:17:13 EST


On Mon, Jan 23, 2023 at 12:03 PM Andrew Jones <ajones@xxxxxxxxxxxxxxxx> wrote:
>
> On Mon, Jan 23, 2023 at 10:29:28AM +0100, Alexandre Ghiti wrote:
> > At the moment, riscv only supports PMD and PUD hugepages. For sv39,
> > PGDIR_SIZE == PUD_SIZE but not for sv48 and sv57. So fix this by changing
> > PGDIR_SIZE into PUD_SIZE.
>
> Can you please add a sentence as to how you found this? Some test case
> or just by analysis?

Just by reading the code! That made me think that we can have more
hugepages for riscv since the introduction of sv48 and sv57, I'll send
this patch later.

>
> Anyway,
>
> Reviewed-by: Andrew Jones <ajones@xxxxxxxxxxxxxxxx>

Thanks,

Alex

>
> >
> > Signed-off-by: Alexandre Ghiti <alexghiti@xxxxxxxxxxxx>
> > ---
> > arch/riscv/kvm/mmu.c | 8 ++++----
> > 1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c
> > index 34b57e0be2ef..dbc4ca060174 100644
> > --- a/arch/riscv/kvm/mmu.c
> > +++ b/arch/riscv/kvm/mmu.c
> > @@ -585,7 +585,7 @@ bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
> > if (!kvm->arch.pgd)
> > return false;
> >
> > - WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PGDIR_SIZE);
> > + WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE);
> >
> > if (!gstage_get_leaf_entry(kvm, range->start << PAGE_SHIFT,
> > &ptep, &ptep_level))
> > @@ -603,7 +603,7 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
> > if (!kvm->arch.pgd)
> > return false;
> >
> > - WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PGDIR_SIZE);
> > + WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE);
> >
> > if (!gstage_get_leaf_entry(kvm, range->start << PAGE_SHIFT,
> > &ptep, &ptep_level))
> > @@ -645,12 +645,12 @@ int kvm_riscv_gstage_map(struct kvm_vcpu *vcpu,
> > if (logging || (vma->vm_flags & VM_PFNMAP))
> > vma_pagesize = PAGE_SIZE;
> >
> > - if (vma_pagesize == PMD_SIZE || vma_pagesize == PGDIR_SIZE)
> > + if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
> > gfn = (gpa & huge_page_mask(hstate_vma(vma))) >> PAGE_SHIFT;
> >
> > mmap_read_unlock(current->mm);
> >
> > - if (vma_pagesize != PGDIR_SIZE &&
> > + if (vma_pagesize != PUD_SIZE &&
> > vma_pagesize != PMD_SIZE &&
> > vma_pagesize != PAGE_SIZE) {
> > kvm_err("Invalid VMA page size 0x%lx\n", vma_pagesize);
> > --
> > 2.37.2
> >
> >
> > --
> > kvm-riscv mailing list
> > kvm-riscv@xxxxxxxxxxxxxxxxxxx
> > http://lists.infradead.org/mailman/listinfo/kvm-riscv