[PATCH] x86, UV: blade-local memory

From: Jack Steiner
Date: Mon Jul 27 2009 - 10:35:22 EST


UV blades may not have any blade-local memory. Add a field (nid) to the UV
blade structure to indicates whether the node has local memory.
This is needed by the GRU driver (pushed separately).


Signed-off-by: Jack Steiner <steiner@xxxxxxx>

---
arch/x86/include/asm/uv/uv_hub.h | 7 +++++++
arch/x86/kernel/apic/x2apic_uv_x.c | 5 +++++
2 files changed, 12 insertions(+)

Index: linux/arch/x86/include/asm/uv/uv_hub.h
===================================================================
--- linux.orig/arch/x86/include/asm/uv/uv_hub.h 2009-07-23 09:17:15.000000000 -0500
+++ linux/arch/x86/include/asm/uv/uv_hub.h 2009-07-23 09:44:41.000000000 -0500
@@ -327,6 +327,7 @@ struct uv_blade_info {
unsigned short nr_possible_cpus;
unsigned short nr_online_cpus;
unsigned short pnode;
+ short memory_nid;
};
extern struct uv_blade_info *uv_blade_info;
extern short *uv_node_to_blade;
@@ -363,6 +364,12 @@ static inline int uv_blade_to_pnode(int
return uv_blade_info[bid].pnode;
}

+/* Nid of memory node on blade. -1 if no blade-local memory */
+static inline int uv_blade_to_memory_nid(int bid)
+{
+ return uv_blade_info[bid].memory_nid;
+}
+
/* Determine the number of possible cpus on a blade */
static inline int uv_blade_nr_possible_cpus(int bid)
{
Index: linux/arch/x86/kernel/apic/x2apic_uv_x.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/x2apic_uv_x.c 2009-07-23 09:17:15.000000000 -0500
+++ linux/arch/x86/kernel/apic/x2apic_uv_x.c 2009-07-23 09:44:41.000000000 -0500
@@ -592,6 +592,8 @@ void __init uv_system_init(void)
bytes = sizeof(struct uv_blade_info) * uv_num_possible_blades();
uv_blade_info = kmalloc(bytes, GFP_KERNEL);
BUG_ON(!uv_blade_info);
+ for (blade = 0; blade < uv_num_possible_blades(); blade++)
+ uv_blade_info[blade].memory_nid = -1;

get_lowmem_redirect(&lowmem_redir_base, &lowmem_redir_size);

@@ -630,6 +632,9 @@ void __init uv_system_init(void)
lcpu = uv_blade_info[blade].nr_possible_cpus;
uv_blade_info[blade].nr_possible_cpus++;

+ /* Any node on the blade, else will contain -1. */
+ uv_blade_info[blade].memory_nid = nid;
+
uv_cpu_hub_info(cpu)->lowmem_remap_base = lowmem_redir_base;
uv_cpu_hub_info(cpu)->lowmem_remap_top = lowmem_redir_size;
uv_cpu_hub_info(cpu)->m_val = m_val;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/