The kernel needs sometime to be able to cancel an ongoing command. For instance, if the virtio-rng device uses the egd backend and this backend doesn't provide data, the buffer provided by the kernel is kept as long as it is needed.
On the kernel side, a read blocks until the buffer returns from QEMU. As the read is done with a mutex held, all the hw_random interface hangs and we cannot switch to another hw_random backend. So this series adds a control queue to the virtio-rng device to allow to flush the virtio-rng input queue to release the kernel mutex and to allow to switch to another device. The kernel side series can be found at: https://github.com/vivier/linux/commits/virtio-rng-ctrl Laurent Vivier (2): virtio-rng: prepare the introduction of a control queue virtio-rng: add a control queue hw/core/machine.c | 1 + hw/virtio/trace-events | 6 ++ hw/virtio/virtio-rng.c | 99 ++++++++++++++++++--- include/hw/virtio/virtio-rng.h | 5 +- include/standard-headers/linux/virtio_rng.h | 14 +++ 5 files changed, 111 insertions(+), 14 deletions(-) -- 2.23.0