kernel-ark/arch/powerpc
Paul Mackerras b4072df407 KVM: PPC: Book3S HV: Handle guest-caused machine checks on POWER7 without panicking
Currently, if a machine check interrupt happens while we are in the
guest, we exit the guest and call the host's machine check handler,
which tends to cause the host to panic.  Some machine checks can be
triggered by the guest; for example, if the guest creates two entries
in the SLB that map the same effective address, and then accesses that
effective address, the CPU will take a machine check interrupt.

To handle this better, when a machine check happens inside the guest,
we call a new function, kvmppc_realmode_machine_check(), while still in
real mode before exiting the guest.  On POWER7, it handles the cases
that the guest can trigger, either by flushing and reloading the SLB,
or by flushing the TLB, and then it delivers the machine check interrupt
directly to the guest without going back to the host.  On POWER7, the
OPAL firmware patches the machine check interrupt vector so that it
gets control first, and it leaves behind its analysis of the situation
in a structure pointed to by the opal_mc_evt field of the paca.  The
kvmppc_realmode_machine_check() function looks at this, and if OPAL
reports that there was no error, or that it has handled the error, we
also go straight back to the guest with a machine check.  We have to
deliver a machine check to the guest since the machine check interrupt
might have trashed valid values in SRR0/1.

If the machine check is one we can't handle in real mode, and one that
OPAL hasn't already handled, or on PPC970, we exit the guest and call
the host's machine check handler.  We do this by jumping to the
machine_check_fwnmi label, rather than absolute address 0x200, because
we don't want to re-execute OPAL's handler on POWER7.  On PPC970, the
two are equivalent because address 0x200 just contains a branch.

Then, if the host machine check handler decides that the system can
continue executing, kvmppc_handle_exit() delivers a machine check
interrupt to the guest -- once again to let the guest know that SRR0/1
have been modified.

Signed-off-by: Paul Mackerras <paulus@samba.org>
[agraf: fix checkpatch warnings]
Signed-off-by: Alexander Graf <agraf@suse.de>
2012-12-06 01:34:07 +01:00
..
boot Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2012-10-06 03:16:12 +09:00
configs UAPI Disintegration 2012-10-09 2012-10-09 15:04:25 +01:00
include KVM: PPC: Book3S HV: Handle guest-caused machine checks on POWER7 without panicking 2012-12-06 01:34:07 +01:00
kernel KVM: PPC: Book3S HV: Improve handling of local vs. global TLB invalidations 2012-12-06 01:34:05 +01:00
kvm KVM: PPC: Book3S HV: Handle guest-caused machine checks on POWER7 without panicking 2012-12-06 01:34:07 +01:00
lib powerpc: Fix VMX fix for memcpy case 2012-10-04 18:02:43 +10:00
math-emu
mm readahead: fault retry breaks mmap file read random detection 2012-10-09 16:22:47 +09:00
net powerpc: Start using ___PPC_RA/B/S/T where necessary 2012-07-10 19:18:25 +10:00
oprofile mm: use mm->exe_file instead of first VM_EXECUTABLE vma->vm_file 2012-10-09 16:22:18 +09:00
perf Revert "powerpc/perf: Use pmc_overflow() to detect rolled back events" 2012-10-18 10:36:11 +11:00
platforms Merge remote-tracking branch 'master' into queue 2012-10-29 19:15:32 -02:00
sysdev Merge remote-tracking branch 'master' into queue 2012-10-29 19:15:32 -02:00
xmon powerpc: Add an xmon command to dump one or all pacas 2012-09-18 15:02:36 +10:00
Kconfig Merge branch 'modules-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux 2012-10-14 13:39:34 -07:00
Kconfig.debug powerpc: IOMMU fault injection 2012-07-10 19:18:59 +10:00
Makefile
relocs_check.pl