We want to change how pXdp_get() works with generic compile-time folded
page tables. To prepare for that, rework host_pfn_mapping_level() 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 <[email protected]>
---
 arch/loongarch/kvm/mmu.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/arch/loongarch/kvm/mmu.c b/arch/loongarch/kvm/mmu.c
index e104897aa5328..837b40bb694f4 100644
--- a/arch/loongarch/kvm/mmu.c
+++ b/arch/loongarch/kvm/mmu.c
@@ -669,10 +669,10 @@ static int host_pfn_mapping_level(struct kvm *kvm, gfn_t 
gfn,
        int level = 0;
        unsigned long hva;
        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;
 
        /*
         * Note, using the already-retrieved memslot and __gfn_to_hva_memslot()
@@ -698,19 +698,23 @@ static int host_pfn_mapping_level(struct kvm *kvm, gfn_t 
gfn,
         * 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;
 
-       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}


Reply via email to