In Cortex-A9 machine, with LPAE feature enabled and physical address space larger than 4G, Capture kernel will Oops on reading the /proc/vmcore file.
In copy_oldmem_page function, it simply use "pfn << PAGE_SHIFT" to get the physical address, but this will cause overflow when LPAE enabled and physical address space is larger than 4G, thus get the result as 0 and cause Oops. Fix it to use __pfn_to_phys instead. __pfn_to_phys will first cast the pfn to type phys_addr_t which is the type u64 when LPAE enabled, and left shifted by PAGE_SHIFT to get the proper physical address. Signed-off-by: ivan lam <ivan.lam2...@gmail.com> --- arch/arm/kernel/crash_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/kernel/crash_dump.c b/arch/arm/kernel/crash_dump.c index 90c50d4..5d1286d 100644 --- a/arch/arm/kernel/crash_dump.c +++ b/arch/arm/kernel/crash_dump.c @@ -39,7 +39,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, if (!csize) return 0; - vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE); + vaddr = ioremap(__pfn_to_phys(pfn), PAGE_SIZE); if (!vaddr) return -ENOMEM; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/