Skip to contentSkip to conversation

powerpc: Fix /dev/oldmem for kdump

PATCH In review Sachin P. Sant 2 participants 4 messages Jun 26, 2008 – Jul 3, 2008 PowerPC

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 powerpc: Fix /dev/oldmem for kdump

This one has been pending for a long time. Somehow never made it upstream.

Resending the patch which fixes /dev/oldmem interface for kdump.

Tested with 2.6.26-rc8.

Fix /dev/oldmem for kdump

A change to __ioremap() broke reading /dev/oldmem because we're no longer able to ioremap pfn 0 (d177c207ba16b1db31283e2d1fee7ad4a863584b).

We actually don't need to ioremap for anything that's part of the linear mapping, so just read it directly.

Also make sure we're only reading one page or less at a time.

---

arch/powerpc/kernel/crash_dump.c +22 -9
diff -Naurp old/arch/powerpc/kernel/crash_dump.c new/arch/powerpc/kernel/crash_dump.c
@@ -83,6 +83,19 @@ static int __init parse_savemaxmem(char 
 }
 __setup("savemaxmem=", parse_savemaxmem);
 
+
+static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize,
+                               unsigned long offset, int userbuf)
+{
+	if (userbuf) {
+		if (copy_to_user((char __user *)buf, (vaddr + offset), csize))
+			return -EFAULT;
+	} else
+		memcpy(buf, (vaddr + offset), csize);
+
+	return csize;
+}
+
 /**
  * copy_oldmem_page - copy one page from "oldmem"
  * @pfn: page frame number to be copied
@@ -104,16 +117,16 @@ ssize_t copy_oldmem_page(unsigned long p
 	if (!csize)
 		return 0;
 
-	vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0);
+	csize = min(csize, PAGE_SIZE);
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, (vaddr + offset), csize);
+	if (pfn < max_pfn) {
+		vaddr = __va(pfn << PAGE_SHIFT);
+		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+	} else {
+		vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0);
+		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		iounmap(vaddr);
+	}
 
-	iounmap(vaddr);
 	return csize;
 }
#1 lore raw
Quoted 8 lines · Sachin P. Sant

This one has been pending for a long time. Somehow never made it upstream.

Resending the patch which fixes /dev/oldmem interface for kdump.

Tested with 2.6.26-rc8.

Even though I wrote this, it was so long ago I can't really vouch for it. If you've tested it and it works Sachin then we should merge it. Is this fix in distros or does it not apply?

Quoted 1 line

Also make sure we're only reading one page or less at a time.

It looks like the generic code ensures that I think, but it can't hurt.

cheers

Signature · 8 lines
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
#2 lore raw
Quoted 4 lines · Michael Ellerman

Even though I wrote this, it was so long ago I can't really vouch for it. If you've tested it and it works Sachin then we should merge it. Is this fix in distros or does it not apply?

Yes, i have tested this on couple of power boxes and the patch works fine. [ i can copy dump using both /proc/vmcore and /dev/oldmem interface ]

No this fix is not part of distro ATM. But yes it applies to distros also. Once it is merged upstream, distros will eventually pick this up.

Thanks
-Sachin

#3 lore raw
Quoted 8 lines · Sachin P. Sant
Quoted 4 lines · Michael Ellerman

Even though I wrote this, it was so long ago I can't really vouch for it. If you've tested it and it works Sachin then we should merge it. Is this fix in distros or does it not apply?

Yes, i have tested this on couple of power boxes and the patch works fine. [ i can copy dump using both /proc/vmcore and /dev/oldmem interface ]

OK great, thanks for that.

Quoted 2 lines

No this fix is not part of distro ATM. But yes it applies to distros also. Once it is merged upstream, distros will eventually pick this up.

Crud, OK well I guess we should hurry up and merge it then :D

Paul, this has been broken for quite a while, but it would still be nice if the fix was in 26 - sorry!

cheers

Signature · 8 lines
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person