kernel-fxtec-pro1x/arch/powerpc/kernel
Michael Ellerman b3f6a45925 powerpc: Skip emulating & leave interrupts off for kernel program checks
In the program check handler we handle some causes with interrupts off
and others with interrupts on.

We need to enable interrupts to handle the emulation cases, because they
access userspace memory and might sleep.

For faults in the kernel we don't want to do any emulation, and
emulate_instruction() enforces that. do_mathemu() doesn't but probably
should.

The other disadvantage of enabling interrupts for kernel faults is that
we may take another interrupt, and recurse. As seen below:

  --- Exception: e40 at c000000000004ee0 performance_monitor_relon_pSeries_1
  [link register   ] c00000000000f858 .arch_local_irq_restore+0x38/0x90
  [c000000fb185dc10] 0000000000000000 (unreliable)
  [c000000fb185dc80] c0000000007d8558 .program_check_exception+0x298/0x2d0
  [c000000fb185dd00] c000000000002f40 emulation_assist_common+0x140/0x180
  --- Exception: e40 at c000000000004ee0 performance_monitor_relon_pSeries_1
  [link register   ] c00000000000f858 .arch_local_irq_restore+0x38/0x90
  [c000000fb185dff0] 00000000008b9190 (unreliable)
  [c000000fb185e060] c0000000007d8558 .program_check_exception+0x298/0x2d0

So avoid both problems by checking if the fault was in the kernel and
skipping the enable of interrupts and the emulation. Go straight to
delivering the SIGILL, which for kernel faults calls die() and so on,
dropping us in the debugger etc.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2013-08-27 14:45:09 +10:00
..
vdso32 powerpc: Convert some mftb/mftbu into mfspr 2013-08-20 19:33:12 -05:00
vdso64 powerpc: Add VDSO version of time 2013-04-23 16:05:05 +10:00
.gitignore
align.c powerpc: Never handle VSX alignment exceptions from kernel 2013-08-27 14:44:26 +10:00
asm-offsets.c powerpc/perf: Drop MMCRA from thread_struct 2013-07-01 11:50:07 +10:00
audit.c
btext.c powerpc/pmac: Early debug output on screen on 64-bit macs 2013-08-14 14:57:40 +10:00
cacheinfo.c powerpc: Make device tree accesses in cache info code endian safe 2013-08-14 15:33:27 +10:00
cacheinfo.h
clock.c
compat_audit.c
cpu_setup_6xx.S
cpu_setup_44x.S
cpu_setup_a2.S
cpu_setup_fsl_booke.S powerpc/85xx: Add machine check handler to fix PCIe erratum on mpc85xx 2013-07-30 15:50:07 -05:00
cpu_setup_pa6t.S
cpu_setup_power.S powerpc: Fix TLB cleanup at boot on POWER8 2013-05-24 18:13:44 +10:00
cpu_setup_ppc970.S
cputable.c Merge remote-tracking branch 'scott/next' into next 2013-08-09 16:01:40 +10:00
crash.c
crash_dump.c powerpc: Remove savemaxmem parameter setup 2013-07-03 16:08:03 -07:00
dbell.c powerpc: Add accounting for Doorbell interrupts 2013-04-18 15:59:55 +10:00
dma-iommu.c
dma-swiotlb.c powerpc/swiotlb: Enable at early stage and disable if not necessary 2012-09-12 14:57:09 -05:00
dma.c
eeh.c powerpc/eeh: Introdce flag to protect sysfs 2013-07-24 14:18:49 +10:00
eeh_cache.c powerpc/eeh: Remove reference to PCI device 2013-07-24 14:18:46 +10:00
eeh_dev.c powerpc/eeh: Move common part to kernel directory 2013-06-20 17:05:35 +10:00
eeh_driver.c powerpc/eeh: Fix unbalanced enable for IRQ 2013-07-24 14:18:49 +10:00
eeh_event.c powerpc/eeh: Use interruptible sleep in keehd 2013-06-25 17:24:41 +10:00
eeh_pe.c powerpc/eeh: Don't use pci_dev during BAR restore 2013-07-24 14:18:49 +10:00
eeh_sysfs.c powerpc/eeh: Introdce flag to protect sysfs 2013-07-24 14:18:49 +10:00
entry_32.S powerpc/32bit:Store temporary result in r0 instead of r8 2013-06-01 08:29:27 +10:00
entry_64.S powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
epapr_hcalls.S powerpc: Add paravirt idle loop for 64-bit Book-E 2013-03-13 14:19:36 -05:00
epapr_paravirt.c powerpc/85xx: Move ePAPR paravirt initialization earlier 2013-08-07 18:38:06 -05:00
exceptions-64e.S powerpc/ppc64: Rename SOFT_DISABLE_INTS with RECONCILE_IRQ_STATE 2013-08-14 14:57:47 +10:00
exceptions-64s.S powerpc: Add more exception trampolines for hypervisor exceptions 2013-08-27 14:45:09 +10:00
fadump.c mm/ppc: use common help functions to free reserved pages 2013-04-29 15:54:30 -07:00
firmware.c
fpu.S powerpc: Add FP/VSX and VMX register load functions for transactional memory 2013-02-15 16:58:52 +11:00
fsl_booke_entry_mapping.S
ftrace.c
head_8xx.S powerpc: Remove the empty giveup_fpu() function on 32bit kernel 2013-08-14 14:59:50 +10:00
head_32.S
head_40x.S powerpc: Remove the empty giveup_fpu() function on 32bit kernel 2013-08-14 14:59:50 +10:00
head_44x.S powerpc: Remove the empty giveup_fpu() function on 32bit kernel 2013-08-14 14:59:50 +10:00
head_64.S powerpc: Align p_toc 2013-08-14 11:50:19 +10:00
head_booke.h powerpc: Fix interrupt range check on debug exception 2013-05-02 10:31:01 +10:00
head_fsl_booke.S powerpc: Remove the empty giveup_fpu() function on 32bit kernel 2013-08-14 14:59:50 +10:00
hw_breakpoint.c powerpc/hw_brk: Fix off by one error when validating DAWR region end 2013-07-02 08:20:49 +10:00
ibmebus.c ibmebus: convert of_platform_driver to platform_driver 2013-06-12 12:37:26 +01:00
idle.c powerpc/idle: Convert use of typedef ctl_table to struct ctl_table 2013-07-01 11:10:35 +10:00
idle_6xx.S
idle_book3e.S powerpc: Add paravirt idle loop for 64-bit Book-E 2013-03-13 14:19:36 -05:00
idle_e500.S
idle_power4.S
idle_power7.S powerpc/powernv: Always go into nap mode when CPU is offline 2012-09-05 16:05:20 +10:00
io-workarounds.c powerpc: Better split CONFIG_PPC_INDIRECT_PIO and CONFIG_PPC_INDIRECT_MMIO 2013-08-14 14:57:50 +10:00
io.c powerpc/powernv: Add PIO accessors for Power8 LPC bus 2013-08-14 14:58:08 +10:00
iomap.c
iommu.c powerpc/vfio: Enable on PowerNV platform 2013-06-20 16:55:14 +10:00
irq.c powerpc: Rename PMU interrupts from CNT to PMI 2013-08-01 13:11:46 +10:00
isa-bridge.c POWERPC: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
jump_label.c
kgdb.c powerpc/kgdb: Removed kmalloc returned value cast 2013-04-18 13:03:56 +10:00
kprobes.c powerpc: Move the single step enable code to a generic path 2013-06-20 16:55:09 +10:00
kvm.c mm: enhance free_reserved_area() to support poisoning memory with zero 2013-07-03 16:07:32 -07:00
kvm_emul.S
l2cr_6xx.S
legacy_serial.c powerpc: Little endian fixes for legacy_serial.c 2013-08-14 15:33:32 +10:00
lparcfg.c powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
machine_kexec.c powerpc+of: Rename the drivers/of prom_* functions to of_* 2012-11-15 12:56:52 +11:00
machine_kexec_32.c
machine_kexec_64.c powerpc/kexec: Fix kexec when using VMX optimised memcpy 2013-05-14 14:36:23 +10:00
Makefile powerpc/8xx: Remove last traces of 8XX_MINIMAL_FPEMU 2013-08-14 14:58:53 +10:00
misc.S powerpc: switch to generic sys_execve()/kernel_execve() 2012-09-30 23:35:51 -04:00
misc_32.S powerpc: Remove the symbol __flush_icache_range 2013-08-14 14:56:44 +10:00
misc_64.S powerpc: remove the unused function disable_kernel_fp() 2013-08-14 14:59:25 +10:00
module.c
module_32.c
module_64.c powerpc: Build kernel with -mcmodel=medium 2013-01-10 17:00:31 +11:00
msi.c
nvram_64.c powerpc/nvram64: Need return the related error code on failure occurs 2013-07-01 11:46:56 +10:00
of_platform.c powerpc/eeh: Fix crash when adding a device in a slot with DDW 2013-01-10 17:01:58 +11:00
paca.c powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
pci-common.c powerpc: Make OF PCI device tree accesses endian safe 2013-08-14 15:33:30 +10:00
pci-hotplug.c powerpc/pci: Partial tree hotplug support 2013-07-24 14:18:48 +10:00
pci_32.c powerpc/pci: Support per-aperture memory offset 2013-05-06 13:40:40 +10:00
pci_64.c powerpc/pci: Don't use bitfield for force_32bit_msi 2013-08-14 11:50:25 +10:00
pci_dn.c powerpc: Make PCI device node device tree accesses endian safe 2013-08-14 15:33:31 +10:00
pci_of_scan.c powerpc: Make OF PCI device tree accesses endian safe 2013-08-14 15:33:30 +10:00
pmc.c
ppc32.h powerpc: switch to generic old sigaction() 2013-02-03 18:16:10 -05:00
ppc_ksyms.c powerpc: Remove the empty giveup_fpu() function on 32bit kernel 2013-08-14 14:59:50 +10:00
ppc_save_regs.S
proc_powerpc.c proc_powerpc: switch to fixed_size_llseek() 2013-06-29 12:57:50 +04:00
process.c powerpc: Make flush_fp_to_thread() nop when CONFIG_PPC_FPU is disabled 2013-08-14 14:59:44 +10:00
prom.c powerpc: More little endian fixes for prom.c 2013-08-14 15:33:19 +10:00
prom_init.c powerpc: Make prom_init.c endian safe 2013-08-14 15:33:28 +10:00
prom_init_check.sh powerpc/pmac: Early debug output on screen on 64-bit macs 2013-08-14 14:57:40 +10:00
prom_parse.c powerpc: of_parse_dma_window should take a __be32 *dma_window 2013-08-14 15:33:26 +10:00
ptrace.c ptrace/powerpc: revert "hw_breakpoints: Fix racy access to ptrace breakpoints" 2013-07-09 10:33:25 -07:00
ptrace32.c powerpc: fixing ptrace_get_reg to return an error 2013-04-18 13:03:57 +10:00
reloc_32.S powerpc: Don't flush/invalidate the d/icache for an unknown relocation type 2013-07-01 11:10:34 +10:00
reloc_64.S
rtas-proc.c
rtas-rtc.c
rtas.c powerpc: Make RTAS calls endian safe 2013-08-14 15:33:22 +10:00
rtas_flash.c powerpc/rtas_flash: Fix validate_flash buffer overflow issue 2013-05-14 14:36:26 +10:00
rtas_pci.c powerpc/kernel: Cleanup on rtas_pci.c 2013-04-18 13:03:48 +10:00
rtasd.c powerpc/pseries: Add /proc interface to control topology updates 2013-04-26 16:08:26 +10:00
setup-common.c powerpc: More little endian fixes for setup-common.c 2013-08-14 15:33:24 +10:00
setup.h
setup_32.c powerpc/85xx: Move ePAPR paravirt initialization earlier 2013-08-07 18:38:06 -05:00
setup_64.c powerpc: Make cache info device tree accesses endian safe 2013-08-14 15:33:21 +10:00
signal.c powerpc/tm: Fix userspace stack corruption on signal delivery for active transactions 2013-06-01 08:29:23 +10:00
signal.h powerpc/tm: Fix userspace stack corruption on signal delivery for active transactions 2013-06-01 08:29:23 +10:00
signal_32.c powerpc: Fix VRSAVE handling 2013-08-14 14:57:18 +10:00
signal_64.c powerpc: Remove the redundant flush_fp_to_thread() in setup_sigcontext() 2013-08-14 14:59:38 +10:00
smp-tbsync.c POWERPC: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
smp.c powerpc: Little endian SMP IPI demux 2013-08-14 15:33:37 +10:00
stacktrace.c
suspend.c
swsusp.c
swsusp_32.S
swsusp_64.c
swsusp_asm64.S powerpc: add Book E support to 64-bit hibernation 2013-08-23 19:39:26 -05:00
swsusp_booke.S powerpc/mpc85xx: invalidate TLB after hibernation resume 2013-07-30 15:50:08 -05:00
sys_ppc32.c unify compat fanotify_mark(2), switch to COMPAT_SYSCALL_DEFINE 2013-05-09 13:46:38 -04:00
syscalls.c
sysfs.c powerpc: Delete __cpuinit usage from all users 2013-07-01 11:10:36 +10:00
systbl.S
systbl_chk.c
systbl_chk.sh
tau_6xx.c
time.c powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
tm.S powerpc: Fix VRSAVE handling 2013-08-14 14:57:18 +10:00
traps.c powerpc: Skip emulating & leave interrupts off for kernel program checks 2013-08-27 14:45:09 +10:00
udbg.c powerpc: Add a configuration option for early BootX/OpenFirmware debug 2013-06-20 16:55:12 +10:00
udbg_16550.c powerpc/wsp: Fix early debug build 2013-08-16 10:59:27 +10:00
uprobes.c uretprobes/powerpc: Hijack return address 2013-04-13 15:31:56 +02:00
vdso.c powerpc: Delete __cpuinit usage from all users 2013-07-01 11:10:36 +10:00
vecemu.c
vector.S powerpc: Add FP/VSX and VMX register load functions for transactional memory 2013-02-15 16:58:52 +11:00
vio.c powerpc: Make device tree accesses in VIO subsystem endian safe 2013-08-14 15:33:29 +10:00
vmlinux.lds.S powerpc/modules: Module CRC relocation fix causes perf issues 2013-07-24 14:18:43 +10:00