Commit 621a20e0 authored by Pankaj Gupta's avatar Pankaj Gupta Committed by Amit Shah
Browse files

virtio-rng: trigger timer only when guest requests for entropy



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: default avatarPankaj Gupta <pagupta@redhat.com>
Reviewed-by: default avatarAmit Shah <amit.shah@redhat.com>
Message-Id: <1436962608-9961-2-git-send-email-pagupta@redhat.com>

[Re-worded patch subject, removed extra whitespace -- Amit]

Signed-off-by: default avatarAmit Shah <amit.shah@redhat.com>
parent 5b5e8cdd
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -77,6 +77,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 {
@@ -138,8 +144,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)
@@ -195,13 +200,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);
}
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ typedef struct VirtIORNG {
     */
    QEMUTimer *rate_limit_timer;
    int64_t quota_remaining;
    bool activate_timer;
} VirtIORNG;

#endif