summary refs log tree commit diff stats
path: root/backends/rng.c
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2014-01-16 17:34:38 +0100
committerLuiz Capitulino <lcapitulino@redhat.com>2014-01-28 12:47:02 -0500
commit269e09f3fc922b800d118d9c8a721be46b5462a3 (patch)
tree45a18489d3fa4c2bb54e96f7f26ca9f7f6a0af81 /backends/rng.c
parent90e9cf28e57a3e1d6caa0a28b0a332ff982ccb0b (diff)
downloadfocaccia-qemu-269e09f3fc922b800d118d9c8a721be46b5462a3.tar.gz
focaccia-qemu-269e09f3fc922b800d118d9c8a721be46b5462a3.zip
add optional 2nd stage initialization to -object/object-add commands
Introduces USER_CREATABLE interface that must be implemented by
objects which are designed to created with -object CLI option or
object-add QMP command.

Interface provides an ability to do an optional second stage
initialization of the object created with -object/object-add
commands. By providing complete() callback, which is called
after the object properties were set.

It allows to:
 * prevents misusing of -object/object-add by filtering out
   objects that are not designed for it.
 * generalize second stage backend initialization instead of
   adding custom APIs to perform it
 * early error detection of backend initialization at -object/
   object-add time rather than through a proxy DEVICE object
   that tries to use backend.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Diffstat (limited to 'backends/rng.c')
-rw-r--r--backends/rng.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/backends/rng.c b/backends/rng.c
index 85cb83f5e1..7bab806ee1 100644
--- a/backends/rng.c
+++ b/backends/rng.c
@@ -12,6 +12,7 @@
 
 #include "sysemu/rng.h"
 #include "qapi/qmp/qerror.h"
+#include "qom/object_interfaces.h"
 
 void rng_backend_request_entropy(RngBackend *s, size_t size,
                                  EntropyReceiveFunc *receive_entropy,
@@ -83,6 +84,10 @@ static const TypeInfo rng_backend_info = {
     .instance_init = rng_backend_init,
     .class_size = sizeof(RngBackendClass),
     .abstract = true,
+    .interfaces = (InterfaceInfo[]) {
+        { TYPE_USER_CREATABLE },
+        { }
+    }
 };
 
 static void register_types(void)