linux/arch/ia64/kernel
Russ Anderson d2a28ad9fa [IA64] MCA recovery: kernel context recovery table
Memory errors encountered by user applications may surface
when the CPU is running in kernel context.  The current code
will not attempt recovery if the MCA surfaces in kernel
context (privilage mode 0).  This patch adds a check for cases
where the user initiated the load that surfaces in kernel
interrupt code.

An example is a user process lauching a load from memory
and the data in memory had bad ECC.  Before the bad data
gets to the CPU register, and interrupt comes in.  The
code jumps to the IVT interrupt entry point and begins
execution in kernel context.  The process of saving the
user registers (SAVE_REST) causes the bad data to be loaded
into a CPU register, triggering the MCA.  The MCA surfaces in
kernel context, even though the load was initiated from
user context.

As suggested by David and Tony, this patch uses an exception
table like approach, puting the tagged recovery addresses in
a searchable table.  One difference from the exception table
is that MCAs do not surface in precise places (such as with
a TLB miss), so instead of tagging specific instructions,
address ranges are registers.  A single macro is used to do
the tagging, with the input parameter being the label
of the starting address and the macro being the ending
address.  This limits clutter in the code.

This patch only tags one spot, the interrupt ivt entry.
Testing showed that spot to be a "heavy hitter" with
MCAs surfacing while saving user registers.  Other spots
can be added as needed by adding a single macro.

Signed-off-by: Russ Anderson (rja@sgi.com)
Signed-off-by: Tony Luck <tony.luck@intel.com>
2006-03-24 09:49:52 -08:00
..
cpufreq [ACPI] IA64 ZX1 buildfix for _PDC patch 2005-12-05 17:24:45 -05:00
acpi-ext.c [ACPI] ACPICA 20050930 2005-12-10 00:20:25 -05:00
acpi-processor.c [ACPI] IA64 ZX1 buildfix for _PDC patch 2005-12-05 17:24:45 -05:00
acpi.c [IA64] Ignore disabled Local SAPIC Affinity Structure in SRAT 2006-03-22 15:58:46 -08:00
asm-offsets.c [IA64] fix circular dependency on generation of asm-offsets.h 2005-09-13 08:50:39 -07:00
brl_emu.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cyclone.c [IA64] don't report !sn2 or !summit hardware as an error 2006-03-07 15:26:49 -08:00
efi_stub.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
efi.c [IA64] Fix wrong use of memparse in efi.c 2006-02-07 14:13:09 -08:00
entry.h [IA64] Drop spurious paren in entry.h 2005-06-20 09:34:02 -07:00
entry.S Pull delete-sigdelayed into release branch 2006-03-21 08:17:38 -08:00
fsys.S [IA64] cleanup in fsys.S 2006-02-28 08:53:32 -08:00
gate-data.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gate.lds.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gate.S kbuild: ia64 use generic asm-offsets.h support 2005-09-09 22:03:13 +02:00
head.S [IA64] Fix CONFIG_PRINTK_TIME 2006-02-07 15:25:57 -08:00
ia64_ksyms.c [IA64] Remove duplicate EXPORT_SYMBOLs 2006-02-15 13:23:32 -08:00
init_task.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
iosapic.c [IA64] Fix UP build with BSP removal support. 2006-01-19 16:18:47 -08:00
irq_ia64.c [IA64] assign_irq_vector() should not panic 2005-07-11 10:30:07 -07:00
irq_lsapic.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irq.c [IA64] support for cpu0 removal 2006-01-05 10:24:20 -08:00
ivt.S [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00
jprobes.S [IA64] prevent accidental modification of args in jprobe handler 2006-01-13 14:45:21 -08:00
kprobes.c [IA64] prevent accidental modification of args in jprobe handler 2006-01-13 14:45:21 -08:00
machvec.c IA64: Use early_parm to handle mvec_name and nomca 2006-03-23 14:27:12 -08:00
Makefile [ACPI] IA64 ZX1 buildfix for _PDC patch 2005-12-05 17:24:45 -05:00
mca_asm.S [IA64] Set the correct default OS status in the MCA handler 2006-01-24 11:50:07 -08:00
mca_drv_asm.S [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00
mca_drv.c [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00
mca_drv.h [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00
mca.c [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00
minstate.h [IA64] MCA/INIT: remove the physical mode path from minstate.h 2005-09-11 14:09:12 -07:00
module.c [IA64] wider use of for_each_cpu_mask() in arch/ia64 2005-10-25 15:10:08 -07:00
numa.c [IA64] fix generic/up builds 2005-07-06 18:18:10 -07:00
pal.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
palinfo.c [IA64] Allow /proc/pal/cpu0/vm_info under the simulator 2005-08-31 08:34:51 -07:00
patch.c [IA64] add init declaration - gate page functions 2006-03-22 16:54:38 -08:00
perfmon_default_smpl.c [IA64] perfmon: make pfm_sysctl a global, and other cleanup 2005-04-25 13:08:30 -07:00
perfmon_generic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
perfmon_itanium.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
perfmon_mckinley.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
perfmon_montecito.h [IA64] Perfmon for Montecito 2006-01-16 10:31:44 -08:00
perfmon.c Pull bsp-removal into release branch 2006-03-21 08:16:21 -08:00
process.c [PATCH] ia64: task_pt_regs() 2006-01-12 09:08:58 -08:00
ptrace.c [PATCH] ia64: task_pt_regs() 2006-01-12 09:08:58 -08:00
sal.c [IA64] avoid broken SAL_CACHE_FLUSH implementations 2006-02-02 13:25:54 -08:00
salinfo.c [IA64] Add hotplug cpu to salinfo.c, replace semaphore with mutex 2006-01-13 14:22:35 -08:00
semaphore.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
setup.c IA64: Use early_parm to handle mvec_name and nomca 2006-03-23 14:27:12 -08:00
sigframe.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
signal.c [IA64] Delete MCA/INIT sigdelayed code 2006-01-26 13:23:27 -08:00
smp.c [IA64] wider use of for_each_cpu_mask() in arch/ia64 2005-10-25 15:10:08 -07:00
smpboot.c Pull bsp-removal into release branch 2006-03-21 08:16:21 -08:00
sys_ia64.c [PATCH] ia64: task_pt_regs() 2006-01-12 09:08:58 -08:00
time.c Pull bsp-removal into release branch 2006-03-21 08:16:21 -08:00
topology.c Pull bsp-removal into release branch 2006-03-21 08:16:21 -08:00
traps.c [IA64] support panic_on_oops sysctl 2006-02-15 15:16:50 -08:00
unaligned.c [IA64] sysctl option to silence unaligned trap warnings 2006-02-28 09:42:23 -08:00
uncached.c [IA64] eliminate softlockup warning 2006-01-19 11:18:25 -08:00
unwind_decoder.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
unwind_i.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
unwind.c [IA64] MCA/INIT: remove obsolete unwind code 2005-09-11 14:09:34 -07:00
vmlinux.lds.S [IA64] MCA recovery: kernel context recovery table 2006-03-24 09:49:52 -08:00