From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH RFC] KVM: Fix race in apic->pending_events processing Date: Thu, 30 May 2013 14:58:09 +0200 Message-ID: <51A74CE1.1000700@redhat.com> References: <20130528125613.GB3326@redhat.com> <51A4B5CA.9070109@redhat.com> <20130528150057.GA6891@redhat.com> <51A4DC63.2040906@redhat.com> <20130530012048.GB20766@redhat.com> <51A6E671.8070408@redhat.com> <20130530060150.GA28173@redhat.com> <51A6F22F.2000600@redhat.com> <20130530070906.GA29815@redhat.com> <51A70021.1040809@redhat.com> <20130530123454.GA4845@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Jan Kiszka To: Gleb Natapov Return-path: Received: from mx1.redhat.com ([209.132.183.28]:2403 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752877Ab3E3M6X (ORCPT ); Thu, 30 May 2013 08:58:23 -0400 In-Reply-To: <20130530123454.GA4845@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Il 30/05/2013 14:34, Gleb Natapov ha scritto: >>> > > >>> > > Ah, we check kvm_apic_has_events() in runnable. Then yes, we will not >>> > > lose the event. >> > >> > Ok, then I'd prefer to have the cmpxchg directly in the if, as in >> > http://article.gmane.org/gmane.comp.emulators.kvm.devel/110505 >> > > I still do not. Both of them are tricky, mine does not coalesce events > needlessly. Agreed that both are tricky, but I don't think my patch is coalescing events. If you have INIT SIPI INIT SIPI ^ ^ INIT bit cleared here SIPI bit checked here my patch KVM sees apic_events = INIT | SIPI and deduces that the SIPI bit was set by the second SIPI, not by the first. In fact the first SIPI was cancelled by the second INIT, and thus should not be processed at all. Instead, with your patch KVM will service all four events; strictly speaking it is wrong to service the first SIPI, which is why I prefer having the cmpxchg in the beginning. Paolo