All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mahesh J Salgaonkar <mahesh@linux.vnet.ibm.com>
To: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Cc: Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc/crashdump : fix page frame number check in copy_oldmem_page
Date: Thu, 27 Feb 2014 00:08:48 +0530	[thread overview]
Message-ID: <20140226183848.GA7282@in.ibm.com> (raw)
In-Reply-To: <20140224163055.7263.86979.stgit@nimbus>

On 2014-02-24 17:30:55 Mon, Laurent Dufour wrote:
> In copy_oldmem_page, the current check using max_pfn and min_low_pfn to
> decide if the page is backed or not, is not valid when the memory layout is
> not continuous.
> 
> This happens when running as a QEMU/KVM guest, where RTAS is mapped higher
> in the memory. In that case max_pfn points to the end of RTAS, and a hole
> between the end of the kdump kernel and RTAS is not backed by PTEs. As a
> consequence, the kdump kernel is crashing in copy_oldmem_page when accessing
> in a direct way the pages in that hole.
> 
> This fix relies on the memblock's service memblock_is_region_memory to
> check if the read page is part or not of the directly accessible memory.
> 
> Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>

Tested on PowerNV (BE), where without this patch we see cp and 
makedumpfile fails with "Bad address" while reading /proc/vmcore.
With this patch makedumpfile and cp succeeds.

Tested-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>

> ---
>  arch/powerpc/kernel/crash_dump.c |    8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
> index 11c1d06..7a13f37 100644
> --- a/arch/powerpc/kernel/crash_dump.c
> +++ b/arch/powerpc/kernel/crash_dump.c
> @@ -98,17 +98,19 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
>  			size_t csize, unsigned long offset, int userbuf)
>  {
>  	void  *vaddr;
> +	phys_addr_t paddr;
>  
>  	if (!csize)
>  		return 0;
>  
>  	csize = min_t(size_t, csize, PAGE_SIZE);
> +	paddr = pfn << PAGE_SHIFT;
>  
> -	if ((min_low_pfn < pfn) && (pfn < max_pfn)) {
> -		vaddr = __va(pfn << PAGE_SHIFT);
> +	if (memblock_is_region_memory(paddr, csize)) {
> +		vaddr = __va(paddr);
>  		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
>  	} else {
> -		vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0);
> +		vaddr = __ioremap(paddr, PAGE_SIZE, 0);
>  		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
>  		iounmap(vaddr);
>  	}
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev

-- 
Mahesh J Salgaonkar

      parent reply	other threads:[~2014-02-26 18:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-24 16:30 [PATCH] powerpc/crashdump : fix page frame number check in copy_oldmem_page Laurent Dufour
2014-02-25  1:47 ` Michael Ellerman
2014-02-26 14:04   ` Laurent Dufour
2014-02-26 18:38 ` Mahesh J Salgaonkar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140226183848.GA7282@in.ibm.com \
    --to=mahesh@linux.vnet.ibm.com \
    --cc=ldufour@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.