aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2008-04-16 16:19:06 -0400
committerAvi Kivity <avi@qumranet.com>2008-04-27 11:21:45 -0400
commit960b3991698872f68f09d51f4c2794ad484fe1fd (patch)
treea5b2d84dfb0f7009538c1c07ca5e244da2be3956
parent1336028b9a1fb33537eab8caec66e812eb8cad63 (diff)
KVM: MMU: kvm_pv_mmu_op should not take mmap_sem
kvm_pv_mmu_op should not take mmap_sem. All gfn_to_page() callers down in the MMU processing will take it if necessary, so as it is it can deadlock. Apparently a leftover from the days before slots_lock. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/x86/kvm/mmu.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 078a7f1ac34c..2ad6f5481671 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2173,8 +2173,6 @@ int kvm_pv_mmu_op(struct kvm_vcpu *vcpu, unsigned long bytes,
2173 int r; 2173 int r;
2174 struct kvm_pv_mmu_op_buffer buffer; 2174 struct kvm_pv_mmu_op_buffer buffer;
2175 2175
2176 down_read(&current->mm->mmap_sem);
2177
2178 buffer.ptr = buffer.buf; 2176 buffer.ptr = buffer.buf;
2179 buffer.len = min_t(unsigned long, bytes, sizeof buffer.buf); 2177 buffer.len = min_t(unsigned long, bytes, sizeof buffer.buf);
2180 buffer.processed = 0; 2178 buffer.processed = 0;
@@ -2194,7 +2192,6 @@ int kvm_pv_mmu_op(struct kvm_vcpu *vcpu, unsigned long bytes,
2194 r = 1; 2192 r = 1;
2195out: 2193out:
2196 *ret = buffer.processed; 2194 *ret = buffer.processed;
2197 up_read(&current->mm->mmap_sem);
2198 return r; 2195 return r;
2199} 2196}
2200 2197