diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-21 18:38:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-21 18:38:43 -0400 |
commit | 5f033bb9bc5cb3bb37a79e3ef131f50ecdcb72b0 (patch) | |
tree | 16c6fdc3fab80d88ea4d8fd7eb302097f97c062c /arch/x86/mm/numa_64.c | |
parent | fd9be4ce2e1eb407a8152f823698cc0d652bbec8 (diff) | |
parent | 34d0559178393547505ec9492321255405f4e441 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86: (77 commits)
x86: UV startup of slave cpus
x86: integrate pci-dma.c
x86: don't do dma if mask is NULL.
x86: return conditional to mmu
x86: remove kludge from x86_64
x86: unify gfp masks
x86: retry allocation if failed
x86: don't try to allocate from DMA zone at first
x86: use a fallback dev for i386
x86: use numa allocation function in i386
x86: remove virt_to_bus in pci-dma_64.c
x86: adjust dma_free_coherent for i386
x86: move bad_dma_address
x86: isolate coherent mapping functions
x86: move dma_coherent functions to pci-dma.c
x86: merge iommu initialization parameters
x86: merge dma_supported
x86: move pci fixup to pci-dma.c
x86: move x86_64-specific to common code.
x86: move initialization functions to pci-dma.c
...
Diffstat (limited to 'arch/x86/mm/numa_64.c')
-rw-r--r-- | arch/x86/mm/numa_64.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 2ea56f48f29b..cb3170186355 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c | |||
@@ -60,7 +60,7 @@ unsigned long __initdata nodemap_size; | |||
60 | * -1 if node overlap or lost ram (shift too big) | 60 | * -1 if node overlap or lost ram (shift too big) |
61 | */ | 61 | */ |
62 | static int __init populate_memnodemap(const struct bootnode *nodes, | 62 | static int __init populate_memnodemap(const struct bootnode *nodes, |
63 | int numnodes, int shift) | 63 | int numnodes, int shift, int *nodeids) |
64 | { | 64 | { |
65 | unsigned long addr, end; | 65 | unsigned long addr, end; |
66 | int i, res = -1; | 66 | int i, res = -1; |
@@ -76,7 +76,12 @@ static int __init populate_memnodemap(const struct bootnode *nodes, | |||
76 | do { | 76 | do { |
77 | if (memnodemap[addr >> shift] != NUMA_NO_NODE) | 77 | if (memnodemap[addr >> shift] != NUMA_NO_NODE) |
78 | return -1; | 78 | return -1; |
79 | memnodemap[addr >> shift] = i; | 79 | |
80 | if (!nodeids) | ||
81 | memnodemap[addr >> shift] = i; | ||
82 | else | ||
83 | memnodemap[addr >> shift] = nodeids[i]; | ||
84 | |||
80 | addr += (1UL << shift); | 85 | addr += (1UL << shift); |
81 | } while (addr < end); | 86 | } while (addr < end); |
82 | res = 1; | 87 | res = 1; |
@@ -139,7 +144,8 @@ static int __init extract_lsb_from_nodes(const struct bootnode *nodes, | |||
139 | return i; | 144 | return i; |
140 | } | 145 | } |
141 | 146 | ||
142 | int __init compute_hash_shift(struct bootnode *nodes, int numnodes) | 147 | int __init compute_hash_shift(struct bootnode *nodes, int numnodes, |
148 | int *nodeids) | ||
143 | { | 149 | { |
144 | int shift; | 150 | int shift; |
145 | 151 | ||
@@ -149,7 +155,7 @@ int __init compute_hash_shift(struct bootnode *nodes, int numnodes) | |||
149 | printk(KERN_DEBUG "NUMA: Using %d for the hash shift.\n", | 155 | printk(KERN_DEBUG "NUMA: Using %d for the hash shift.\n", |
150 | shift); | 156 | shift); |
151 | 157 | ||
152 | if (populate_memnodemap(nodes, numnodes, shift) != 1) { | 158 | if (populate_memnodemap(nodes, numnodes, shift, nodeids) != 1) { |
153 | printk(KERN_INFO "Your memory is not aligned you need to " | 159 | printk(KERN_INFO "Your memory is not aligned you need to " |
154 | "rebuild your kernel with a bigger NODEMAPSIZE " | 160 | "rebuild your kernel with a bigger NODEMAPSIZE " |
155 | "shift=%d\n", shift); | 161 | "shift=%d\n", shift); |
@@ -462,7 +468,7 @@ done: | |||
462 | } | 468 | } |
463 | } | 469 | } |
464 | out: | 470 | out: |
465 | memnode_shift = compute_hash_shift(nodes, num_nodes); | 471 | memnode_shift = compute_hash_shift(nodes, num_nodes, NULL); |
466 | if (memnode_shift < 0) { | 472 | if (memnode_shift < 0) { |
467 | memnode_shift = 0; | 473 | memnode_shift = 0; |
468 | printk(KERN_ERR "No NUMA hash function found. NUMA emulation " | 474 | printk(KERN_ERR "No NUMA hash function found. NUMA emulation " |