Switch object creation to .instance_config and remove the property setter that would only return an error after creation anyway.
Signed-off-by: Kevin Wolf <kw...@redhat.com> --- qapi/qom.json | 12 ++++++------ backends/rng-egd.c | 18 +++++++----------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/qapi/qom.json b/qapi/qom.json index 864c6a658b..fce24428f8 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -742,18 +742,18 @@ 'parent': 'rng-backend' } ## -# @RngEgdProperties: +# @rng-egd: # -# Properties for rng-egd objects. +# Random number generator backend connecting to an EGD-compatible daemon # # @chardev: the name of a character device backend that provides the connection # to the RNG daemon # # Since: 1.3 ## -{ 'struct': 'RngEgdProperties', - 'base': 'RngProperties', - 'data': { 'chardev': 'str' } } +{ 'class': 'rng-egd', + 'parent': 'rng-backend', + 'config': { 'chardev': 'str' } } ## # @rng-random: @@ -908,7 +908,7 @@ 'if': 'CONFIG_LINUX' }, 'qtest': 'QtestProperties', 'rng-builtin': 'qom-config:rng-builtin', - 'rng-egd': 'RngEgdProperties', + 'rng-egd': 'qom-config:rng-egd', 'rng-random': { 'type': 'qom-config:rng-random', 'if': 'CONFIG_POSIX' }, 'secret': 'SecretProperties', diff --git a/backends/rng-egd.c b/backends/rng-egd.c index 4de142b9dc..89255dc6fa 100644 --- a/backends/rng-egd.c +++ b/backends/rng-egd.c @@ -15,6 +15,7 @@ #include "chardev/char-fe.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" +#include "qapi/qapi-qom-qom.h" #include "qemu/module.h" #include "qom/object.h" @@ -110,17 +111,12 @@ static void rng_egd_opened(RngBackend *b, Error **errp) rng_egd_chr_read, NULL, NULL, s, NULL, true); } -static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp) +bool qom_rng_egd_config(Object *obj, const char *chardev, Error **errp) { - RngBackend *b = RNG_BACKEND(obj); - RngEgd *s = RNG_EGD(b); + RngEgd *s = RNG_EGD(obj); - if (b->opened) { - error_setg(errp, QERR_PERMISSION_DENIED); - } else { - g_free(s->chr_name); - s->chr_name = g_strdup(value); - } + s->chr_name = g_strdup(chardev); + return true; } static char *rng_egd_get_chardev(Object *obj, Error **errp) @@ -149,8 +145,7 @@ static void rng_egd_class_init(ObjectClass *klass, void *data) rbc->request_entropy = rng_egd_request_entropy; rbc->opened = rng_egd_opened; - object_class_property_add_str(klass, "chardev", - rng_egd_get_chardev, rng_egd_set_chardev); + object_class_property_add_str(klass, "chardev", rng_egd_get_chardev, NULL); } static const TypeInfo rng_egd_info = { @@ -158,6 +153,7 @@ static const TypeInfo rng_egd_info = { .parent = TYPE_RNG_BACKEND, .instance_size = sizeof(RngEgd), .class_init = rng_egd_class_init, + .instance_config = qom_rng_egd_marshal_config, .instance_finalize = rng_egd_finalize, }; -- 2.31.1