mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
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>
This commit is contained in:
parent
90e9cf28e5
commit
269e09f3fc
6 changed files with 125 additions and 0 deletions
32
qom/object_interfaces.c
Normal file
32
qom/object_interfaces.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
#include "qom/object_interfaces.h"
|
||||
#include "qemu/module.h"
|
||||
|
||||
void user_creatable_complete(Object *obj, Error **errp)
|
||||
{
|
||||
|
||||
UserCreatableClass *ucc;
|
||||
UserCreatable *uc =
|
||||
(UserCreatable *)object_dynamic_cast(obj, TYPE_USER_CREATABLE);
|
||||
|
||||
if (!uc) {
|
||||
return;
|
||||
}
|
||||
|
||||
ucc = USER_CREATABLE_GET_CLASS(uc);
|
||||
if (ucc->complete) {
|
||||
ucc->complete(uc, errp);
|
||||
}
|
||||
}
|
||||
|
||||
static void register_types(void)
|
||||
{
|
||||
static const TypeInfo uc_interface_info = {
|
||||
.name = TYPE_USER_CREATABLE,
|
||||
.parent = TYPE_INTERFACE,
|
||||
.class_size = sizeof(UserCreatableClass),
|
||||
};
|
||||
|
||||
type_register_static(&uc_interface_info);
|
||||
}
|
||||
|
||||
type_init(register_types)
|
Loading…
Add table
Add a link
Reference in a new issue