Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17971
b: refs/heads/master
c: 8a6fdd3
h: refs/heads/master
i:
  17969: 954e367
  17967: f8e8f2e
v: v3
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Jan 12, 2006
1 parent 2faedb9 commit 5e47e75
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 95833c83f3b812c78e48db4eaa19f6c74958470b
refs/heads/master: 8a6fdd3e912e0ce6f723431d66baf704bf8a1d26
33 changes: 33 additions & 0 deletions trunk/arch/x86_64/mm/srat.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <linux/topology.h>
#include <asm/proto.h>
#include <asm/numa.h>
#include <asm/e820.h>

static struct acpi_table_slit *acpi_slit;

Expand Down Expand Up @@ -196,12 +197,39 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
nd->start, nd->end);
}

/* Sanity check to catch more bad SRATs (they are amazingly common).
Make sure the PXMs cover all memory. */
static int nodes_cover_memory(void)
{
int i;
unsigned long pxmram, e820ram;

pxmram = 0;
for_each_node_mask(i, nodes_parsed) {
unsigned long s = nodes[i].start >> PAGE_SHIFT;
unsigned long e = nodes[i].end >> PAGE_SHIFT;
pxmram += e - s;
pxmram -= e820_hole_size(s, e);
}

e820ram = end_pfn - e820_hole_size(0, end_pfn);
if (pxmram < e820ram) {
printk(KERN_ERR
"SRAT: PXMs only cover %luMB of your %luMB e820 RAM. Not used.\n",
(pxmram << PAGE_SHIFT) >> 20,
(e820ram << PAGE_SHIFT) >> 20);
return 0;
}
return 1;
}

void __init acpi_numa_arch_fixup(void) {}

/* Use the information discovered above to actually set up the nodes. */
int __init acpi_scan_nodes(unsigned long start, unsigned long end)
{
int i;

if (acpi_numa <= 0)
return -1;

Expand All @@ -212,6 +240,11 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
node_clear(i, nodes_parsed);
}

if (!nodes_cover_memory()) {
bad_srat();
return -1;
}

memnode_shift = compute_hash_shift(nodes, nodes_weight(nodes_parsed));
if (memnode_shift < 0) {
printk(KERN_ERR
Expand Down

0 comments on commit 5e47e75

Please sign in to comment.