Skip to contentSkip to conversation

x86: Add UV reserved page bios call

PATCH In review Russ Anderson 2 participants 3 messages Oct 21, 2008 – Oct 22, 2008 x86

lore
Share & tools
lore
#0 lore raw

PATCH 3/3 x86: Add UV reserved page bios call

Add UV bios call to get the address of the reserved page.

---
 arch/x86/kernel/bios_uv.c |   11 +++++++++++
 include/asm-x86/uv/bios.h |    5 ++++-
 2 files changed, 15 insertions(+), 1 deletion(-)
arch/x86/kernel/bios_uv.c +11 -0
Index: linux/arch/x86/kernel/bios_uv.c
===================================================================
@@ -142,6 +142,17 @@ uv_bios_change_memprotect(u64 paddr, u64
 }
 EXPORT_SYMBOL_GPL(uv_bios_change_memprotect);
 
+s64
+uv_bios_reserved_page_pa(u64 buf, u64 *cookie, u64 *addr, u64 *len)
+{
+	s64 ret;
+
+	ret = uv_bios_call_irqsave(UV_BIOS_GET_PARTITION_ADDR, (u64)cookie,
+					(u64)addr, buf, (u64)len, 0);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(uv_bios_reserved_page_pa);
+
 s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second)
 {
 	return uv_bios_call(UV_BIOS_FREQ_BASE, clock_type,
include/asm-x86/uv/bios.h +4 -1
Index: linux/include/asm-x86/uv/bios.h
===================================================================
@@ -35,13 +35,15 @@ enum uv_bios_cmd {
 	UV_BIOS_FREQ_BASE,
 	UV_BIOS_WATCHLIST_ALLOC,
 	UV_BIOS_WATCHLIST_FREE,
-	UV_BIOS_MEMPROTECT
+	UV_BIOS_MEMPROTECT,
+	UV_BIOS_GET_PARTITION_ADDR
 };
 
 /*
  * Status values returned from a BIOS call.
  */
 enum {
+	BIOS_STATUS_MORE_PASSES		=  1,
 	BIOS_STATUS_SUCCESS		=  0,
 	BIOS_STATUS_UNIMPLEMENTED	= -ENOSYS,
 	BIOS_STATUS_EINVAL		= -EINVAL,
@@ -102,6 +104,7 @@ extern int uv_bios_mq_watchlist_alloc(in
 					unsigned long *);
 extern int uv_bios_mq_watchlist_free(int, int);
 extern s64 uv_bios_change_memprotect(u64, u64, enum uv_memprotect);
+extern s64 uv_bios_reserved_page_pa(u64, u64 *, u64 *, u64 *);
 
 extern void uv_bios_init(void);
 
Signature · 2 lines
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          [email protected]
#1 lore raw

include/asm-x86/uv/bios.h enum uv_bios_cmd { · line 46

Quoted 5 lines · Russ Anderson

Add UV bios call to get the address of the reserved page.

include/asm-x86/uv/bios.h +2 -0
+	UV_BIOS_GET_PARTITION_ADDR
 
+	BIOS_STATUS_MORE_PASSES		=  1,

what is the "reserved page"?

And why is it called "PARTITION_ADDR" in the enum?

Ingo

#2 lore raw
Quoted 5 lines · Ingo Molnar
Quoted 1 line · Russ Anderson

Add UV bios call to get the address of the reserved page.

Quoted 7 lines

include/asm-x86/uv/bios.h enum uv_bios_cmd { · line 46

Quoted 3 lines
include/asm-x86/uv/bios.h +2 -0
+	UV_BIOS_GET_PARTITION_ADDR
 
+	BIOS_STATUS_MORE_PASSES		=  1,

what is the "reserved page"?

And why is it called "PARTITION_ADDR" in the enum?

The reserved page has partitioning configuration information. This call returns a pointer (physical addr) to the reserved page.

As some background, a large SGI UV system can be run as multiple smaller systems (each smaller system is refered to as a partition). For example, a two rack system can be run as two one rack partitions. Each partition has a unique linux kernel (just like a stand alone system). The reserve page is a way of sharing configuration information about the other partitions in a partitioned system. The UV hardware allows memory to memory transfers between partitions using the GRU (Global Reference Unit). SGI Altix hardware has similar functionality (though the hardware specifics are different).

This is used by the xp driver (drivers/misc/sgi-xp/xpc_uv.c). Dean Nelson submitted a patch yesterday that uses this bios call.

http://marc.info/?l=linux-kernel&m=122462448719656&w=2

Signature · 2 lines
Russ Anderson, OS RAS/Partitioning Project Lead  
SGI - Silicon Graphics Inc          [email protected]