linux/arch
Paul Mackerras f0888f7015 KVM: PPC: Book3S HV: Make secondary threads more robust against stray IPIs
Currently on POWER7, if we are running the guest on a core and we don't
need all the hardware threads, we do nothing to ensure that the unused
threads aren't executing in the kernel (other than checking that they
are offline).  We just assume they're napping and we don't do anything
to stop them trying to enter the kernel while the guest is running.
This means that a stray IPI can wake up the hardware thread and it will
then try to enter the kernel, but since the core is in guest context,
it will execute code from the guest in hypervisor mode once it turns the
MMU on, which tends to lead to crashes or hangs in the host.

This fixes the problem by adding two new one-byte flags in the
kvmppc_host_state structure in the PACA which are used to interlock
between the primary thread and the unused secondary threads when entering
the guest.  With these flags, the primary thread can ensure that the
unused secondaries are not already in kernel mode (i.e. handling a stray
IPI) and then indicate that they should not try to enter the kernel
if they do get woken for any reason.  Instead they will go into KVM code,
find that there is no vcpu to run, acknowledge and clear the IPI and go
back to nap mode.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
2012-04-08 14:01:20 +03:00
..
alpha kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
arm kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
avr32 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
blackfin kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
c6x kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
cris Merge branch 'x86-x32-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 18:12:23 -07:00
frv kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
h8300 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
hexagon kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
ia64 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
m32r Merge branch 'x86-x32-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 18:12:23 -07:00
m68k kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
microblaze kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
mips kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
mn10300 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
openrisc kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
parisc kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
powerpc KVM: PPC: Book3S HV: Make secondary threads more robust against stray IPIs 2012-04-08 14:01:20 +03:00
s390 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
score kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
sh kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
sparc kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
tile kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
um kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
unicore32 kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
x86 KVM: Switch to srcu-less get_dirty_log() 2012-04-08 12:50:00 +03:00
xtensa kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
.gitignore
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2012-03-29 14:49:45 -07:00