[RFC PATCH 09/34] riscv: kvm: remove stack copy address of pXd in pXd_offset()
Yeoreum Yun
yeoreum.yun at arm.com
Mon Jul 13 06:55:48 PDT 2026
We want to change how pXdp_get() works with generic compile-time folded
page tables. To prepare for that, rework get_hva_mapping_size() to avoid
use of a stack copy of a pXd and pass it as argument to pXd_offset() so that
the folded entries value is ignored.
Replace direct uses of stack-based pXd values with pXd_offset_lockless()
and there should be no functional change.
Signed-off-by: Yeoreum Yun <yeoreum.yun at arm.com>
---
arch/riscv/kvm/mmu.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c
index 082f9b2617338..6d6042b81d790 100644
--- a/arch/riscv/kvm/mmu.c
+++ b/arch/riscv/kvm/mmu.c
@@ -362,10 +362,10 @@ static int get_hva_mapping_size(struct kvm *kvm,
{
int size = PAGE_SIZE;
unsigned long flags;
- pgd_t pgd;
- p4d_t p4d;
- pud_t pud;
- pmd_t pmd;
+ pgd_t *pgdp, pgd;
+ p4d_t *p4dp, p4d;
+ pud_t *pudp, pud;
+ pmd_t *pmdp, pmd;
/*
* Disable IRQs to prevent concurrent tear down of host page tables,
@@ -381,15 +381,18 @@ static int get_hva_mapping_size(struct kvm *kvm,
* value) and then p*d_offset() walks into the target huge page instead
* of the old page table (sees the new value).
*/
- pgd = pgdp_get(pgd_offset(kvm->mm, hva));
+ pgdp = pgd_offset(kvm->mm, hva);
+ pgd = pgdp_get(pgdp);
if (pgd_none(pgd))
goto out;
- p4d = p4dp_get(p4d_offset(&pgd, hva));
+ p4dp = p4d_offset_lockless(pgdp, pgd, hva);
+ p4d = p4dp_get(p4dp);
if (p4d_none(p4d) || !p4d_present(p4d))
goto out;
- pud = pudp_get(pud_offset(&p4d, hva));
+ pudp = pud_offset_lockless(p4dp, p4d, hva);
+ pud = pudp_get(pudp);
if (pud_none(pud) || !pud_present(pud))
goto out;
@@ -398,7 +401,8 @@ static int get_hva_mapping_size(struct kvm *kvm,
goto out;
}
- pmd = pmdp_get(pmd_offset(&pud, hva));
+ pmdp = pmd_offset_lockless(pudp, pud, hva);
+ pmd = pmdp_get(pmdp);
if (pmd_none(pmd) || !pmd_present(pmd))
goto out;
--
LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
More information about the kvm-riscv
mailing list