RE: 05e0caad3b7bd0d0fbeff980bca22f186241a501 breaks ia64 kdump

From: Zou, Nanhai <nanhai.zou_at_intel.com>
Date: 2006-11-10 19:16:08
> -----Original Message-----
> From: linux-ia64-owner@vger.kernel.org
> [mailto:linux-ia64-owner@vger.kernel.org] On Behalf Of Zou Nan hai
> Sent: 2006113 18:07
> To: Mel Gorman
> Cc: Horms; Andy Whitcroft; Linux-IA64; Bob Picco; Andrew Morton; Dave Hansen;
> Andi Kleen; Benjamin Herrenschmidt; Paul Mackerras; Keith Mannthey; Luck, Tony;
> KAMEZAWA Hiroyuki; Yasunori Goto; Khalid Aziz
> Subject: RE: 05e0caad3b7bd0d0fbeff980bca22f186241a501 breaks ia64 kdump
> 
> On Fri, 2006-11-03 at 17:27, Mel Gorman wrote:
> > On Fri, 3 Nov 2006, Zou, Nanhai wrote:
> >
> > > Hi,
> > > 	This patch should fix the issue.
> > >
> >
> > It would appear to fix the issue for IA64 but you are blotting over the
> > issue that the map is reporting a one page hole. On arches with really
> > adjacent regions that are getting merged, the regions will appear to
> > overlap by one page. What can happen is something like this
> >
> > PFN ranges for nodes
> > Node 1: 0 -> 1000
> > Node 0: 1000 -> 2000
> >
> Hi,
>  But the patch Andy and you are commenting is not my patch...., It was
> in the previous thread.
> My patch was in the attachment.....
> 
>  Sorry for using outlook to send that patch as attachment, my Linux box
> was not accessable at the time when I was posting the patch.
>  I post the patch again, and copy the discription from my previous mail.
> 
> When ia64 kernel is configured as discontinuous memory model,
> active_pages are added through efi_memmap_walk(filter_rsvd_memory,
> count_node_pages).
> filter_rsvd_memory  will filter out all regions in rsvd_regions include
> - boot param
> - mem map
> - initrd
> - command line
> - **** kernel code and data ***
> - kernel map built from efi memmap
> - crash kernel reserved region
> So the kernel code and data is excluded even without kdump support,
> check /proc/iomem and dmesg for early_node_data can verify that.
> But magically, the first kernel boots happily without any complain...,
> I guess that is related to the init value in memmap.
> 
> This patch use another filter to add_acvitive_pages, only exclude crash kernel
> reserved region if CONFIG_KEXEC is on.
> 
> Thanks
> Zou Nan hai
> --- a/arch/ia64/mm/discontig.c	2006-11-02 20:09:47.000000000 -0500
> +++ b/arch/ia64/mm/discontig.c	2006-11-02 19:57:27.000000000 -0500
> @@ -21,6 +21,7 @@
>  #include <linux/acpi.h>
>  #include <linux/efi.h>
>  #include <linux/nodemask.h>
> +#include <linux/kexec.h>
>  #include <asm/pgalloc.h>
>  #include <asm/tlb.h>
>  #include <asm/meminit.h>
> @@ -653,8 +654,6 @@ void call_pernode_memory(unsigned long s
>  static __init int count_node_pages(unsigned long start, unsigned long len,
> int node)
>  {
>  	unsigned long end = start + len;
> -
> -	add_active_range(node, start >> PAGE_SHIFT, end >> PAGE_SHIFT);
>  	mem_data[node].num_physpages += len >> PAGE_SHIFT;
>  	if (start <= __pa(MAX_DMA_ADDRESS))
>  		mem_data[node].num_dma_physpages +=
> @@ -669,7 +668,31 @@ static __init int count_node_pages(unsig
> 
>  	return 0;
>  }
> +static __init int add_active_range_wrapper(unsigned long start,
> +		unsigned long len, int node)
> +{
> +	unsigned long end = start + len;
> +	add_active_range(node, start >> PAGE_SHIFT, end >> PAGE_SHIFT);
> +	return 0;
> +}
> 
> +static int __init
> +filter_pernode_memory (unsigned long start, unsigned long end, void *arg)
> +{
> +	void (*func)(unsigned long, unsigned long, int);
> +	func = arg;
> +
> +#ifdef CONFIG_KEXEC
> +	if (start > crashk_res.start && start < crashk_res.end)
> +		start = max(start, crashk_res.end);
> +	if (end > crashk_res.start && end < crashk_res.end)
> +		end = min(end, crashk_res.start);
> +#endif
> +	if (start < end)
> +		call_pernode_memory(__pa(start), end - start, func);
> +
> +	return 0;
> +}
>  /**
>   * paging_init - setup page tables
>   *
> @@ -689,6 +712,7 @@ void __init paging_init(void)
>  	arch_sparse_init();
> 
>  	efi_memmap_walk(filter_rsvd_memory, count_node_pages);
> +	efi_memmap_walk(filter_pernode_memory, add_active_range_wrapper);
> 
>  #ifdef CONFIG_VIRTUAL_MEM_MAP
>  	vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) *
> 
> 
> 
Hi Mel,
	What is your option on this? 
Thanks 
Zou Nan hai
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Fri Nov 10 19:38:24 2006

This archive was generated by hypermail 2.1.8 : 2006-11-10 19:38:36 EST