Commit-ID:  7563421b13da21dd7a947f658b5299e65ed95cbe
Gitweb:     http://git.kernel.org/tip/7563421b13da21dd7a947f658b5299e65ed95cbe
Author:     Mike Travis <[email protected]>
AuthorDate: Fri, 29 Apr 2016 16:54:06 -0500
Committer:  Ingo Molnar <[email protected]>
CommitDate: Wed, 4 May 2016 08:48:47 +0200

x86/platform/UV: Add UV MMR Illegal Access Function

This new function is generated by the UV MMR generation script to
identify MMR registers and fields that are not defined for a specific
UV architecture.  With this switch, the immediate panic can be replaced
with a message and a bad return value allowing either hardware or the
emulator to diagnose the problem.  It allows functions common to some
UV arches to use common defines that might not be fully defined for all
arches, as long as they do not reference them on the unsupported arches.

Tested-by: John Estabrook <[email protected]>
Tested-by: Gary Kroening <[email protected]>
Tested-by: Nathan Zimmer <[email protected]>
Signed-off-by: Mike Travis <[email protected]>
Reviewed-by: Dimitri Sivanich <[email protected]>
Cc: Andrew Banman <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Brian Gerst <[email protected]>
Cc: Denys Vlasenko <[email protected]>
Cc: H. Peter Anvin <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Russ Anderson <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c 
b/arch/x86/kernel/apic/x2apic_uv_x.c
index 9086d95..85c3849 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -55,6 +55,18 @@ EXPORT_SYMBOL_GPL(uv_apicid_hibits);
 
 static struct apic apic_x2apic_uv_x;
 
+/* Set this to use hardware error handler instead of kernel panic */
+static int disable_uv_undefined_panic = 1;
+unsigned long uv_undefined(char *str)
+{
+       if (likely(!disable_uv_undefined_panic))
+               panic("UV: error: undefined MMR: %s\n", str);
+       else
+               pr_crit("UV: error: undefined MMR: %s\n", str);
+       return ~0ul;    /* cause a machine fault  */
+}
+EXPORT_SYMBOL(uv_undefined);
+
 static unsigned long __init uv_early_read_mmr(unsigned long addr)
 {
        unsigned long val, *mmr;

Reply via email to