* During some rare cases [like using dd command with /dev/oldmem] the pfn value can be zero. Do not call __ioremap for zero pfn value, instead use __va to calculate the virtual address. Signed-off-by: Sachin Sant diff -Naurp a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c --- a/arch/powerpc/kernel/crash_dump.c 2006-09-20 09:12:06.000000000 +0530 +++ b/arch/powerpc/kernel/crash_dump.c 2006-09-21 09:06:35.000000000 +0530 @@ -101,7 +101,15 @@ ssize_t copy_oldmem_page(unsigned long p if (!csize) return 0; - vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); + /* During some rare cases [like using dd command with /dev/oldmem] + * the pfn value can be zero. Do not call __ioremap for zero + * pfn value, instead use __va to calculate the virtual address. + */ + + if (pfn == 0) + vaddr = __va(pfn << PAGE_SHIFT); + else + vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); if (userbuf) { if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) {