[Crash-utility] Re: [PATCH 1/4] arm64: fix indent issue and refactor PTE_TO_PHYS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 03, 2024 at 10:58:24AM +0800, lijiang wrote:
> Hi, Kuan Ying
> Thank you for the patch set.
> 
> On Thu, Aug 22, 2024 at 3:50 PM <devel-request@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
> wrote:
> 
> > Date: Thu, 22 Aug 2024 15:43:16 +0800
> > From: Kuan-Ying Lee <kuan-ying.lee@xxxxxxxxxxxxx>
> > Subject:  [PATCH 1/4] arm64: fix indent issue and
> >         refactor PTE_TO_PHYS
> > To: kuan-ying.lee@xxxxxxxxxxxxx,
> >         devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
> > Message-ID: <20240822074333.249243-2-kuan-ying.lee@xxxxxxxxxxxxx>
> >
> > 1. Fix indent issue.
> > 2. Use PTE_TO_PHYS() to translate PTE to physical address instead of
> >    using open-coded to mask.
> >
> > Signed-off-by: Kuan-Ying Lee <kuan-ying.lee@xxxxxxxxxxxxx>
> > ---
> >  arm64.c | 118 ++++++++++++++++++++++++++++----------------------------
> >  defs.h  |   1 +
> >  2 files changed, 61 insertions(+), 58 deletions(-)
> >
> > diff --git a/arm64.c b/arm64.c
> > index 06e7451e0629..8812110fb950 100644
> > --- a/arm64.c
> > +++ b/arm64.c
> > @@ -1881,8 +1881,11 @@ arm64_uvtop(struct task_context *tc, ulong uvaddr,
> > physaddr_t *paddr, int verbos
> >
> >  #define PTE_ADDR_LOW   ((((1UL) << (48 - machdep->pageshift)) - 1) <<
> > machdep->pageshift)
> >  #define PTE_ADDR_HIGH  ((0xfUL) << 12)
> > +#define PTE_ADDR_MASK (machdep->max_physmem_bits == 52 ? \
> > +               (PTE_ADDR_LOW | PTE_ADDR_HIGH) : PTE_ADDR_LOW)
> > +#define PTE_ADDR_HIGH_SHIFT 36
> >  #define PTE_TO_PHYS(pteval)  (machdep->max_physmem_bits == 52 ? \
> > -       (((pteval & PTE_ADDR_LOW) | ((pteval & PTE_ADDR_HIGH) << 36))) :
> > (pteval & PTE_ADDR_LOW))
> > +       (((pteval & PTE_ADDR_LOW) | ((pteval & PTE_ADDR_HIGH) <<
> > PTE_ADDR_HIGH_SHIFT))) : (pteval & PTE_ADDR_MASK))
> >
> 
> Other changes are fine to me, only one question:
> 
> The macro PTE_ADDR_MASK looks redundant? And no need to use it in the macro
> definition PTE_TO_PHYS, because only when the condition
> 'machdep->max_physmem_bits == 52' is false, the  (pteval & PTE_ADDR_MASK)
> gets executed, it is redundant to check the same condition again in the
> macro PTE_ADDR_MASK.
> 
> Maybe it is good enough like this? And remove the macro definition
> PTE_ADDR_MASK.
> 
>  #define PTE_TO_PHYS(pteval)  (machdep->max_physmem_bits == 52 ? \
> -       (((pteval & PTE_ADDR_LOW) | ((pteval & PTE_ADDR_HIGH) << 36))) :
> (pteval & PTE_ADDR_LOW))
> +       (((pteval & PTE_ADDR_LOW) | ((pteval & PTE_ADDR_HIGH) <<
> PTE_ADDR_HIGH_SHIFT))) : (pteval & PTE_ADDR_LOW))
> 
> Just want to confirm with you.

Hi Lianbo,

You are right.
I will send the v2 version.

Thanks,
Kuan-Ying Lee

> 
> Thanks
> Lianbo
> 
> 
> >  #define PUD_TYPE_MASK   3
> >  #define PUD_TYPE_SECT   1
> > @@ -1906,9 +1909,9 @@ arm64_vtop_2level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pgd_base = (ulong *)pgd;
> >         FILL_PGD(pgd_base, KVADDR, machdep->ptrs_per_pgd * sizeof(ulong));
> >         pgd_ptr = pgd_base + (((vaddr) >> PGDIR_SHIFT_L2_64K) &
> > (machdep->ptrs_per_pgd - 1));
> > -        pgd_val = ULONG(machdep->pgd + PAGEOFFSET(pgd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> > +       pgd_val = ULONG(machdep->pgd + PAGEOFFSET(pgd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> >         if (!pgd_val)
> >                 goto no_page;
> >
> > @@ -1918,7 +1921,7 @@ arm64_vtop_2level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >          */
> >
> >         if ((pgd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = (pgd_val & SECTION_PAGE_MASK_512MB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pgd_val &
> > SECTION_PAGE_MASK_512MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (512MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -1928,17 +1931,17 @@ arm64_vtop_2level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 return TRUE;
> >         }
> >
> > -       pte_base = (ulong *)PTOV(pgd_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pte_base = (ulong *)PTOV(PTE_TO_PHYS(pgd_val));
> >         FILL_PTBL(pte_base, KVADDR, PTRS_PER_PTE_L2_64K * sizeof(ulong));
> >         pte_ptr = pte_base + (((vaddr) >> machdep->pageshift) &
> > (PTRS_PER_PTE_L2_64K - 1));
> > -        pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> > +       pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> >         if (!pte_val)
> >                 goto no_page;
> >
> >         if (pte_val & PTE_VALID) {
> > -               *paddr = (PAGEBASE(pte_val) & PHYS_MASK) +
> > PAGEOFFSET(vaddr);
> > +               *paddr = PTE_TO_PHYS(pte_val) + PAGEOFFSET(vaddr);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  %s\n\n",
> > PAGEBASE(*paddr),
> >                                 IS_ZEROPAGE(PAGEBASE(*paddr)) ? "(ZERO
> > PAGE)" : "");
> > @@ -1972,9 +1975,9 @@ arm64_vtop_3level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pgd_base = (ulong *)pgd;
> >         FILL_PGD(pgd_base, KVADDR, machdep->ptrs_per_pgd * sizeof(ulong));
> >         pgd_ptr = pgd_base + (((vaddr) >> PGDIR_SHIFT_L3_64K) &
> > (machdep->ptrs_per_pgd - 1));
> > -        pgd_val = ULONG(machdep->pgd + PGDIR_OFFSET_L3_64K(pgd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> > +       pgd_val = ULONG(machdep->pgd + PGDIR_OFFSET_L3_64K(pgd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> >         if (!pgd_val)
> >                 goto no_page;
> >
> > @@ -1985,14 +1988,14 @@ arm64_vtop_3level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pmd_base = (ulong *)PTOV(PTE_TO_PHYS(pgd_val));
> >         FILL_PMD(pmd_base, KVADDR, PTRS_PER_PMD_L3_64K * sizeof(ulong));
> >         pmd_ptr = pmd_base + (((vaddr) >> PMD_SHIFT_L3_64K) &
> > (PTRS_PER_PMD_L3_64K - 1));
> > -        pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> > +       pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> >         if (!pmd_val)
> >                 goto no_page;
> >
> >         if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = PTE_TO_PHYS(pmd_val) &
> > SECTION_PAGE_MASK_512MB;
> > +               ulong sectionbase = PTE_TO_PHYS(pmd_val &
> > SECTION_PAGE_MASK_512MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (512MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -2005,9 +2008,9 @@ arm64_vtop_3level_64k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pte_base = (ulong *)PTOV(PTE_TO_PHYS(pmd_val));
> >         FILL_PTBL(pte_base, KVADDR, PTRS_PER_PTE_L3_64K * sizeof(ulong));
> >         pte_ptr = pte_base + (((vaddr) >> machdep->pageshift) &
> > (PTRS_PER_PTE_L3_64K - 1));
> > -        pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> > +       pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> >         if (!pte_val)
> >                 goto no_page;
> >
> > @@ -2045,7 +2048,7 @@ arm64_vtop_2level_16k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pgd_base = (ulong *)pgd;
> >         FILL_PGD(pgd_base, KVADDR, machdep->ptrs_per_pgd * sizeof(ulong));
> >         pgd_ptr = pgd_base + (((vaddr) >> PGDIR_SHIFT_L2_16K) &
> > (machdep->ptrs_per_pgd - 1));
> > -       pgd_val = ULONG(machdep->pgd + PAGEOFFSET(pgd_ptr));
> > +       pgd_val = ULONG(machdep->pgd + PGDIR_OFFSET_L2_16K(pgd_ptr));
> >         if (verbose)
> >                 fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> >         if (!pgd_val)
> > @@ -2057,7 +2060,7 @@ arm64_vtop_2level_16k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >          */
> >
> >         if ((pgd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = (pgd_val & SECTION_PAGE_MASK_32MB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pgd_val &
> > SECTION_PAGE_MASK_32MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (32MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -2067,7 +2070,7 @@ arm64_vtop_2level_16k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 return TRUE;
> >         }
> >
> > -       pte_base = (ulong *)PTOV(pgd_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pte_base = (ulong *)PTOV(PTE_TO_PHYS(pgd_val));
> >         FILL_PTBL(pte_base, KVADDR, PTRS_PER_PTE_L2_16K * sizeof(ulong));
> >         pte_ptr = pte_base + (((vaddr) >> machdep->pageshift) &
> > (PTRS_PER_PTE_L2_16K - 1));
> >         pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > @@ -2077,7 +2080,7 @@ arm64_vtop_2level_16k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 goto no_page;
> >
> >         if (pte_val & PTE_VALID) {
> > -               *paddr = (PAGEBASE(pte_val) & PHYS_MASK) +
> > PAGEOFFSET(vaddr);
> > +               *paddr = PTE_TO_PHYS(pte_val) + PAGEOFFSET(vaddr);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  %s\n\n",
> > PAGEBASE(*paddr),
> >                                 IS_ZEROPAGE(PAGEBASE(*paddr)) ? "(ZERO
> > PAGE)" : "");
> > @@ -2130,7 +2133,7 @@ arm64_vtop_3level_16k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 goto no_page;
> >
> >         if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = PTE_TO_PHYS(pmd_val) &
> > SECTION_PAGE_MASK_32MB;
> > +               ulong sectionbase = PTE_TO_PHYS(pmd_val &
> > SECTION_PAGE_MASK_32MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (32MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -2184,14 +2187,14 @@ arm64_vtop_3level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pgd_base = (ulong *)pgd;
> >         FILL_PGD(pgd_base, KVADDR, PTRS_PER_PGD_L3_4K * sizeof(ulong));
> >         pgd_ptr = pgd_base + (((vaddr) >> PGDIR_SHIFT_L3_4K) &
> > (PTRS_PER_PGD_L3_4K - 1));
> > -        pgd_val = ULONG(machdep->pgd + PAGEOFFSET(pgd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> > +       pgd_val = ULONG(machdep->pgd + PAGEOFFSET(pgd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> >         if (!pgd_val)
> >                 goto no_page;
> >
> >         if ((pgd_val & PUD_TYPE_MASK) == PUD_TYPE_SECT) {
> > -               ulong sectionbase = (pgd_val & SECTION_PAGE_MASK_1GB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pgd_val &
> > SECTION_PAGE_MASK_1GB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (1GB)\n\n", sectionbase);
> >                         arm64_translate_pte(pgd_val, 0, 0);
> > @@ -2203,17 +2206,17 @@ arm64_vtop_3level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >          * #define __PAGETABLE_PUD_FOLDED
> >          */
> >
> > -       pmd_base = (ulong *)PTOV(pgd_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pmd_base = (ulong *)PTOV(PTE_TO_PHYS(pgd_val));
> >         FILL_PMD(pmd_base, KVADDR, PTRS_PER_PMD_L3_4K * sizeof(ulong));
> >         pmd_ptr = pmd_base + (((vaddr) >> PMD_SHIFT_L3_4K) &
> > (PTRS_PER_PMD_L3_4K - 1));
> > -        pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> > +       pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> >         if (!pmd_val)
> >                 goto no_page;
> >
> >         if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = (pmd_val & SECTION_PAGE_MASK_2MB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pmd_val &
> > SECTION_PAGE_MASK_2MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (2MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -2223,17 +2226,17 @@ arm64_vtop_3level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 return TRUE;
> >         }
> >
> > -       pte_base = (ulong *)PTOV(pmd_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pte_base = (ulong *)PTOV(PTE_TO_PHYS(pmd_val));
> >         FILL_PTBL(pte_base, KVADDR, PTRS_PER_PTE_L3_4K * sizeof(ulong));
> >         pte_ptr = pte_base + (((vaddr) >> machdep->pageshift) &
> > (PTRS_PER_PTE_L3_4K - 1));
> > -        pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> > +       pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> >         if (!pte_val)
> >                 goto no_page;
> >
> >         if (pte_val & PTE_VALID) {
> > -               *paddr = (PAGEBASE(pte_val) & PHYS_MASK) +
> > PAGEOFFSET(vaddr);
> > +               *paddr = PTE_TO_PHYS(pte_val) + PAGEOFFSET(vaddr);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  %s\n\n",
> > PAGEBASE(*paddr),
> >                                 IS_ZEROPAGE(PAGEBASE(*paddr)) ? "(ZERO
> > PAGE)" : "");
> > @@ -2268,24 +2271,23 @@ arm64_vtop_4level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >         pgd_base = (ulong *)pgd;
> >         FILL_PGD(pgd_base, KVADDR, PTRS_PER_PGD_L4_4K * sizeof(ulong));
> >         pgd_ptr = pgd_base + (((vaddr) >> PGDIR_SHIFT_L4_4K) &
> > (PTRS_PER_PGD_L4_4K - 1));
> > -        pgd_val = ULONG(machdep->pgd + PGDIR_OFFSET_48VA(pgd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> > +       pgd_val = ULONG(machdep->pgd + PGDIR_OFFSET_48VA(pgd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PGD: %lx => %lx\n", (ulong)pgd_ptr,
> > pgd_val);
> >         if (!pgd_val)
> >                 goto no_page;
> >
> > -       pud_base = (ulong *)PTOV(pgd_val & PHYS_MASK & PGDIR_MASK_48VA);
> > -
> > +       pud_base = (ulong *)PTOV(PTE_TO_PHYS(pgd_val));
> >         FILL_PUD(pud_base, KVADDR, PTRS_PER_PUD_L4_4K * sizeof(ulong));
> >         pud_ptr = pud_base + (((vaddr) >> PUD_SHIFT_L4_4K) &
> > (PTRS_PER_PUD_L4_4K - 1));
> > -        pud_val = ULONG(machdep->pud + PAGEOFFSET(pud_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PUD: %lx => %lx\n", (ulong)pud_ptr,
> > pud_val);
> > +       pud_val = ULONG(machdep->pud + PAGEOFFSET(pud_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PUD: %lx => %lx\n", (ulong)pud_ptr,
> > pud_val);
> >         if (!pud_val)
> >                 goto no_page;
> >
> >         if ((pud_val & PUD_TYPE_MASK) == PUD_TYPE_SECT) {
> > -               ulong sectionbase = (pud_val & SECTION_PAGE_MASK_1GB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pud_val &
> > SECTION_PAGE_MASK_1GB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (1GB)\n\n", sectionbase);
> >                         arm64_translate_pte(pud_val, 0, 0);
> > @@ -2294,17 +2296,17 @@ arm64_vtop_4level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 return TRUE;
> >         }
> >
> > -       pmd_base = (ulong *)PTOV(pud_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pmd_base = (ulong *)PTOV(PTE_TO_PHYS(pud_val));
> >         FILL_PMD(pmd_base, KVADDR, PTRS_PER_PMD_L4_4K * sizeof(ulong));
> >         pmd_ptr = pmd_base + (((vaddr) >> PMD_SHIFT_L4_4K) &
> > (PTRS_PER_PMD_L4_4K - 1));
> > -        pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> > +       pmd_val = ULONG(machdep->pmd + PAGEOFFSET(pmd_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PMD: %lx => %lx\n", (ulong)pmd_ptr,
> > pmd_val);
> >         if (!pmd_val)
> >                 goto no_page;
> >
> >         if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) {
> > -               ulong sectionbase = (pmd_val & SECTION_PAGE_MASK_2MB) &
> > PHYS_MASK;
> > +               ulong sectionbase = PTE_TO_PHYS(pmd_val &
> > SECTION_PAGE_MASK_2MB);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  (2MB%s)\n\n",
> > sectionbase,
> >                                 IS_ZEROPAGE(sectionbase) ? ", ZERO PAGE" :
> > "");
> > @@ -2314,17 +2316,17 @@ arm64_vtop_4level_4k(ulong pgd, ulong vaddr,
> > physaddr_t *paddr, int verbose)
> >                 return TRUE;
> >         }
> >
> > -       pte_base = (ulong *)PTOV(pmd_val & PHYS_MASK &
> > (s32)machdep->pagemask);
> > +       pte_base = (ulong *)PTOV(PTE_TO_PHYS(pmd_val));
> >         FILL_PTBL(pte_base, KVADDR, PTRS_PER_PTE_L4_4K * sizeof(ulong));
> >         pte_ptr = pte_base + (((vaddr) >> machdep->pageshift) &
> > (PTRS_PER_PTE_L4_4K - 1));
> > -        pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > -        if (verbose)
> > -                fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> > +       pte_val = ULONG(machdep->ptbl + PAGEOFFSET(pte_ptr));
> > +       if (verbose)
> > +               fprintf(fp, "   PTE: %lx => %lx\n", (ulong)pte_ptr,
> > pte_val);
> >         if (!pte_val)
> >                 goto no_page;
> >
> >         if (pte_val & PTE_VALID) {
> > -               *paddr = (PAGEBASE(pte_val) & PHYS_MASK) +
> > PAGEOFFSET(vaddr);
> > +               *paddr = PTE_TO_PHYS(pte_val) + PAGEOFFSET(vaddr);
> >                 if (verbose) {
> >                         fprintf(fp, "  PAGE: %lx  %s\n\n",
> > PAGEBASE(*paddr),
> >                                 IS_ZEROPAGE(PAGEBASE(*paddr)) ? "(ZERO
> > PAGE)" : "");
> > diff --git a/defs.h b/defs.h
> > index dfbd2419f969..92e8708367d1 100644
> > --- a/defs.h
> > +++ b/defs.h
> > @@ -3311,6 +3311,7 @@ typedef signed int s32;
> >  #define PGDIR_SHIFT_L2_16K   (25)
> >  #define PGDIR_SIZE_L2_16K    ((1UL) << PGDIR_SHIFT_L2_16K)
> >  #define PGDIR_MASK_L2_16K    (~(PGDIR_SIZE_L2_16K-1))
> > +#define PGDIR_OFFSET_L2_16K(X) (((ulong)(X)) & ((machdep->ptrs_per_pgd *
> > 8) - 1))
> >
> >  /*
> >   * 3-levels / 16K pages
> > --
> > 2.43.0
> >
--
Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux