Fire timer only when required. Brings down wakeups by a big number.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJVqQYUAAoJEB6aO1+FQIO2i5oP/22IEve0upRIprVvDKmBCh91 ablALBirktxvfriSmKOY+d+v5Zgo9R96rp4atVeSDerzV9O9Ms41NWR0olIGU98t 9ZMY8P4MTbGn3nBFn4mSIEFbVv3QFoaJwiah01caTJpEvK9wvlj30nuXEERHgcps 2g+ncZWH8lWf/f7J3myS6rhsYfgH4UB6HxwOaAdiZhpFn+5ygViOQnaL5KJYcTcE QKpT8XA9jfQOQlegmHNqowmFqoTrx8DxiCklR/ntRFe51GfKDgZpBVJV3E9Z2+oa RfnIfrKZftjdzk0rVanhtnis5lCP5xb3gXELhDWoE4G8IQoXBQjrVc+mV2OWfGR0 s6xdtL+w9d77kAO7/M+jeA6hR2tKJyiJ9auDW6EalMDKpsjBJMvPErAGmB7WIfib 9fxG8xGUdObrxhnph4GUSErHOB6juFFITtAEeSVqo/JrhBO2+TVnYWnUE5JzRcfj u0u2KmT9OJTLHORkBoPlWHVPPSfSRgp8LFheyNMGXjRASocJfDZQZNgAhNpoar5N 4HlSEgYvF9Ub3SRGPnE08JNdKSMO6plBNYhzIyivFuGKAGx5tMGzgrkPbsJ8ww/w 9GgFAxmVZsiwpOhPw7HTtGt0hWHFJzqW+iK8fzXIscP/TXsSnrkTV0Jd3UKpIqem CvSiMklKIBCoKlHZhS33 =zkW+ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/amit-virtio-rng/tags/vrng-2.4' into staging Fire timer only when required. Brings down wakeups by a big number. # gpg: Signature made Fri Jul 17 14:41:40 2015 BST using RSA key ID 854083B6 # gpg: Good signature from "Amit Shah <amit@amitshah.net>" # gpg: aka "Amit Shah <amit@kernel.org>" # gpg: aka "Amit Shah <amitshah@gmx.net>" * remotes/amit-virtio-rng/tags/vrng-2.4: virtio-rng: trigger timer only when guest requests for entropy Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
71358470ee
@ -77,6 +77,12 @@ static void virtio_rng_process(VirtIORNG *vrng)
|
|||||||
return;
|
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) {
|
if (vrng->quota_remaining < 0) {
|
||||||
quota = 0;
|
quota = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -138,8 +144,7 @@ static void check_rate_limit(void *opaque)
|
|||||||
|
|
||||||
vrng->quota_remaining = vrng->conf.max_bytes;
|
vrng->quota_remaining = vrng->conf.max_bytes;
|
||||||
virtio_rng_process(vrng);
|
virtio_rng_process(vrng);
|
||||||
timer_mod(vrng->rate_limit_timer,
|
vrng->activate_timer = true;
|
||||||
qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
|
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->vq = virtio_add_queue(vdev, 8, handle_input);
|
||||||
vrng->quota_remaining = vrng->conf.max_bytes;
|
vrng->quota_remaining = vrng->conf.max_bytes;
|
||||||
|
|
||||||
vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
|
vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
|
||||||
check_rate_limit, vrng);
|
check_rate_limit, vrng);
|
||||||
|
vrng->activate_timer = true;
|
||||||
timer_mod(vrng->rate_limit_timer,
|
|
||||||
qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms);
|
|
||||||
|
|
||||||
register_savevm(dev, "virtio-rng", -1, 1, virtio_rng_save,
|
register_savevm(dev, "virtio-rng", -1, 1, virtio_rng_save,
|
||||||
virtio_rng_load, vrng);
|
virtio_rng_load, vrng);
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ typedef struct VirtIORNG {
|
|||||||
*/
|
*/
|
||||||
QEMUTimer *rate_limit_timer;
|
QEMUTimer *rate_limit_timer;
|
||||||
int64_t quota_remaining;
|
int64_t quota_remaining;
|
||||||
|
bool activate_timer;
|
||||||
} VirtIORNG;
|
} VirtIORNG;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user