-----Original Message----- > > 在 2020年06月15日 22:18, HAGIO KAZUHITO(萩尾 一仁) 写道: > > -----Original Message----- > >> 在 2020年06月12日 00:00, crash-utility-request@xxxxxxxxxx 写道: > >>> Looks good to me, thank you Li RongQing. Please wait for another ack. > >> > >> The v2 looks good to me. > >> > >> Acked-by: Lianbo Jiang <lijiang@xxxxxxxxxx> > >> > >>> > >>> Acked-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> > >>> > >>> If someone can comment or create a patch for Xen, please let us know. > >>> I cannot test it, but I think we can integrate it with this patch if any. > >> > >> Anyway, this is a draft patch, but not sure if the patch happens to work > >> on the Xen. I don't have the Xen environment to confirm it. > >> > >> If Xen engineers would like to verify the draft patch, that would be nice. > > > > Thank you for your draft patch! > > If there is no response to the Xen patch until tomorrow morning, I think > > to apply only Li's patch separately for now. > > > OK, sounds good. OK, Li's patch queued for crash-7.2.9: https://github.com/crash-utility/crash/commit/c4862e1b2487d0bc7ab4dcfd43d088592a17bece Thank you all, Kazu > > > And one more thing, as we discussed internally, we'd like to introduce a > > title line to crash's commit log for --oneline readability and add helpful > > information more if available. On the other hand, I also would like to > > maintain the crash changelog [0] and its format for searchability. > > > Indeed, it makes reading and searching more convenient. > > Thanks. > Lianbo > > > [0] https://crash-utility.github.io/crash.changelog.html > > > > So, for Li's patch, I'll merge it with something like: > > > > [commit log] > > x86_64: Add support for 1GB huge pages to "vtop" command > > > > Add support for 1GB huge page to "vtop" command on x86_64. Without > > this patch, the command with a user virtual address corresponding to > > a 1GB huge page fails with the error message "vtop: seek error: > > physical address: <address> type: "page table"". > > > > crash> vtop 7f6e40000000 > > VIRTUAL PHYSICAL > > vtop: seek error: physical address: 3f53f000f000 type: "page table" > > > > [crash.changelog] > > - Add support for 1GB huge page to "vtop" command on x86_64. Without > > this patch, the command with a user virtual address corresponding to > > a 1GB huge page fails with the error message "vtop: seek error: > > physical address: <address> type: "page table"". > > (lirongqing@xxxxxxxxx, chukaiping@xxxxxxxxxxx) > > > > If you have any problems, please let me know. > > > > Thanks, > > Kazu > > > >> > >> Thanks. > >> Lianbo > >> > >> diff --git a/x86_64.c b/x86_64.c > >> index fc05e8af5695..90361a7c39c8 100644 > >> --- a/x86_64.c > >> +++ b/x86_64.c > >> @@ -2087,6 +2087,7 @@ x86_64_uvtop_level4_xen_wpt(struct task_context *tc, ulong uvaddr, physaddr_t *p > >> { > >> ulong pgd_pte; > >> ulong pud_pte; > >> + ulong pseudo_pud_pte; > >> ulong pmd_pte; > >> ulong pseudo_pmd_pte; > >> ulong pte; > >> @@ -2110,6 +2111,38 @@ x86_64_uvtop_level4_xen_wpt(struct task_context *tc, ulong uvaddr, physaddr_t > *p > >> if (!(pud_pte & _PAGE_PRESENT)) > >> goto no_upage; > >> > >> + if (pud_pte & _PAGE_PSE) { > >> + if (verbose) > >> + fprintf(fp, " PAGE: %lx (1GB) [machine]\n", > >> + PAGEBASE(pud_pte) & PHYSICAL_PAGE_MASK); > >> + > >> + pseudo_pud_pte = xen_m2p(PAGEBASE(pud_pte)); > >> + > >> + if (pseudo_pud_pte == XEN_MACHADDR_NOT_FOUND) { > >> + if (verbose) > >> + fprintf(fp, " PAGE: page not available\n"); > >> + *paddr = PADDR_NOT_AVAILABLE; > >> + return FALSE; > >> + } > >> + > >> + pseudo_pud_pte |= PAGEOFFSET(pud_pte); > >> + > >> + if (verbose) { > >> + fprintf(fp, " PAGE: %s (1GB)\n\n", > >> + mkstring(buf, VADDR_PRLEN, RJUST|LONG_HEX, > >> + MKSTR(PAGEBASE(pseudo_pud_pte) & > >> + PHYSICAL_PAGE_MASK))); > >> + > >> + x86_64_translate_pte(pseudo_pud_pte, 0, 0); > >> + } > >> + > >> + physpage = (PAGEBASE(pseudo_pud_pte) & PHYSICAL_PAGE_MASK) + > >> + (uvaddr & ~_1GB_PAGE_MASK); > >> + > >> + *paddr = physpage; > >> + return TRUE; > >> + } > >> + > >> /* > >> * pmd = pmd_offset(pud, address); > >> */ > >> @@ -2504,8 +2537,9 @@ no_kpage: > >> static int > >> x86_64_kvtop_xen_wpt(struct task_context *tc, ulong kvaddr, physaddr_t *paddr, int verbose) > >> { > >> - ulong *pgd; > >> + ulong *pgd; > >> ulong pud_pte; > >> + ulong pseudo_pud_pte; > >> ulong pmd_pte; > >> ulong pseudo_pmd_pte; > >> ulong pte; > >> @@ -2524,6 +2558,36 @@ x86_64_kvtop_xen_wpt(struct task_context *tc, ulong kvaddr, physaddr_t *paddr, > i > >> if (!(pud_pte & _PAGE_PRESENT)) > >> goto no_kpage; > >> > >> + if (pud_pte & _PAGE_PSE) { > >> + if (verbose) > >> + fprintf(fp, " PAGE: %lx (1GB) [machine]\n", > >> + PAGEBASE(pud_pte) & PHYSICAL_PAGE_MASK); > >> + > >> + pseudo_pud_pte = xen_m2p(PAGEBASE(pud_pte)); > >> + > >> + if (pseudo_pud_pte == XEN_MACHADDR_NOT_FOUND) { > >> + if (verbose) > >> + fprintf(fp, " PAGE: page not available\n"); > >> + *paddr = PADDR_NOT_AVAILABLE; > >> + return FALSE; > >> + } > >> + > >> + pseudo_pud_pte |= PAGEOFFSET(pud_pte); > >> + if (verbose) { > >> + fprintf(fp, " PAGE: %s (1GB)\n\n", > >> + mkstring(buf, VADDR_PRLEN, RJUST|LONG_HEX, > >> + MKSTR(PAGEBASE(pseudo_pud_pte) & > >> + PHYSICAL_PAGE_MASK))); > >> + > >> + x86_64_translate_pte(pseudo_pud_pte, 0, 0); > >> + } > >> + physpage = (PAGEBASE(pseudo_pud_pte) & PHYSICAL_PAGE_MASK) + > >> + (kvaddr & ~_1GB_PAGE_MASK); > >> + > >> + *paddr = physpage; > >> + return TRUE; > >> + } > >> + > >> /* > >> * pmd = pmd_offset(pgd, addr); > >> */ > > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility