diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2008-04-16 16:19:06 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-04-27 11:21:45 -0400 |
commit | 960b3991698872f68f09d51f4c2794ad484fe1fd (patch) | |
tree | a5b2d84dfb0f7009538c1c07ca5e244da2be3956 /arch/x86/kvm | |
parent | 1336028b9a1fb33537eab8caec66e812eb8cad63 (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>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/mmu.c | 3 |
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(¤t->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; |
2195 | out: | 2193 | out: |
2196 | *ret = buffer.processed; | 2194 | *ret = buffer.processed; |
2197 | up_read(¤t->mm->mmap_sem); | ||
2198 | return r; | 2195 | return r; |
2199 | } | 2196 | } |
2200 | 2197 | ||