diff options
author | Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> | 2010-06-11 09:30:36 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-08-01 03:46:41 -0400 |
commit | f918b443527e98476c8cc45683152106b9e4bedc (patch) | |
tree | ae0e259b0cdea62ac0096351efccbd0da4c42be4 /arch/x86/kvm/mmu.c | |
parent | cb83cad2e7e1cdedb2abb9cef2ac076defa679d4 (diff) |
KVM: MMU: avoid double write protected in sync page path
The sync page is already write protected in mmu_sync_children(), don't
write protected it again
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index aa98fca03ed7..ff333572be75 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -1216,6 +1216,7 @@ static void kvm_mmu_commit_zap_page(struct kvm *kvm, | |||
1216 | if ((sp)->gfn != (gfn) || (sp)->role.direct || \ | 1216 | if ((sp)->gfn != (gfn) || (sp)->role.direct || \ |
1217 | (sp)->role.invalid) {} else | 1217 | (sp)->role.invalid) {} else |
1218 | 1218 | ||
1219 | /* @sp->gfn should be write-protected at the call site */ | ||
1219 | static int __kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, | 1220 | static int __kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, |
1220 | struct list_head *invalid_list, bool clear_unsync) | 1221 | struct list_head *invalid_list, bool clear_unsync) |
1221 | { | 1222 | { |
@@ -1224,11 +1225,8 @@ static int __kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, | |||
1224 | return 1; | 1225 | return 1; |
1225 | } | 1226 | } |
1226 | 1227 | ||
1227 | if (clear_unsync) { | 1228 | if (clear_unsync) |
1228 | if (rmap_write_protect(vcpu->kvm, sp->gfn)) | ||
1229 | kvm_flush_remote_tlbs(vcpu->kvm); | ||
1230 | kvm_unlink_unsync_page(vcpu->kvm, sp); | 1229 | kvm_unlink_unsync_page(vcpu->kvm, sp); |
1231 | } | ||
1232 | 1230 | ||
1233 | if (vcpu->arch.mmu.sync_page(vcpu, sp)) { | 1231 | if (vcpu->arch.mmu.sync_page(vcpu, sp)) { |
1234 | kvm_mmu_prepare_zap_page(vcpu->kvm, sp, invalid_list); | 1232 | kvm_mmu_prepare_zap_page(vcpu->kvm, sp, invalid_list); |