From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49371) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abPsb-0002KK-Ql for qemu-devel@nongnu.org; Thu, 03 Mar 2016 04:49:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1abPsY-0007b5-M3 for qemu-devel@nongnu.org; Thu, 03 Mar 2016 04:49:09 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37141) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abPsY-0007ay-GO for qemu-devel@nongnu.org; Thu, 03 Mar 2016 04:49:06 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id CDA752DC371 for ; Thu, 3 Mar 2016 09:49:05 +0000 (UTC) From: Ladi Prosek Date: Thu, 3 Mar 2016 10:48:34 +0100 Message-Id: <1456998514-19271-1-git-send-email-lprosek@redhat.com> Subject: [Qemu-devel] [PATCH] virtio-rng: ask for more data if queue is not fully drained List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: amit.shah@redhat.com, pbonzini@redhat.com, mst@redhat.com, Ladi Prosek , pagupta@redhat.com This commit effectively reverts: commit 4621c1768ef5d12171cca2aa1473595ecb9f1c9e Author: Amit Shah Date: Wed Nov 21 11:21:19 2012 +0530 virtio-rng: remove extra request for entropy but instead of calling virtio_rng_process unconditionally, it first checks to see if the queue is empty as a little bit of optimization. Signed-off-by: Ladi Prosek --- This commit has a logical dependency on [PATCH v3 0/4] rng-random: implement request queue which removes a synchronous invocation of the receive_func callback in rng_random_request_entropy, thereby eliminating the risk of infinite recursion. hw/virtio/virtio-rng.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c index 17da2f8..d713464 100644 --- a/hw/virtio/virtio-rng.c +++ b/hw/virtio/virtio-rng.c @@ -69,6 +69,13 @@ static void chr_read(void *opaque, const void *buf, size_t size) g_free(elem); } virtio_notify(vdev, vrng->vq); + + if (!virtio_queue_empty(vrng->vq)) { + /* If we didn't drain the queue, call virtio_rng_process + * to take care of asking for more data as appropriate. + */ + virtio_rng_process(vrng); + } } static void virtio_rng_process(VirtIORNG *vrng) -- 2.5.0