On 13/09/2017 22:08, Davidlohr Bueso wrote: > For example, the following could occur, making us miss a wakeup: > > CPU0 CPU1 > kvm_vcpu_block kvm_mips_comparecount_func > [L] swait_active(&vcpu->wq) > [S] prepare_to_swait(&vcpu->wq) > [L] if (!kvm_vcpu_has_pending_timer(vcpu)) > schedule() [S] queue_timer_int(vcpu) > > Ensure that the swait_active() check is not hoisted over the interrupt. > > Signed-off-by: Davidlohr Bueso <dbueso@xxxxxxx> > --- > arch/mips/kvm/mips.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c > index bce2a6431430..d535edc01434 100644 > --- a/arch/mips/kvm/mips.c > +++ b/arch/mips/kvm/mips.c > @@ -514,7 +514,7 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu, > > dvcpu->arch.wait = 0; > > - if (swait_active(&dvcpu->wq)) > + if (swq_has_sleeper(&dvcpu->wq)) > swake_up(&dvcpu->wq); > > return 0; > @@ -1179,7 +1179,7 @@ static void kvm_mips_comparecount_func(unsigned long data) > kvm_mips_callbacks->queue_timer_int(vcpu); > > vcpu->arch.wait = 0; > - if (swait_active(&vcpu->wq)) > + if (swq_has_sleeper(&vcpu->wq)) > swake_up(&vcpu->wq); > } > > has_sleeper*s*. Can fix when committing. Paolo