A fix is queued for crash-7.1.4: https://github.com/crash-utility/crash/commit/0901bd175398a88dc424d5a47d3ca71644c0c163 Thanks, Dave ----- Original Message ----- > > -----Original Message----- > > ----- Original Message ----- > > > Hi > > > > > > We have seen a problem when translating virtual to physical addresses. > > > It appears that upper flags are not cleared. > > > > > > Example below, observe that physical address is incorrect for 'PAGE:', > > > it include flags in upper bits. This value is also returned from > > > arm64_vtop_3level_4k(). > > > > > > crash> vtop ffffffc081000000 > > > VIRTUAL PHYSICAL > > > ffffffc081000000 81000000 > > > > > > PAGE DIRECTORY: ffffffc00007d000 > > > PGD: ffffffc00007d810 => 61fe003 > > > PMD: ffffffc0061fe040 => 20000081000711 > > > PAGE: 20000081000000 (2MB) > > > > > > PTE PHYSICAL FLAGS > > > 20000081000711 81000000 (VALID|SHARED|AF|PXN) > > > > > > vtop: WARNING: sparsemem: invalid section number: 8388610 > > > --- > > > arm64.c | 1 + > > > 1 file changed, 1 insertion(+) > > > > > > diff --git a/arm64.c b/arm64.c > > > index d1d75c4..2320df9 100644 > > > --- a/arm64.c > > > +++ b/arm64.c > > > @@ -802,6 +802,7 @@ arm64_vtop_3level_4k(ulong pgd, ulong vaddr, > > > physaddr_t *paddr, int verbose) > > > > > > if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) { > > > ulong sectionbase = pmd_val & > > SECTION_PAGE_MASK_2MB; > > > + sectionbase &= PHYS_MASK; > > > if (verbose) { > > > fprintf(fp, " PAGE: %lx (2MB)\n\n", > > sectionbase); > > > arm64_translate_pte(pmd_val, 0, 0); > > > -- > > > 1.9.1 > > > > > > -- > > > Crash-utility mailing list > > > Crash-utility@xxxxxxxxxx > > > https://www.redhat.com/mailman/listinfo/crash-utility > > > > Hi Johan, > > > > I also see it with 64k pages when the referenced memory is in the high > > ranges. > > But there are actually two issues here, because the > > SECTION_PAGE_MASK_2MB and SECTION_PAGE_MASK_512MB macros are > > incorrectly being defined as 32-bit values. > > > > How does this patch work for you?: > > > > > > --- a/arm64.c > > +++ b/arm64.c > > @@ -702,8 +702,8 @@ arm64_uvtop(struct task_context *tc, ulong uvaddr, > > physaddr_t *paddr, int verbos > > #define PMD_TYPE_MASK 3 > > #define PMD_TYPE_SECT 1 > > #define PMD_TYPE_TABLE 2 > > -#define SECTION_PAGE_MASK_2MB (~((MEGABYTES(2))-1)) > > -#define SECTION_PAGE_MASK_512MB (~((MEGABYTES(512))-1)) > > +#define SECTION_PAGE_MASK_2MB ((long)(~((MEGABYTES(2))-1))) > > +#define SECTION_PAGE_MASK_512MB ((long)(~((MEGABYTES(512))-1))) > > > > static int > > arm64_vtop_2level_64k(ulong pgd, ulong vaddr, physaddr_t *paddr, int > > verbose) @@ -729,7 +729,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; > > + ulong sectionbase = (pgd_val & SECTION_PAGE_MASK_512MB) > > + & PHYS_MASK; > > if (verbose) { > > fprintf(fp, " PAGE: %lx (512MB)\n\n", > > sectionbase); > > arm64_translate_pte(pgd_val, 0, 0); @@ -801,7 > > +801,7 @@ arm64_vtop_3level_4k(ulong pgd, ulong vaddr, physaddr_t > > *paddr, int verbose) > > goto no_page; > > > > if ((pmd_val & PMD_TYPE_MASK) == PMD_TYPE_SECT) { > > - ulong sectionbase = pmd_val & SECTION_PAGE_MASK_2MB; > > + ulong sectionbase = (pmd_val & SECTION_PAGE_MASK_2MB) & > > + PHYS_MASK; > > if (verbose) { > > fprintf(fp, " PAGE: %lx (2MB)\n\n", > > sectionbase); > > arm64_translate_pte(pmd_val, 0, 0); > > > > > > Hi Dave > > This patch seems to be working fine. > > Thanks > Johan > > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility