* [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
@ 2006-06-21 5:43 keith mannthey
2006-06-21 6:06 ` [Lhms-devel] " KAMEZAWA Hiroyuki
2006-06-23 17:13 ` Dave Hansen
0 siblings, 2 replies; 8+ messages in thread
From: keith mannthey @ 2006-06-21 5:43 UTC (permalink / raw)
To: lhms-devel; +Cc: linux-mm, konrad, Prarit Bhargava--redhat, ak
[-- Attachment #1: Type: text/plain, Size: 1179 bytes --]
Hello all,
This patch is an attempt to add a numa ware add_memory functionality
to x86_64 using CONFIG_SPARSEMEM. The add memory function today just
grabs the pgdat from node 0 and adds the memory there. On a numa system
this is functional but not optimal/correct.
The SRAT can expose future memory locality. This information is
already tracked by the nodes_add data structure (it keeps the
memory/node locality information) from the SRAT code. The code in
srat.c is built around RESERVE_HOTADD. This patch is a little subtle in
the way it uses the existing code for use with sparsemem. Perhaps
acpi_numa_memory_affinity_init needs a larger refactor to fit both
RESERVE_HOTADD and sparsemem.
This patch still hotadd_percent as a flag to the whole srat parsing
code to disable and contain broken bios. It's functionality is retained
and an on off switch to sparsemem hot-add. Without changing the safety
mechanisms build into the current SRAT code I have provided a path for
the sparsemem hot-add path to get to the nodes_add data for use at
runtime.
This is a 1st run at the patch, it works with 2.6.17
Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
[-- Attachment #2: patch-2.6.17-nodes-add-v1.patch --]
[-- Type: text/x-patch, Size: 3550 bytes --]
diff -urN linux-2.6.17/arch/x86_64/mm/init.c linux-2.6.17-work/arch/x86_64/mm/init.c
--- linux-2.6.17/arch/x86_64/mm/init.c 2006-06-17 21:49:35.000000000 -0400
+++ linux-2.6.17-work/arch/x86_64/mm/init.c 2006-06-20 21:41:30.000000000 -0400
@@ -553,7 +553,7 @@
*/
int add_memory(u64 start, u64 size)
{
- struct pglist_data *pgdat = NODE_DATA(0);
+ struct pglist_data *pgdat = NODE_DATA(new_memory_to_node(start,start+size));
struct zone *zone = pgdat->node_zones + MAX_NR_ZONES-2;
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
diff -urN linux-2.6.17/arch/x86_64/mm/srat.c linux-2.6.17-work/arch/x86_64/mm/srat.c
--- linux-2.6.17/arch/x86_64/mm/srat.c 2006-06-20 20:25:33.000000000 -0400
+++ linux-2.6.17-work/arch/x86_64/mm/srat.c 2006-06-20 21:44:54.000000000 -0400
@@ -32,10 +32,10 @@
static nodemask_t nodes_parsed __initdata;
static nodemask_t nodes_found __initdata;
static struct bootnode nodes[MAX_NUMNODES] __initdata;
-static struct bootnode nodes_add[MAX_NUMNODES] __initdata;
+static struct bootnode nodes_add[MAX_NUMNODES];
static int found_add_area __initdata;
int hotadd_percent __initdata = 0;
-#ifndef RESERVE_HOTADD
+#if !defined(RESERVE_HOTADD) && !defined(CONFIG_MEMORY_HOTPLUG)
#define hotadd_percent 0 /* Ignore all settings */
#endif
static u8 pxm2node[256] = { [0 ... 255] = 0xff };
@@ -219,9 +219,9 @@
allocated += mem;
return 1;
}
-
+#endif
/*
- * It is fine to add this area to the nodes data it will be used later
+ * It is fine to add this area to the nodes_add data it will be used later
* This code supports one contigious hot add area per node.
*/
static int reserve_hotadd(int node, unsigned long start, unsigned long end)
@@ -247,15 +247,14 @@
printk(KERN_ERR "SRAT: Hotplug area has existing memory\n");
return -1;
}
-
+#ifdef RESERVE_HOTADD
if (!hotadd_enough_memory(&nodes_add[node])) {
printk(KERN_ERR "SRAT: Hotplug area too large\n");
return -1;
}
-
+#endif
/* Looks good */
- found_add_area = 1;
if (nd->start == nd->end) {
nd->start = start;
nd->end = end;
@@ -273,14 +272,16 @@
printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n");
}
- if ((nd->end >> PAGE_SHIFT) > end_pfn)
- end_pfn = nd->end >> PAGE_SHIFT;
-
if (changed)
printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n", nd->start, nd->end);
+#ifdef RESERVE_HOTADD
+ found_add_area = 1;
+ if ((nd->end >> PAGE_SHIFT) > end_pfn)
+ end_pfn = nd->end >> PAGE_SHIFT;
return 0;
+#endif
+ return -1;
}
-#endif
/* Callback for parsing of the Proximity Domain <-> Memory Area mappings */
void __init
@@ -338,7 +339,6 @@
printk(KERN_INFO "SRAT: Node %u PXM %u %Lx-%Lx\n", node, pxm,
nd->start, nd->end);
-#ifdef RESERVE_HOTADD
if (ma->flags.hot_pluggable && reserve_hotadd(node, start, end) < 0) {
/* Ignore hotadd region. Undo damage */
printk(KERN_NOTICE "SRAT: Hotplug region ignored\n");
@@ -346,7 +346,6 @@
if ((nd->start | nd->end) == 0)
node_clear(node, nodes_parsed);
}
-#endif
}
/* Sanity check to catch more bad SRATs (they are amazingly common).
@@ -479,5 +478,15 @@
index = acpi_slit->localities * node_to_pxm(a);
return acpi_slit->entry[index + node_to_pxm(b)];
}
-
EXPORT_SYMBOL(__node_distance);
+
+int new_memory_to_node(unsigned long start, unsigned long end) {
+ int i,ret;
+ ret=0;
+ for_each_node(i){
+ if (nodes_add[i].start <= start && nodes_add[i].end >= end)
+ ret = i;
+ }
+ return ret;
+}
+EXPORT_SYMBOL(new_memory_to_node);
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Lhms-devel] [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-21 5:43 [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality keith mannthey
@ 2006-06-21 6:06 ` KAMEZAWA Hiroyuki
2006-06-21 6:25 ` keith mannthey
2006-06-21 6:31 ` Yasunori Goto
2006-06-23 17:13 ` Dave Hansen
1 sibling, 2 replies; 8+ messages in thread
From: KAMEZAWA Hiroyuki @ 2006-06-21 6:06 UTC (permalink / raw)
To: kmannth; +Cc: lhms-devel, prarit, linux-mm, darnok, ak
On Tue, 20 Jun 2006 22:43:01 -0700
keith mannthey <kmannth@us.ibm.com> wrote:
> Hello all,
> This patch is an attempt to add a numa ware add_memory functionality
> to x86_64 using CONFIG_SPARSEMEM. The add memory function today just
> grabs the pgdat from node 0 and adds the memory there. On a numa system
> this is functional but not optimal/correct.
>
At first, sorry for confusing.
reserve_hotadd()/memory-hot-add with preallocated mem_map things are
maintained by x86_64 and Andi Kleen (maybe).
So we (lhms people) are not familiar with this.
And yes, mem_map should be allocated from local node.
I'm now preparing "dynamic local mem_map allocation" for lhms's memory hotplug,
which doesn't depend on SRAT.
Regards,
-Kame
> The SRAT can expose future memory locality. This information is
> already tracked by the nodes_add data structure (it keeps the
> memory/node locality information) from the SRAT code. The code in
> srat.c is built around RESERVE_HOTADD. This patch is a little subtle in
> the way it uses the existing code for use with sparsemem. Perhaps
> acpi_numa_memory_affinity_init needs a larger refactor to fit both
> RESERVE_HOTADD and sparsemem.
>
> This patch still hotadd_percent as a flag to the whole srat parsing
> code to disable and contain broken bios. It's functionality is retained
> and an on off switch to sparsemem hot-add. Without changing the safety
> mechanisms build into the current SRAT code I have provided a path for
> the sparsemem hot-add path to get to the nodes_add data for use at
> runtime.
>
> This is a 1st run at the patch, it works with 2.6.17
>
> Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Lhms-devel] [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-21 6:06 ` [Lhms-devel] " KAMEZAWA Hiroyuki
@ 2006-06-21 6:25 ` keith mannthey
2006-06-21 6:37 ` KAMEZAWA Hiroyuki
2006-06-21 6:31 ` Yasunori Goto
1 sibling, 1 reply; 8+ messages in thread
From: keith mannthey @ 2006-06-21 6:25 UTC (permalink / raw)
To: KAMEZAWA Hiroyuki
Cc: Prarit Bhargava--redhat, linux-mm, ak, konrad, lhms-devel
On Wed, 2006-06-21 at 15:06 +0900, KAMEZAWA Hiroyuki wrote:
> On Tue, 20 Jun 2006 22:43:01 -0700
> keith mannthey <kmannth@us.ibm.com> wrote:
>
> > Hello all,
> > This patch is an attempt to add a numa ware add_memory functionality
> > to x86_64 using CONFIG_SPARSEMEM. The add memory function today just
> > grabs the pgdat from node 0 and adds the memory there. On a numa system
> > this is functional but not optimal/correct.
> >
>
> At first, sorry for confusing.
> reserve_hotadd()/memory-hot-add with preallocated mem_map things are
> maintained by x86_64 and Andi Kleen (maybe).
> So we (lhms people) are not familiar with this.
Agreeded. I don't expect lhms to know much about reserve_hotadd().
Right now SPARSEMEM adds all it's memory to node 0 in x86_64. This is
the problem I am trying to fix. I doesn't make sense to me to rewrite
the SRAT code when RESERVE_HOTADD has done most of the work already.
> And yes, mem_map should be allocated from local node.
> I'm now preparing "dynamic local mem_map allocation" for lhms's memory hotplug,
> which doesn't depend on SRAT.
How do you know which node to add the memory too without something like
the SRAT that define memory locality of hot-add zones? SPARSEMEM doesn't
depend on SRAT (it just needs to use to to know what zone to add to.)
This patch isn't about mem_map allocation rather what zone to add the
memory to when doing SPASEMEM hot-add. A numa aware mem_map allocation
would belong in generic SPARSEMEM code.
>
> > The SRAT can expose future memory locality. This information is
> > already tracked by the nodes_add data structure (it keeps the
> > memory/node locality information) from the SRAT code. The code in
> > srat.c is built around RESERVE_HOTADD. This patch is a little subtle in
> > the way it uses the existing code for use with sparsemem. Perhaps
> > acpi_numa_memory_affinity_init needs a larger refactor to fit both
> > RESERVE_HOTADD and sparsemem.
> >
> > This patch still hotadd_percent as a flag to the whole srat parsing
> > code to disable and contain broken bios. It's functionality is retained
> > and an on off switch to sparsemem hot-add. Without changing the safety
> > mechanisms build into the current SRAT code I have provided a path for
> > the sparsemem hot-add path to get to the nodes_add data for use at
> > runtime.
> >
> > This is a 1st run at the patch, it works with 2.6.17
> >
> > Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
> >
>
>
>
> _______________________________________________
> Lhms-devel mailing list
> Lhms-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lhms-devel
--
keith mannthey <kmannth@us.ibm.com>
Linux Technology Center IBM
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Lhms-devel] [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-21 6:06 ` [Lhms-devel] " KAMEZAWA Hiroyuki
2006-06-21 6:25 ` keith mannthey
@ 2006-06-21 6:31 ` Yasunori Goto
1 sibling, 0 replies; 8+ messages in thread
From: Yasunori Goto @ 2006-06-21 6:31 UTC (permalink / raw)
To: kmannth; +Cc: prarit, linux-mm, ak, darnok, lhms-devel, KAMEZAWA Hiroyuki
> On Tue, 20 Jun 2006 22:43:01 -0700
> keith mannthey <kmannth@us.ibm.com> wrote:
>
> > Hello all,
> > This patch is an attempt to add a numa ware add_memory functionality
> > to x86_64 using CONFIG_SPARSEMEM. The add memory function today just
> > grabs the pgdat from node 0 and adds the memory there. On a numa system
> > this is functional but not optimal/correct.
> >
>
> At first, sorry for confusing.
> reserve_hotadd()/memory-hot-add with preallocated mem_map things are
> maintained by x86_64 and Andi Kleen (maybe).
> So we (lhms people) are not familiar with this.
>
> And yes, mem_map should be allocated from local node.
> I'm now preparing "dynamic local mem_map allocation" for lhms's memory hotplug,
> which doesn't depend on SRAT.
I wrote patches for NUMA aware memory hotplug with sparsemem.
It is already included in current -mm.
He means he would like to make the patch for -mm. Could you check it?
But, I've not try it with RESERVE_HOT_ADD. I just try it with sparsemem.
Sorry. :-(
In my patch, if new memory is in new node, new node id is decided by PXM
in dsdt. So, it must work even if srat does not define hot-add area.
Thanks.
--
Yasunori Goto
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Lhms-devel] [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-21 6:25 ` keith mannthey
@ 2006-06-21 6:37 ` KAMEZAWA Hiroyuki
0 siblings, 0 replies; 8+ messages in thread
From: KAMEZAWA Hiroyuki @ 2006-06-21 6:37 UTC (permalink / raw)
To: kmannth; +Cc: prarit, linux-mm, ak, darnok, lhms-devel
On Tue, 20 Jun 2006 23:25:01 -0700
keith mannthey <kmannth@us.ibm.com> wrote:
> > And yes, mem_map should be allocated from local node.
> > I'm now preparing "dynamic local mem_map allocation" for lhms's memory hotplug,
> > which doesn't depend on SRAT.
>
> How do you know which node to add the memory too without something like
> the SRAT that define memory locality of hot-add zones? SPARSEMEM doesn't
> depend on SRAT (it just needs to use to to know what zone to add to.)
>
Now, acpi's _PXM method is supported by acpi-memory-hotadd. (See -mm.)
I'll use it. and current add_memory() -mm is this.
==
int arch_add_memory(int nid, u64 start, u64 size)
{
struct pglist_data *pgdat = NODE_DATA(nid);
struct zone *zone = pgdat->node_zones + MAX_NR_ZONES-2;
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
==
nid is passed by caller.
> This patch isn't about mem_map allocation rather what zone to add the
> memory to when doing SPASEMEM hot-add. A numa aware mem_map allocation
> would belong in generic SPARSEMEM code.
>
I also need to do NUMA-aware
- pgdat allocation , wait table allocation ..and so on...
I'll add memory allocater which allocates memory from newly-added-memory.
-Kame
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-21 5:43 [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality keith mannthey
2006-06-21 6:06 ` [Lhms-devel] " KAMEZAWA Hiroyuki
@ 2006-06-23 17:13 ` Dave Hansen
2006-06-23 17:57 ` [Lhms-devel] " keith mannthey
2006-06-24 2:05 ` [RFC] Patch [1/4] x86_64 sparsmem add- save nodes_add data for later keith mannthey
1 sibling, 2 replies; 8+ messages in thread
From: Dave Hansen @ 2006-06-23 17:13 UTC (permalink / raw)
To: kmannth; +Cc: lhms-devel, linux-mm, konrad, Prarit Bhargava--redhat, ak
> int add_memory(u64 start, u64 size)
> {
> - struct pglist_data *pgdat = NODE_DATA(0);
> + struct pglist_data *pgdat = NODE_DATA(new_memory_to_node(start,start+size));
> struct zone *zone = pgdat->node_zones + MAX_NR_ZONES-2;
How about just having new_memory_to_node() take the range and return the
pgdat? Should make that line a bit shorter.
> -#ifndef RESERVE_HOTADD
> +#if !defined(RESERVE_HOTADD) && !defined(CONFIG_MEMORY_HOTPLUG)
> #define hotadd_percent 0 /* Ignore all settings */
> #endif
> static u8 pxm2node[256] = { [0 ... 255] = 0xff };
> @@ -219,9 +219,9 @@
> allocated += mem;
> return 1;
> }
> -
> +#endif
> /*
Could this use another Kconfig option which gives a name to this
condition?
> +#ifdef RESERVE_HOTADD
> if (!hotadd_enough_memory(&nodes_add[node])) {
> printk(KERN_ERR "SRAT: Hotplug area too large\n");
> return -1;
> }
> -
> +#endif
This #ifdef is probably better handled by an #ifdef in the header for
hotadd_enough_memory().
-- Dave
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Lhms-devel] [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality
2006-06-23 17:13 ` Dave Hansen
@ 2006-06-23 17:57 ` keith mannthey
2006-06-24 2:05 ` [RFC] Patch [1/4] x86_64 sparsmem add- save nodes_add data for later keith mannthey
1 sibling, 0 replies; 8+ messages in thread
From: keith mannthey @ 2006-06-23 17:57 UTC (permalink / raw)
To: dave hansen; +Cc: Prarit Bhargava--redhat, linux-mm, ak, konrad, lhms-devel
On Fri, 2006-06-23 at 10:13 -0700, Dave Hansen wrote:
> > int add_memory(u64 start, u64 size)
> > {
> > - struct pglist_data *pgdat = NODE_DATA(0);
> > + struct pglist_data *pgdat = NODE_DATA(new_memory_to_node(start,start+size));
> > struct zone *zone = pgdat->node_zones + MAX_NR_ZONES-2;
>
> How about just having new_memory_to_node() take the range and return the
> pgdat? Should make that line a bit shorter.
In the -mm tree things are a little different. The acpi layer (and
something for ppc) is passing the nid down the a generic add memory
call.
This int add_memory(u64 start, u64 size) is going away with something
more like int add_memory(int nid, u64 start, u64 size) this changes
things some.
I have patches against the -mm stack but I had a little trouble with
my testbox's file-system last night so I should have them out this
afternoon.
> > -#ifndef RESERVE_HOTADD
> > +#if !defined(RESERVE_HOTADD) && !defined(CONFIG_MEMORY_HOTPLUG)
> > #define hotadd_percent 0 /* Ignore all settings */
> > #endif
> > static u8 pxm2node[256] = { [0 ... 255] = 0xff };
> > @@ -219,9 +219,9 @@
> > allocated += mem;
> > return 1;
> > }
> > -
> > +#endif
> > /*
>
> Could this use another Kconfig option which gives a name to this
> condition?
This is sort of a redundant force off. I am not sure if there is a
code path to the SRAT code without RESERVE_HOTADD or
CONFIG_MEMORY_HOTPLUG defined.
hotadd_percent can only change from 0 with an explicit command-line
numa=hotadd=XXX boot so maybe taking this
#define hotadd_percent 0
out all together might be the better way to go if the code patch is
going to be shared.
>
> > +#ifdef RESERVE_HOTADD
> > if (!hotadd_enough_memory(&nodes_add[node])) {
> > printk(KERN_ERR "SRAT: Hotplug area too large\n");
> > return -1;
> > }
> > -
> > +#endif
>
> This #ifdef is probably better handled by an #ifdef in the header for
> hotadd_enough_memory().
hotadd_enough_memory is static there is no header entry for it.
Thanks for the feedback,
Keith
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC] Patch [1/4] x86_64 sparsmem add- save nodes_add data for later
2006-06-23 17:13 ` Dave Hansen
2006-06-23 17:57 ` [Lhms-devel] " keith mannthey
@ 2006-06-24 2:05 ` keith mannthey
1 sibling, 0 replies; 8+ messages in thread
From: keith mannthey @ 2006-06-24 2:05 UTC (permalink / raw)
To: lhms-devel; +Cc: linux-mm, ak, dave hansen, kame
[-- Attachment #1: Type: text/plain, Size: 833 bytes --]
Hello All,
The following patch reserves the nodes_add data for use later. It
retains the bulk of the hotadd_precent defense that is built into the
SRAT code. It is a little subtle but it gets the job done.
The code saves off the hot-add area ranges without extending the end
of memory. It then creates arch_find_node which will be use in the next
patch.
arch_find_node is passed a memory range and it looks for a nodes_add
area it fits into. If no area is found it returns 0.
With this and the other 3 patches I can do SPARSEMEM x86_64 hot-add on
my hardware. (the first 2 patches are one I consider real the other 2
are more to point out issues)
It is built against 2.6.17-mm1 x86_64 and the current memory_hotplug
work but should apply on any current srat.c
Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
[-- Attachment #2: patch-2.6.17-mm1-save_nodes_add --]
[-- Type: text/x-patch, Size: 2650 bytes --]
diff -urN linux-2.6.17-mm1-orig/arch/x86_64/mm/srat.c linux-2.6.17-mm1/arch/x86_64/mm/srat.c
--- linux-2.6.17-mm1-orig/arch/x86_64/mm/srat.c 2006-06-23 16:12:00.000000000 -0400
+++ linux-2.6.17-mm1/arch/x86_64/mm/srat.c 2006-06-23 18:43:03.000000000 -0400
@@ -34,9 +34,6 @@
static struct bootnode nodes_add[MAX_NUMNODES] __initdata;
static int found_add_area __initdata;
int hotadd_percent __initdata = 0;
-#ifndef RESERVE_HOTADD
-#define hotadd_percent 0 /* Ignore all settings */
-#endif
/* Too small nodes confuse the VM badly. Usually they result
from BIOS bugs. */
@@ -199,9 +196,9 @@
allocated += mem;
return 1;
}
-
+#endif
/*
- * It is fine to add this area to the nodes data it will be used later
+ * It is fine to add this area to the nodes_add data it will be used later
* This code supports one contigious hot add area per node.
*/
static int reserve_hotadd(int node, unsigned long start, unsigned long end)
@@ -227,15 +224,14 @@
printk(KERN_ERR "SRAT: Hotplug area has existing memory\n");
return -1;
}
-
+#ifdef RESERVE_HOTADD
if (!hotadd_enough_memory(&nodes_add[node])) {
printk(KERN_ERR "SRAT: Hotplug area too large\n");
return -1;
}
-
+#endif
/* Looks good */
- found_add_area = 1;
if (nd->start == nd->end) {
nd->start = start;
nd->end = end;
@@ -253,14 +249,16 @@
printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n");
}
- if ((nd->end >> PAGE_SHIFT) > end_pfn)
- end_pfn = nd->end >> PAGE_SHIFT;
-
if (changed)
printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n", nd->start, nd->end);
+#ifdef RESERVE_HOTADD
+ found_add_area = 1;
+ if ((nd->end >> PAGE_SHIFT) > end_pfn)
+ end_pfn = nd->end >> PAGE_SHIFT;
return 0;
+#endif
+ return -1;
}
-#endif
/* Callback for parsing of the Proximity Domain <-> Memory Area mappings */
void __init
@@ -318,7 +316,6 @@
printk(KERN_INFO "SRAT: Node %u PXM %u %Lx-%Lx\n", node, pxm,
nd->start, nd->end);
-#ifdef RESERVE_HOTADD
if (ma->flags.hot_pluggable && reserve_hotadd(node, start, end) < 0) {
/* Ignore hotadd region. Undo damage */
printk(KERN_NOTICE "SRAT: Hotplug region ignored\n");
@@ -326,7 +323,6 @@
if ((nd->start | nd->end) == 0)
node_clear(node, nodes_parsed);
}
-#endif
}
/* Sanity check to catch more bad SRATs (they are amazingly common).
@@ -450,3 +446,14 @@
}
EXPORT_SYMBOL(__node_distance);
+
+int arch_find_node(unsigned long start, unsigned long size) {
+ int i, ret = 0;
+ unsigned long end = start+size;
+
+ for_each_node(i){
+ if (nodes_add[i].start <= start && nodes_add[i].end >= end)
+ ret = i;
+ }
+ return ret;
+}
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-06-24 2:05 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-21 5:43 [RFC] patch [1/1] x86_64 numa aware sparsemem add_memory functinality keith mannthey
2006-06-21 6:06 ` [Lhms-devel] " KAMEZAWA Hiroyuki
2006-06-21 6:25 ` keith mannthey
2006-06-21 6:37 ` KAMEZAWA Hiroyuki
2006-06-21 6:31 ` Yasunori Goto
2006-06-23 17:13 ` Dave Hansen
2006-06-23 17:57 ` [Lhms-devel] " keith mannthey
2006-06-24 2:05 ` [RFC] Patch [1/4] x86_64 sparsmem add- save nodes_add data for later keith mannthey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox