2016-04-28 01:06:04

by Mike Travis

[permalink] [raw]
Subject: [PATCH 04/21] X86_64, 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.

Signed-off-by: Mike Travis <[email protected]>
Reviewed-by: Dimitri Sivanich <[email protected]>
Tested-by: John Estabrook <[email protected]>
Tested-by: Gary Kroening <[email protected]>
---
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;

--