From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [patch 2/2] KVM: close timer injection race window in __vcpu_run Date: Sun, 8 Jun 2008 12:08:34 -0300 Message-ID: <20080608150834.GB1408@dmt.cnet> References: <20080606193734.495417169@localhost.localdomain> <20080606194010.961258871@localhost.localdomain> <484B877B.1080108@qumranet.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Chris Wright , kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mx1.redhat.com ([66.187.233.31]:43287 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754078AbYFHPJX (ORCPT ); Sun, 8 Jun 2008 11:09:23 -0400 Content-Disposition: inline In-Reply-To: <484B877B.1080108@qumranet.com> Sender: kvm-owner@vger.kernel.org List-ID: On Sun, Jun 08, 2008 at 10:17:15AM +0300, Avi Kivity wrote: >> Index: kvm/arch/x86/kvm/i8254.c >> =================================================================== >> --- kvm.orig/arch/x86/kvm/i8254.c >> +++ kvm/arch/x86/kvm/i8254.c >> @@ -200,9 +200,12 @@ static int __pit_timer_fn(struct kvm_kpi >> atomic_inc(&pt->pending); >> smp_mb__after_atomic_inc(); >> - if (vcpu0 && waitqueue_active(&vcpu0->wq)) { >> - vcpu0->arch.mp_state = KVM_MP_STATE_RUNNABLE; >> - wake_up_interruptible(&vcpu0->wq); >> + if (vcpu0) { >> + set_bit(KVM_REQ_PENDING_TIMER, &vcpu0->requests); >> + if (waitqueue_active(&vcpu0->wq)) { >> + vcpu0->arch.mp_state = KVM_MP_STATE_RUNNABLE; >> + wake_up_interruptible(&vcpu0->wq); >> + } >> } >> > > We probably ought to wakeup only if pt->pending was zero, no? Yep, same for LAPIC.