2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-01 18:24:23 +08:00
linux-next/arch
Paul Mackerras 2e25aa5f64 KVM: PPC: Book3S HV: Make virtual processor area registration more robust
The PAPR API allows three sorts of per-virtual-processor areas to be
registered (VPA, SLB shadow buffer, and dispatch trace log), and
furthermore, these can be registered and unregistered for another
virtual CPU.  Currently we just update the vcpu fields pointing to
these areas at the time of registration or unregistration.  If this
is done on another vcpu, there is the possibility that the target vcpu
is using those fields at the time and could end up using a bogus
pointer and corrupting memory.

This fixes the race by making the target cpu itself do the update, so
we can be sure that the update happens at a time when the fields
aren't being used.  Each area now has a struct kvmppc_vpa which is
used to manage these updates.  There is also a spinlock which protects
access to all of the kvmppc_vpa structs, other than to the pinned_addr
fields.  (We could have just taken the spinlock when using the vpa,
slb_shadow or dtl fields, but that would mean taking the spinlock on
every guest entry and exit.)

This also changes 'struct dtl' (which was undefined) to 'struct dtl_entry',
which is what the rest of the kernel uses.

Thanks to Michael Ellerman <michael@ellerman.id.au> for pointing out
the need to initialize vcpu->arch.vpa_update_lock.

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:27 +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 virtual processor area registration more robust 2012-04-08 14:01:27 +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