diff options
Diffstat (limited to 'virt/kvm/kvm_main.c')
| -rw-r--r-- | virt/kvm/kvm_main.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 44c47670447a..a49df8988cd6 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -3328,9 +3328,11 @@ bool kvm_vcpu_block(struct kvm_vcpu *vcpu)  	vcpu->stat.generic.blocking = 1; +	preempt_disable();  	kvm_arch_vcpu_blocking(vcpu); -  	prepare_to_rcuwait(wait); +	preempt_enable(); +  	for (;;) {  		set_current_state(TASK_INTERRUPTIBLE); @@ -3340,9 +3342,11 @@ bool kvm_vcpu_block(struct kvm_vcpu *vcpu)  		waited = true;  		schedule();  	} -	finish_rcuwait(wait); +	preempt_disable(); +	finish_rcuwait(wait);  	kvm_arch_vcpu_unblocking(vcpu); +	preempt_enable();  	vcpu->stat.generic.blocking = 0;  |