From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60815) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZEuia-0000gk-6r for qemu-devel@nongnu.org; Tue, 14 Jul 2015 03:33:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZEuiZ-0000GW-78 for qemu-devel@nongnu.org; Tue, 14 Jul 2015 03:33:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49446) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZEuiZ-0000GO-26 for qemu-devel@nongnu.org; Tue, 14 Jul 2015 03:33:31 -0400 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 746253CA97B for ; Tue, 14 Jul 2015 07:33:30 +0000 (UTC) From: Pankaj Gupta Date: Tue, 14 Jul 2015 13:03:09 +0530 Message-Id: <1436859190-20002-2-git-send-email-pagupta@redhat.com> In-Reply-To: <1436859190-20002-1-git-send-email-pagupta@redhat.com> References: <1436859190-20002-1-git-send-email-pagupta@redhat.com> Subject: [Qemu-devel] [PATCH 1/2 v2] virtio-rng: Bump up quota value only when guest requests entropy List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: amit.shah@redhat.com, Pankaj Gupta , mst@redhat.com This patch triggers timer only when guest requests for entropy. As soon as first request from guest for entropy comes we set the timer. Timer bumps up the quota value when it gets triggered. Signed-off-by: Pankaj Gupta --- hw/virtio/virtio-rng.c | 15 ++++++++------- include/hw/virtio/virtio-rng.h | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c index 22b1d87..8774a0c 100644 --- a/hw/virtio/virtio-rng.c +++ b/hw/virtio/virtio-rng.c @@ -78,6 +78,12 @@ static void virtio_rng_process(VirtIORNG *vrng) return; } + if (vrng->activate_timer) { + timer_mod(vrng->rate_limit_timer, + qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms); + vrng->activate_timer = false; + } + if (vrng->quota_remaining < 0) { quota = 0; } else { @@ -139,8 +145,7 @@ static void check_rate_limit(void *opaque) vrng->quota_remaining = vrng->conf.max_bytes; virtio_rng_process(vrng); - timer_mod(vrng->rate_limit_timer, - qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms); + vrng->activate_timer = true; } static void virtio_rng_device_realize(DeviceState *dev, Error **errp) @@ -196,13 +201,9 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp) vrng->vq = virtio_add_queue(vdev, 8, handle_input); vrng->quota_remaining = vrng->conf.max_bytes; - vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, check_rate_limit, vrng); - - timer_mod(vrng->rate_limit_timer, - qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms); - + vrng->activate_timer = true; register_savevm(dev, "virtio-rng", -1, 1, virtio_rng_save, virtio_rng_load, vrng); } diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h index 0316488..3f07de7 100644 --- a/include/hw/virtio/virtio-rng.h +++ b/include/hw/virtio/virtio-rng.h @@ -44,6 +44,7 @@ typedef struct VirtIORNG { */ QEMUTimer *rate_limit_timer; int64_t quota_remaining; + bool activate_timer; } VirtIORNG; #endif -- 1.9.3