diff mbox

[1/6] SQUASHME: Don't let e820_PMEM sections

Message ID 551A9FC2.1030005@plexistor.com (mailing list archive)
State New, archived
Headers show

Commit Message

Boaz Harrosh March 31, 2015, 1:23 p.m. UTC
From: Christoph Hellwig <hch@lst.de>

If we need a NUMA crossing a mids a contiguous memory range
we split the range at NUMA boundary so to produce two pmemX
devices. We do not like 2 NUMA IDs at the same device.

TODO: What happens with real type-12 NvDIMM the BIOS splits
these ranges?

Christoph I please need this patch for now. I have booting
problems on some machines, when a contiguous pmem range crosses
a NUMA boundary.

Signed-off-by: Boaz Harrosh <boaz@plexistor.com>
---
 arch/x86/kernel/e820.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Brooks, Adam J March 31, 2015, 5:16 p.m. UTC | #1
>If we need a NUMA crossing a mids a contiguous memory range
>we split the range at NUMA boundary so to produce two pmemX
>devices. We do not like 2 NUMA IDs at the same device.
>
>TODO: What happens with real type-12 NvDIMM the BIOS splits
>these ranges?

The physical memory map for an Intel based dual socket system supporting NVDIMMS will be:
Socket 0 Normal Memory
Socket 0 NVDIMMs
Socket 1 Normal Memory
Socket 1 NVDIMMs

If you have both NVDIMMs and normal DIMMs on both sockets you will see two separate ranges. If there are NVDIMMs on both sockets, but no normal memory on socket 1, then you will end up with a single range covering the NVDIMMs on both sockets.
diff mbox

Patch

diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index 4bd525a..a098c74 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -346,7 +346,7 @@  int __init sanitize_e820_map(struct e820entry *biosmap, int max_nr_map,
 		 * continue building up new bios map based on this
 		 * information
 		 */
-		if (current_type != last_type)	{
+		if (current_type != last_type || current_type == E820_PRAM) {
 			if (last_type != 0)	 {
 				new_bios[new_bios_entry].size =
 					change_point[chgidx]->addr - last_addr;