kvm: fix schedule in atomic in kvm_steal_time_set_preempted()
kvm_steal_time_set_preempted() isn't disabling the pagefaults before calling __copy_to_user and the kernel debug notices. Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3f5ad8be37
commit
931f261b42
@ -2844,7 +2844,17 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
|
void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Disable page faults because we're in atomic context here.
|
||||||
|
* kvm_write_guest_offset_cached() would call might_fault()
|
||||||
|
* that relies on pagefault_disable() to tell if there's a
|
||||||
|
* bug. NOTE: the write to guest memory may not go through if
|
||||||
|
* during postcopy live migration or if there's heavy guest
|
||||||
|
* paging.
|
||||||
|
*/
|
||||||
|
pagefault_disable();
|
||||||
kvm_steal_time_set_preempted(vcpu);
|
kvm_steal_time_set_preempted(vcpu);
|
||||||
|
pagefault_enable();
|
||||||
kvm_x86_ops->vcpu_put(vcpu);
|
kvm_x86_ops->vcpu_put(vcpu);
|
||||||
kvm_put_guest_fpu(vcpu);
|
kvm_put_guest_fpu(vcpu);
|
||||||
vcpu->arch.last_host_tsc = rdtsc();
|
vcpu->arch.last_host_tsc = rdtsc();
|
||||||
|
Loading…
Reference in New Issue
Block a user