Hi Pingfan, Lianbo, -----Original Message----- > Hi, Pingfan > > Thank you for the update. > > > This bug connects with kernel commit 7bc1a0f9e176 ("arm64: mm: use > > single quantity to represent the PA to VA translation"), memstart_addr > > can be negative, which makes it different from real phys_offset. If > > using memstart_addr to calculate the real paddr, the unreasonable paddr > > will be got. > > > Furthermore, in crash utility, PTOV() needs memstart_addr to calculate > > VA from PA, while getting PFN offset in a dumpfile, phys_offset is > > required. > > As you mentioned above, the calculation formula has been changed, how to > deal with the backward compatibility issue? Should we use kernel version > to determine which code branch it should execute? Please correct me if I > was wrong. I'm not sure whether this is the same as Lianbo's concern, but my concern is that if a kernel has the "physvirt_offset" variable, PTOV() looks to be changed needlessly by the patch. Does it work with such an old kernel? static void arm64_calc_physvirt_offset(void) { ... ms->physvirt_offset = ms->phys_offset_nominal; if ((sp = kernel_symbol_search("physvirt_offset")) && machdep->machspec->kimage_voffset) { if (READMEM(pc->mfd, &physvirt_offset, sizeof(physvirt_offset), sp->value, sp->value - machdep->machspec->kimage_voffset) > 0) { ms->physvirt_offset = physvirt_offset; <<-- this case } } } -#define PTOV(X) \ - ((unsigned long)(X) - (machdep->machspec->physvirt_offset)) +#define PTOV(X) \ + (((unsigned long)(X) - (machdep->machspec->physvirt_offset)) | PAGE_OFFSET) Maybe we can set ms->physvirt_offset to work with the current PTOV() when no symbol? Sorry that I cannot try the patch or ideas because of no machine. Thanks, Kazu -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility