RE: [PATCH] arm64, vmcoreinfo : Append 'MAX_USER_VA_BITS' and 'MAX_PHYSMEM_BITS' to vmcoreinfo
From: Kazuhito Hagio <hidden>
Date: 2019-02-13 19:54:50
Also in:
kexec
On 2/13/2019 1:22 PM, James Morse wrote:
Hi guys, On 13/02/2019 11:15, Dave Young wrote:quoted
On 02/12/19 at 11:03pm, Kazuhito Hagio wrote:quoted
On 2/12/2019 2:59 PM, Bhupesh Sharma wrote:quoted
BTW, in the makedumpfile enablement patch thread for ARMv8.2 LVA (which I sent out for 52-bit User space VA enablement) (see [0]), Kazu mentioned that the changes look necessary. [0]. http://lists.infradead.org/pipermail/kexec/2019-February/022431.htmlquoted
quoted
quoted
The increased 'PTRS_PER_PGD' value for such cases needs to be then calculated as is done by the underlying kernelAha! Nothing to do with which-bits-are-pfn in the tables... You need to know if the top level PGD is 512bytes or bigger. As we use a kmem-cache the adjacent data could be some else's page tables. Is this really a problem though? You can't pull the user-space pgd pointers out of no-where, you must have walked some task_struct and struct_mm's to find them. In which case you would have the VMAs on hand to tell you if its in the mapped user range. It would be good to avoid putting something arch-specific in here if we can at all help it.quoted
quoted
quoted
quoted
quoted
(see 'arch/arm64/include/asm/pgtable-hwdef.h' for details): #define PTRS_PER_PGD (1 << (MAX_USER_VA_BITS - PGDIR_SHIFT))Yes, this is the reason why makedumpfile needs the MAX_USER_VA_BITS. It is used for pgd_index() also in makedumpfile to walk page tables. /* to find an entry in a page-table-directory */ #define pgd_index(addr) (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))Since Dave mentioned crash tool does not need it, but crash should also travel the pg tables.
The crash utility is always invoked with vmlinux, so it can read the vabits_user variable directly from vmcore, but makedumpfile can not.
quoted
If this is really necessary it would be good to describe what will happen without the patch, eg. some user visible error from an actual test etc.Yes please, it would really help if there was a specific example we could discuss.
With 52-bit user space and 48-bit kernel space configuration, makedumpfile will not be able to convert a virtual kernel address to a physical address, and fail to capture a dumpfile, because the pgd_index() will return a wrong index. But I don't have any suitable test system on hand, so have not tried the kernel configuration actually. If found, I'll try. Bhupesh, do you have any test result? Thanks, Kazu
Thanks, James
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel