[PATCH 04/21] X86_64, UV: Add UV MMR Illegal Access Function

From: Mike Travis
Date: Wed Apr 27 2016 - 21:13:15 EST


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.

Signed-off-by: Mike Travis <travis@xxxxxxx>
Reviewed-by: Dimitri Sivanich <sivanich@xxxxxxx>
Tested-by: John Estabrook <estabrook@xxxxxxx>
Tested-by: Gary Kroening <gfk@xxxxxxx>
---
arch/x86/kernel/apic/x2apic_uv_x.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

--- linux.orig/arch/x86/kernel/apic/x2apic_uv_x.c
+++ linux/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;

--