From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37690) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZFcIu-0008C2-56 for qemu-devel@nongnu.org; Thu, 16 Jul 2015 02:05:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZFcIr-00034q-09 for qemu-devel@nongnu.org; Thu, 16 Jul 2015 02:05:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42193) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZFcIq-00034j-QU for qemu-devel@nongnu.org; Thu, 16 Jul 2015 02:05:52 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 71AA637C83F for ; Thu, 16 Jul 2015 06:05:51 +0000 (UTC) Date: Thu, 16 Jul 2015 11:35:36 +0530 From: Amit Shah Message-ID: <20150716060536.GW10280@grmbl.mre> References: <1436962608-9961-1-git-send-email-pagupta@redhat.com> <1436962608-9961-3-git-send-email-pagupta@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1436962608-9961-3-git-send-email-pagupta@redhat.com> Subject: Re: [Qemu-devel] [PATCH 2/2 v3] virtio-rng: Serve pending request if any after timer bumps up quota. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pankaj Gupta Cc: qemu-devel@nongnu.org, mst@redhat.com On (Wed) 15 Jul 2015 [17:46:48], Pankaj Gupta wrote: > We are arming timer when we get first request from guest. > Even if guest pulls all the data we will be serving guest > only when timer bumps up new quota. When timer expires > we check if we have a pending request from guest, we > serve it and re-arm the timer else we don't do any thing. > > Signed-off-by: Pankaj Gupta > --- > hw/virtio/virtio-rng.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c > index ae04352..3d9a002 100644 > --- a/hw/virtio/virtio-rng.c > +++ b/hw/virtio/virtio-rng.c > @@ -142,9 +142,13 @@ static int virtio_rng_load(QEMUFile *f, void *opaque, int version_id) > static void check_rate_limit(void *opaque) > { > VirtIORNG *vrng = opaque; > + size_t size; > > vrng->quota_remaining = vrng->conf.max_bytes; > - virtio_rng_process(vrng); > + size = get_request_size(vrng->vq, 0); > + if (size > 0) { > + virtio_rng_process(vrng); > + } > vrng->activate_timer = true; Ah, this isn't helping us much here; we might as well return in a similar way from virtio_rng_process. What I had written earlier was slightly different than this: > So now with your changes, here is what we can do: instead of just > activating the timer in check_rate_limit(), we can issue a > get_request_size() call. If the return value is > 0, it means we have > a buffer queued up by the guest, and we can then call > virtio_rng_process() and set activated to true. Else, no need to call > virtio_rng_process at all, and the job for the timer is done, since > there are no more outstanding requests from the guest. Anyway we can look at that later, patch 1 is already a big improvement so I think we should just stick with that, and think about other things in a different series. Thanks, Amit