diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2016-03-03 13:13:35 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2016-03-03 13:13:36 +0000 |
| commit | 2d3b7c0164e1b9287304bc70dd6ed071ba3e8dfc (patch) | |
| tree | a3b813016b49116b18a7e18c4f5021dd556c109c /include | |
| parent | ed6128ebbdd7cd885d39980659dad4b5c8ae8158 (diff) | |
| parent | f8693c2cd06d0401007b2c168126ab907f6da345 (diff) | |
| download | focaccia-qemu-2d3b7c0164e1b9287304bc70dd6ed071ba3e8dfc.tar.gz focaccia-qemu-2d3b7c0164e1b9287304bc70dd6ed071ba3e8dfc.zip | |
Merge remote-tracking branch 'remotes/amit-virtio-rng/tags/rng-for-2.6-1' into staging
rng: - implement a request queue for rng-random so multiple guest requests don't result in vq buffers getting forgotten - remove unused request cancellation code - a VM with multiple vq buffers, when migrated, could get in a situation where not all buffers are handed back to the guest. This is now fixed. # gpg: Signature made Thu 03 Mar 2016 12:18:54 GMT 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/rng-for-2.6-1: virtio-rng: ask for more data if queue is not fully drained rng: add request queue support to rng-random rng: move request queue cleanup from RngEgd to RngBackend rng: move request queue from RngEgd to RngBackend rng: remove the unused request cancellation code MAINTAINERS: Add an entry for the include/sysemu/rng*.h files Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/sysemu/rng.h | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h index 858be8cef4..4fffd681a6 100644 --- a/include/sysemu/rng.h +++ b/include/sysemu/rng.h @@ -24,6 +24,7 @@ #define RNG_BACKEND_CLASS(klass) \ OBJECT_CLASS_CHECK(RngBackendClass, (klass), TYPE_RNG_BACKEND) +typedef struct RngRequest RngRequest; typedef struct RngBackendClass RngBackendClass; typedef struct RngBackend RngBackend; @@ -31,13 +32,20 @@ typedef void (EntropyReceiveFunc)(void *opaque, const void *data, size_t size); +struct RngRequest +{ + EntropyReceiveFunc *receive_entropy; + uint8_t *data; + void *opaque; + size_t offset; + size_t size; +}; + struct RngBackendClass { ObjectClass parent_class; - void (*request_entropy)(RngBackend *s, size_t size, - EntropyReceiveFunc *receive_entropy, void *opaque); - void (*cancel_requests)(RngBackend *s); + void (*request_entropy)(RngBackend *s, RngRequest *req); void (*opened)(RngBackend *s, Error **errp); }; @@ -48,8 +56,10 @@ struct RngBackend /*< protected >*/ bool opened; + GSList *requests; }; + /** * rng_backend_request_entropy: * @s: the backend to request entropy from @@ -70,12 +80,13 @@ void rng_backend_request_entropy(RngBackend *s, size_t size, void *opaque); /** - * rng_backend_cancel_requests: - * @s: the backend to cancel all pending requests in + * rng_backend_free_request: + * @s: the backend that created the request + * @req: the request to finalize * - * Cancels all pending requests submitted by @rng_backend_request_entropy. This - * should be used by a device during reset or in preparation for live migration - * to stop tracking any request. + * Used by child rng backend classes to finalize requests once they've been + * processed. The request is removed from the list of active requests and + * deleted. */ -void rng_backend_cancel_requests(RngBackend *s); +void rng_backend_finalize_request(RngBackend *s, RngRequest *req); #endif |