From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gregory Haskins Subject: Re: [KVM PATCH v5 3/4] KVM: Fix races in irqfd using new eventfd_kref_get interface Date: Sun, 28 Jun 2009 12:28:19 -0400 Message-ID: <4A479A23.1010804@novell.com> References: <20090625132441.26748.641.stgit@dev.haskins.net> <20090625132826.26748.15607.stgit@dev.haskins.net> <20090628114846.GA11764@redhat.com> <4A4767C2.3010503@novell.com> <20090628125612.GA11866@redhat.com> <20090628125730.GB11866@redhat.com> <20090628132035.GD11866@redhat.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigA954F3BE2B7B73CFF1E281F2" Cc: kvm@vger.kernel.org, avi@redhat.com To: "Michael S. Tsirkin" Return-path: Received: from victor.provo.novell.com ([137.65.250.26]:34107 "EHLO victor.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757257AbZF1Q21 (ORCPT ); Sun, 28 Jun 2009 12:28:27 -0400 In-Reply-To: <20090628132035.GD11866@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigA954F3BE2B7B73CFF1E281F2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Michael S. Tsirkin wrote: > On Sun, Jun 28, 2009 at 03:57:30PM +0300, Michael S. Tsirkin wrote: > =20 >> On Sun, Jun 28, 2009 at 03:56:12PM +0300, Michael S. Tsirkin wrote: >> =20 >>> On Sun, Jun 28, 2009 at 08:53:22AM -0400, Gregory Haskins wrote: >>> =20 >>>> Michael S. Tsirkin wrote: >>>> =20 >>>>> On Thu, Jun 25, 2009 at 09:28:27AM -0400, Gregory Haskins wrote: >>>>> =20 >>>>> =20 >>>>>> eventfd currently emits a POLLHUP wakeup on f_ops->release() to ge= nerate a >>>>>> "release" callback. This lets eventfd clients know if the eventfd= is about >>>>>> to go away and is very useful particularly for in-kernel clients. = However, >>>>>> until recently it is not possible to use this feature of eventfd i= n a >>>>>> race-free way. This patch utilizes a new eventfd interface to rec= tify >>>>>> the problem. >>>>>> >>>>>> Note that one final race is known to exist: the slow-work thread m= ay race >>>>>> with module removal. We are currently working with slow-work upst= ream >>>>>> to fix this issue as well. Since the code prior to this patch als= o >>>>>> races with module_put(), we are not making anything worse, but rat= her >>>>>> shifting the cause of the race. Once the slow-work code is patche= d we >>>>>> will be fixing the last remaining issue. >>>>>> =20 >>>>>> =20 >>>>> By the way, why are we using slow-work here? Wouldn't a regular >>>>> workqueue do just as well, with less code, and avoid the race? >>>>> >>>>> =20 >>>>> =20 >>>> I believe it will cause a problem if you do a "flush_work()" from in= side >>>> a work-item. I could be wrong, of course, but it looks like a recip= e to >>>> deadlock. >>>> >>>> -Greg >>>> >>>> =20 >>> Sure, but the idea is to only flush on kvm close, never from work ite= m. >>> =20 >> To clarify, you don't flush slow works from a work-item, >> so you shouldn't need to flush workqueue either. >> =20 > > I guess my question is - why is slow work different? It's still > a thread pool underneath ... > > =20 Its not interdependent. Flush-work blocks the thread..if the thread happens to be the work-queue thread you may deadlock preventing it from processing further jobs like the inject. In reality it shouldnt be possible, but its just a bad idea to assume its ok. Slow work, on the other hand, will just make a new thread. -Greg --------------enigA954F3BE2B7B73CFF1E281F2 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.11 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkpHmiMACgkQlOSOBdgZUxnK/gCdGmGpL2k1EnnFf9vgWqawBiRA 1bAAnjGqbqWaR/uo9YpRyBNGf2z8/P2v =9+9z -----END PGP SIGNATURE----- --------------enigA954F3BE2B7B73CFF1E281F2--