From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NjZdW-00044N-Ad for qemu-devel@nongnu.org; Mon, 22 Feb 2010 09:51:50 -0500 Received: from [199.232.76.173] (port=57529 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NjZdW-00044B-0t for qemu-devel@nongnu.org; Mon, 22 Feb 2010 09:51:50 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NjZdV-0005Yk-7W for qemu-devel@nongnu.org; Mon, 22 Feb 2010 09:51:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37541) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NjZdU-0005Ye-RV for qemu-devel@nongnu.org; Mon, 22 Feb 2010 09:51:49 -0500 Message-ID: <4B829A02.3040605@redhat.com> Date: Mon, 22 Feb 2010 16:51:46 +0200 From: Avi Kivity MIME-Version: 1.0 References: <20100222135906.347393434@amt.cnet> <20100222140209.878250600@amt.cnet> <4B8292C4.9070802@redhat.com> <20100222142920.GB18992@amt.cnet> In-Reply-To: <20100222142920.GB18992@amt.cnet> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [patch uq/master 1/2] virtio-pci: wake up iothread on VIRTIO_PCI_QUEUE_NOTIFY List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcelo Tosatti Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org On 02/22/2010 04:29 PM, Marcelo Tosatti wrote: > On Mon, Feb 22, 2010 at 04:20:52PM +0200, Avi Kivity wrote: > >> On 02/22/2010 03:59 PM, Marcelo Tosatti wrote: >> >>> VIRTIO_PCI_QUEUE_NOTIFY is used to inform availability of new buffers, >>> so wakeup the iothread to process that information immediately. >>> >>> Reported-by: Amit Shah >>> Signed-off-by: Marcelo Tosatti >>> >>> Index: qemu/hw/virtio-pci.c >>> =================================================================== >>> --- qemu.orig/hw/virtio-pci.c >>> +++ qemu/hw/virtio-pci.c >>> @@ -204,6 +204,7 @@ static void virtio_ioport_write(void *op >>> break; >>> case VIRTIO_PCI_QUEUE_NOTIFY: >>> virtio_queue_notify(vdev, val); >>> + qemu_notify_event(); >>> break; >>> >> virtio_queue_notify() will call ->handle_output(), which should >> either do what's needed to be done, or wake up some iothread itself. >> > kick is used to inform either output processing, in which case > ->handle_output() does what its supposed to. > > But its also used to inform availability of new buffers, which is common > to all virtio devices. So what is the point pushing this to > ->handle_output? > I don't understand what this means. ->handle_output() _is_ informing the device model of new buffers. What more is needed? > Are you concerned about spurious wakeups? > Yes. Also, qemu_notify_event() is an undirected notification (wakes up all iothreads, and all devices), whereas ->handle_output() is directed (wakes up exactly what is needed). What's the underlying problem? A new input buffer has become available, and we need to re-poll the incoming file descriptor? If so, that's best done from ->handle_output() (either by waking the iothread or calling read() itself and perhaps receiving -EAGAIN). -- error compiling committee.c: too many arguments to function