[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/16] qdev: GlobalProperty.errp field
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL 03/16] qdev: GlobalProperty.errp field |
Date: |
Thu, 7 Jul 2016 16:59:09 -0300 |
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: Paolo Bonzini <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
hw/core/qdev-properties.c | 11 ++++++++---
include/hw/qdev-core.h | 4 ++++
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index c10edee..3c20c8e 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -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: ",
- prop->driver, prop->property, prop->value);
+ 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: ");
+ }
}
}
}
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 24aa0a7..1d1f861 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -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. ***/
--
2.5.5
- [Qemu-devel] [PULL 00/16] x86 and machine queue, 2016-07-07, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 01/16] qdev: Don't stop applying globals on first error, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 02/16] qdev: Eliminate qemu_add_globals() function, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 04/16] machine: Add machine_register_compat_props() function, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 03/16] qdev: GlobalProperty.errp field,
Eduardo Habkost <=
- [Qemu-devel] [PULL 05/16] vl: Set errp to &error_abort on machine compat_props, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 06/16] target-sparc: Use sparc_cpu_parse_features() directly, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 07/16] target-i386: TCG can support CPUID.07H:EBX.erms, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 08/16] target-i386: Avoid using locals outside their scope, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 09/16] cpu: Use CPUClass->parse_features() as convertor to global properties, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 11/16] pc: Parse CPU features only once, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 10/16] arm: virt: Parse cpu_model only once, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 15/16] target-i386: Publish advised value of MSR_IA32_FEATURE_CONTROL via fw_cfg, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 12/16] target-i386: Show host and VM TSC frequencies on mismatch, Eduardo Habkost, 2016/07/07
- [Qemu-devel] [PULL 13/16] target-i386: Report hyperv feature words through qom, Eduardo Habkost, 2016/07/07