aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2019-09-04 17:22:34 +0100
committerPeter Maydell <peter.maydell@linaro.org>2019-09-04 17:22:34 +0100
commita8b5ad8e1faef0d1bb3e550530328e8ec76fe87c (patch)
tree8b975dc3f75a6e9ea184eb335a8e952ab4b7021e /backends
parent9de65783e188b6cc3816847e03602864921bf504 (diff)
parenteeb39263aa9b05b4ac3f8d8e957958071834a7b6 (diff)
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging
virtio,vhost: fixes, features, cleanups. FLR support. Misc fixes, cleanups. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Wed 04 Sep 2019 12:53:35 BST # gpg: using RSA key 281F0DB8D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: libvhost-user: introduce and use vu_has_protocol_feature() libvhost-user: fix SLAVE_SEND_FD handling virtio-pci: Add Function Level Reset support virtio-rng: change default backend to rng-builtin virtio-rng: Keep the default backend out of VirtIORNGConf rng-builtin: add an RNG backend that uses qemu_guest_getrandom() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'backends')
-rw-r--r--backends/Makefile.objs2
-rw-r--r--backends/rng-builtin.c77
2 files changed, 78 insertions, 1 deletions
diff --git a/backends/Makefile.objs b/backends/Makefile.objs
index 981e8e122f..f0691116e8 100644
--- a/backends/Makefile.objs
+++ b/backends/Makefile.objs
@@ -1,4 +1,4 @@
-common-obj-y += rng.o rng-egd.o
+common-obj-y += rng.o rng-egd.o rng-builtin.o
common-obj-$(CONFIG_POSIX) += rng-random.o
common-obj-$(CONFIG_TPM) += tpm.o
diff --git a/backends/rng-builtin.c b/backends/rng-builtin.c
new file mode 100644
index 0000000000..ba1b8d66b8
--- /dev/null
+++ b/backends/rng-builtin.c
@@ -0,0 +1,77 @@
+/*
+ * QEMU Builtin Random Number Generator Backend
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "sysemu/rng.h"
+#include "qemu/main-loop.h"
+#include "qemu/guest-random.h"
+
+#define RNG_BUILTIN(obj) OBJECT_CHECK(RngBuiltin, (obj), TYPE_RNG_BUILTIN)
+
+typedef struct RngBuiltin {
+ RngBackend parent;
+ QEMUBH *bh;
+} RngBuiltin;
+
+static void rng_builtin_receive_entropy_bh(void *opaque)
+{
+ RngBuiltin *s = opaque;
+
+ while (!QSIMPLEQ_EMPTY(&s->parent.requests)) {
+ RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests);
+
+ qemu_guest_getrandom_nofail(req->data, req->size);
+
+ req->receive_entropy(req->opaque, req->data, req->size);
+
+ rng_backend_finalize_request(&s->parent, req);
+ }
+}
+
+static void rng_builtin_request_entropy(RngBackend *b, RngRequest *req)
+{
+ RngBuiltin *s = RNG_BUILTIN(b);
+
+ qemu_bh_schedule(s->bh);
+}
+
+static void rng_builtin_init(Object *obj)
+{
+ RngBuiltin *s = RNG_BUILTIN(obj);
+
+ s->bh = qemu_bh_new(rng_builtin_receive_entropy_bh, s);
+}
+
+static void rng_builtin_finalize(Object *obj)
+{
+ RngBuiltin *s = RNG_BUILTIN(obj);
+
+ qemu_bh_delete(s->bh);
+}
+
+static void rng_builtin_class_init(ObjectClass *klass, void *data)
+{
+ RngBackendClass *rbc = RNG_BACKEND_CLASS(klass);
+
+ rbc->request_entropy = rng_builtin_request_entropy;
+}
+
+static const TypeInfo rng_builtin_info = {
+ .name = TYPE_RNG_BUILTIN,
+ .parent = TYPE_RNG_BACKEND,
+ .instance_size = sizeof(RngBuiltin),
+ .instance_init = rng_builtin_init,
+ .instance_finalize = rng_builtin_finalize,
+ .class_init = rng_builtin_class_init,
+};
+
+static void register_types(void)
+{
+ type_register_static(&rng_builtin_info);
+}
+
+type_init(register_types);