From: Zou Nan hai <nanhai.zou@intel.com>
To: linux-ia64@vger.kernel.org
Subject: RE: 05e0caad3b7bd0d0fbeff980bca22f186241a501 breaks ia64 kdump
Date: Fri, 03 Nov 2006 10:06:45 +0000 [thread overview]
Message-ID: <1162548405.3378.8.camel@linux-znh> (raw)
In-Reply-To: <20061026075951.GA30910@verge.net.au>
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) *
next prev parent reply other threads:[~2006-11-03 10:06 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-26 7:59 05e0caad3b7bd0d0fbeff980bca22f186241a501 breaks ia64 kdump Horms
2006-10-26 13:27 ` Mel Gorman
2006-10-27 1:40 ` Zou, Nanhai
2006-10-27 2:30 ` Zou, Nanhai
2006-10-27 9:15 ` Andy Whitcroft
2006-10-30 0:55 ` Horms
2006-10-30 8:37 ` Horms
2006-10-30 9:11 ` Horms
2006-10-30 9:15 ` Horms
2006-10-30 9:25 ` Horms
2006-10-30 11:49 ` Mel Gorman
2006-10-31 3:29 ` Horms
2006-10-31 9:42 ` Mel Gorman
2006-11-02 8:24 ` Horms
2006-11-02 8:29 ` Horms
2006-11-02 9:32 ` Horms
2006-11-02 10:38 ` Zou, Nanhai
2006-11-02 16:26 ` Mel Gorman
2006-11-03 0:28 ` Zou, Nanhai
2006-11-03 1:19 ` Zou, Nanhai
2006-11-03 9:27 ` Mel Gorman
2006-11-03 10:06 ` Zou Nan hai [this message]
2006-11-03 10:23 ` Andy Whitcroft
2006-11-06 3:18 ` Horms
2006-11-06 3:26 ` Horms
2006-11-10 8:16 ` Zou, Nanhai
2006-11-10 11:47 ` Mel Gorman
2006-11-14 1:38 ` Zou, Nanhai
2006-11-14 23:42 ` Mel Gorman
2006-11-15 16:26 ` Mel Gorman
2006-11-16 6:26 ` Horms
2006-11-16 16:05 ` Mel Gorman
2006-11-20 1:40 ` Zou, Nanhai
2006-12-05 9:58 ` Christian Cotte-Barrot
2006-12-18 14:52 ` Mel Gorman
2006-12-19 0:28 ` Horms
2006-12-19 3:35 ` Horms
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=1162548405.3378.8.camel@linux-znh \
--to=nanhai.zou@intel.com \
--cc=linux-ia64@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox