From: Yinghai Lu <yinghai@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
"H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Renninger <trenn@suse.de>,
Tang Chen <tangchen@cn.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
Tejun Heo <tj@kernel.org>
Subject: [PATCH 06/14] x86, mm, numa: Move successful path handling code later
Date: Thu, 7 Mar 2013 20:58:32 -0800 [thread overview]
Message-ID: <1362718720-27048-7-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1362718720-27048-1-git-send-email-yinghai@kernel.org>
We could move setup_node_data() and numa_init_array() calling out
numa_init() to make numa_init() small.
Those functions only need to be called for success path, and only
call them one time in x86_numa_init().
So later we could split parse numa info to two stages.
early one will be before init_mem_mapping.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
---
arch/x86/mm/numa.c | 68 ++++++++++++++++++++++++++++------------------------
1 file changed, 37 insertions(+), 31 deletions(-)
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
index 72fe01e..24c20f0 100644
--- a/arch/x86/mm/numa.c
+++ b/arch/x86/mm/numa.c
@@ -480,7 +480,7 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi)
static int __init numa_register_memblks(struct numa_meminfo *mi)
{
unsigned long uninitialized_var(pfn_align);
- int i, nid;
+ int i;
/* Account for nodes with cpus and no memory */
node_possible_map = numa_nodes_parsed;
@@ -509,24 +509,6 @@ static int __init numa_register_memblks(struct numa_meminfo *mi)
if (!numa_meminfo_cover_memory(mi))
return -EINVAL;
- /* Finally register nodes. */
- for_each_node_mask(nid, node_possible_map) {
- u64 start = PFN_PHYS(max_pfn);
- u64 end = 0;
-
- for (i = 0; i < mi->nr_blks; i++) {
- if (nid != mi->blk[i].nid)
- continue;
- start = min(mi->blk[i].start, start);
- end = max(mi->blk[i].end, end);
- }
-
- if (start < end)
- setup_node_data(nid, start, end);
- }
-
- /* Dump memblock with node info and return. */
- memblock_dump_all();
return 0;
}
@@ -580,15 +562,6 @@ static int __init numa_init(int (*init_func)(void))
if (ret < 0)
return ret;
- for (i = 0; i < nr_cpu_ids; i++) {
- int nid = early_cpu_to_node(i);
-
- if (nid == NUMA_NO_NODE)
- continue;
- if (!node_online(nid))
- numa_clear_node(i);
- }
- numa_init_array();
return 0;
}
@@ -623,22 +596,55 @@ static int __init dummy_numa_init(void)
*/
void __init x86_numa_init(void)
{
+ int i, nid;
+ struct numa_meminfo *mi = &numa_meminfo;
+
if (!numa_off) {
#ifdef CONFIG_X86_NUMAQ
if (!numa_init(numaq_numa_init))
- return;
+ goto out;
#endif
#ifdef CONFIG_ACPI_NUMA
if (!numa_init(x86_acpi_numa_init))
- return;
+ goto out;
#endif
#ifdef CONFIG_AMD_NUMA
if (!numa_init(amd_numa_init))
- return;
+ goto out;
#endif
}
numa_init(dummy_numa_init);
+
+out:
+ /* Finally register nodes. */
+ for_each_node_mask(nid, node_possible_map) {
+ u64 start = PFN_PHYS(max_pfn);
+ u64 end = 0;
+
+ for (i = 0; i < mi->nr_blks; i++) {
+ if (nid != mi->blk[i].nid)
+ continue;
+ start = min(mi->blk[i].start, start);
+ end = max(mi->blk[i].end, end);
+ }
+
+ if (start < end)
+ setup_node_data(nid, start, end);
+ }
+
+ /* Dump memblock with node info */
+ memblock_dump_all();
+
+ for (i = 0; i < nr_cpu_ids; i++) {
+ int nid = early_cpu_to_node(i);
+
+ if (nid == NUMA_NO_NODE)
+ continue;
+ if (!node_online(nid))
+ numa_clear_node(i);
+ }
+ numa_init_array();
}
static __init int find_near_online_node(int node)
--
1.7.10.4
next prev parent reply other threads:[~2013-03-08 5:02 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 4:58 [PATCH 00/14] x86, ACPI, numa: Parse numa info early Yinghai Lu
2013-03-08 4:58 ` [PATCH 01/14] x86, ACPI, mm: Kill max_low_pfn_mapped Yinghai Lu
2013-03-08 5:10 ` Tejun Heo
2013-03-08 5:22 ` Yinghai Lu
2013-03-08 5:25 ` Tejun Heo
2013-03-08 5:27 ` Yinghai Lu
2013-03-08 5:28 ` Tejun Heo
2013-03-08 6:09 ` H. Peter Anvin
2013-03-11 22:50 ` Daniel Vetter
2013-03-11 23:09 ` Chris Wilson
2013-03-12 1:51 ` H. Peter Anvin
2013-03-08 4:58 ` [PATCH 02/14] x86, ACPI: Split find/copy from acpi_initrd_override Yinghai Lu
2013-03-08 5:33 ` Tejun Heo
2013-03-08 6:47 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 03/14] x86, ACPI: store override acpi tables phys addr Yinghai Lu
2013-03-08 5:36 ` Tejun Heo
2013-03-08 6:49 ` Yinghai Lu
2013-03-08 7:08 ` Tejun Heo
2013-03-08 4:58 ` [PATCH 04/14] x86, ACPI: make acpi override finding work with 32bit flat mode Yinghai Lu
2013-03-08 5:50 ` Tejun Heo
2013-03-08 6:57 ` Yinghai Lu
2013-03-08 7:06 ` Tejun Heo
2013-03-08 7:25 ` Yinghai Lu
2013-03-08 7:28 ` Tejun Heo
2013-03-08 7:16 ` Andrew Morton
2013-03-08 21:25 ` Thomas Gleixner
2013-03-08 4:58 ` [PATCH 05/14] x86, ACPI: Find acpi tables in initrd early at head_32.S/head64.c Yinghai Lu
2013-03-08 5:57 ` Tejun Heo
2013-03-08 7:02 ` Yinghai Lu
2013-03-08 7:07 ` Tejun Heo
2013-03-08 4:58 ` Yinghai Lu [this message]
2013-03-08 6:04 ` [PATCH 06/14] x86, mm, numa: Move successful path handling code later Tejun Heo
2013-03-08 7:03 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 07/14] x86, mm, numa: call numa_meminfo_cover_memory() early Yinghai Lu
2013-03-08 4:58 ` [PATCH 08/14] x86, mm, numa: use numa_meminfo to check node_map_pfn alignment Yinghai Lu
2013-03-08 6:26 ` Tejun Heo
2013-03-08 7:05 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 09/14] x86, mm, numa: set memblock nid later Yinghai Lu
2013-03-08 6:28 ` Tejun Heo
2013-03-08 7:11 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 10/14] x86, mm, numa: Move emulation handling down Yinghai Lu
2013-03-08 6:42 ` Tejun Heo
2013-03-08 7:13 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 11/14] x86, acpi, numa: split SLIT handling out Yinghai Lu
2013-03-08 6:46 ` Tejun Heo
2013-03-08 7:18 ` Yinghai Lu
2013-03-08 7:19 ` Tejun Heo
2013-03-08 7:33 ` Yinghai Lu
2013-03-08 4:58 ` [PATCH 12/14] x86, mm, numa: Add early_initmem_init() stub Yinghai Lu
2013-03-08 4:58 ` [PATCH 13/14] x86, mm: Parse numa info early Yinghai Lu
2013-03-08 4:58 ` [PATCH 14/14] x86, mm: Put pagetable on local node ram Yinghai Lu
2013-03-08 7:01 ` Tejun Heo
2013-03-08 7:44 ` Yinghai Lu
2013-03-08 8:20 ` Tang Chen
2013-03-08 17:25 ` Yinghai Lu
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=1362718720-27048-7-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tangchen@cn.fujitsu.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=trenn@suse.de \
/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