From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:48380) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrTGB-0002Jm-KD for qemu-devel@nongnu.org; Wed, 18 Jul 2012 08:21:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SrTG6-0002RW-VZ for qemu-devel@nongnu.org; Wed, 18 Jul 2012 08:21:43 -0400 Date: Wed, 18 Jul 2012 15:22:02 +0300 From: "Michael S. Tsirkin" Message-ID: <20120718122202.GA5292@redhat.com> References: <4FF0A980.4070903@ozlabs.ru> <1342613333-20239-1-git-send-email-aik@ozlabs.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1342613333-20239-1-git-send-email-aik@ozlabs.ru> Subject: Re: [Qemu-devel] [PATCH] eventfd: making it thread safe List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org On Wed, Jul 18, 2012 at 10:08:53PM +1000, Alexey Kardashevskiy wrote: > QEMU uses IO handlers to run select() in the main loop. > The handlers list is managed by qemu_set_fd_handler() helper > which works fine when called from the main thread as it is > called not when select() is waiting. when select() is not waiting? > > However IO handlers list can be changed in the thread other than > the main one doing os_host_main_loop_wait(), for example, as a result > of a hypercall which changes PCI config space (VFIO on POWER is the case) So the problem is only with VFIO? Can it affect vhost-net? > and enables/disabled MSI/MSIX which closes/creates eventfd handles. There doesn't seem to be a notification in case an fd is deleted. It's probably not at all urgent to remove an fd from select - why do you mention closing handles? > If the main loop is waiting on such eventfd, it has to be restarted. Do you really mean 'should be waiting on the newly created eventfd'? > The patch adds the qemu_notify_event() call to interrupt select() > and make main_loop() to restart select() s/and make main_loop() to restart/to make main_loop() restart/? > with the updated IO > handlers list. > > Signed-off-by: Alexey Kardashevskiy > Reviewed-by: Paolo Bonzini > --- > iohandler.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/iohandler.c b/iohandler.c > index 3c74de6..dea4355 100644 > --- a/iohandler.c > +++ b/iohandler.c > @@ -77,6 +77,7 @@ int qemu_set_fd_handler2(int fd, > ioh->fd_write = fd_write; > ioh->opaque = opaque; > ioh->deleted = 0; > + qemu_notify_event(); > } > return 0; > } > -- > 1.7.10.4