Commit 77280adb authored by Eduardo Habkost's avatar Eduardo Habkost
Browse files

qdev: GlobalProperty.errp field



The new field will allow error handling to be configured by
qdev_prop_register_global() callers: &error_fatal and
&error_abort can be used to make QEMU exit or abort if any errors
are reported when applying the properties.

While doing it, change the error message from "global %s.%s=%s
ignored" to "can't apply global %s.%s=%s".

Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent 8d76bfe8
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1085,9 +1085,14 @@ static void qdev_prop_set_globals_for_type(DeviceState *dev,
        prop->used = true;
        object_property_parse(OBJECT(dev), prop->value, prop->property, &err);
        if (err != NULL) {
            assert(prop->user_provided);
            error_reportf_err(err, "Warning: global %s.%s=%s ignored: ",
            error_prepend(&err, "can't apply global %s.%s=%s: ",
                          prop->driver, prop->property, prop->value);
            if (prop->errp) {
                error_propagate(prop->errp, err);
            } else {
                assert(prop->user_provided);
                error_reportf_err(err, "Warning: ");
            }
        }
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -259,6 +259,9 @@ struct PropertyInfo {
 * @user_provided: Set to true if property comes from user-provided config
 * (command-line or config file).
 * @used: Set to true if property was used when initializing a device.
 * @errp: Error destination, used like first argument of error_setg()
 *        in case property setting fails later. If @errp is NULL, we
 *        print warnings instead of ignoring errors silently.
 */
typedef struct GlobalProperty {
    const char *driver;
@@ -266,6 +269,7 @@ typedef struct GlobalProperty {
    const char *value;
    bool user_provided;
    bool used;
    Error **errp;
} GlobalProperty;

/*** Board API.  This should go away once we have a machine config file.  ***/