summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2008-08-27 16:32:24 +0300
committerAvi Kivity <avi@qumranet.com>2008-10-15 10:15:24 +0200
commit2245a28fe2e6fdb1bdabc4dcde1ea3a5c37e2a9e (patch)
tree7e43c47167c447b343c279e8562fe08c58b4b759
parentbc2d429979451d69d0985c5dbdf908cace2831cc (diff)
downloadlinux-stable-2245a28fe2e6fdb1bdabc4dcde1ea3a5c37e2a9e.tar.gz
linux-stable-2245a28fe2e6fdb1bdabc4dcde1ea3a5c37e2a9e.tar.bz2
linux-stable-2245a28fe2e6fdb1bdabc4dcde1ea3a5c37e2a9e.zip
KVM: MMU: Add locking around kvm_mmu_slot_remove_write_access()
It was generally safe due to slots_lock being held for write, but it wasn't very nice. Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/x86/kvm/mmu.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index a24da8f2ee91..5052acdc0a77 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2097,6 +2097,7 @@ void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot)
{
struct kvm_mmu_page *sp;
+ spin_lock(&kvm->mmu_lock);
list_for_each_entry(sp, &kvm->arch.active_mmu_pages, link) {
int i;
u64 *pt;
@@ -2110,6 +2111,7 @@ void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot)
if (pt[i] & PT_WRITABLE_MASK)
pt[i] &= ~PT_WRITABLE_MASK;
}
+ spin_unlock(&kvm->mmu_lock);
}
void kvm_mmu_zap_all(struct kvm *kvm)