Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751523AbdIMUfx (ORCPT ); Wed, 13 Sep 2017 16:35:53 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42552 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751112AbdIMUfw (ORCPT ); Wed, 13 Sep 2017 16:35:52 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 36CAC3680B Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=pbonzini@redhat.com Subject: Re: [PATCH 7/7] kvm,mips: Fix potential swait_active() races To: Davidlohr Bueso , mingo@kernel.org, peterz@infradead.org Cc: npiggin@gmail.com, paulmck@linux.vnet.ibm.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Davidlohr Bueso References: <20170913200824.28067-1-dave@stgolabs.net> <20170913200824.28067-8-dave@stgolabs.net> From: Paolo Bonzini Message-ID: <0942aa56-47c7-5a21-4786-f97d38e74004@redhat.com> Date: Wed, 13 Sep 2017 22:35:47 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170913200824.28067-8-dave@stgolabs.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 13 Sep 2017 20:35:52 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1289 Lines: 44 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 > --- > 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