From b1fe9bcbceb6fb9d800f735da37aa79ac4552c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Wed, 1 May 2013 16:10:24 +0200 Subject: qdev: Let qdev_prop_parse() pass through Error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move error reporting to callers. Reviewed-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/core/qdev-properties.c | 25 +++++++++++-------------- hw/core/qdev.c | 7 ++++++- 2 files changed, 17 insertions(+), 15 deletions(-) (limited to 'hw') diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index ca1739e..716ba19 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -986,25 +986,18 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, } } -int qdev_prop_parse(DeviceState *dev, const char *name, const char *value) +void qdev_prop_parse(DeviceState *dev, const char *name, const char *value, + Error **errp) { char *legacy_name; - Error *err = NULL; legacy_name = g_strdup_printf("legacy-%s", name); if (object_property_get_type(OBJECT(dev), legacy_name, NULL)) { - object_property_parse(OBJECT(dev), value, legacy_name, &err); + object_property_parse(OBJECT(dev), value, legacy_name, errp); } else { - object_property_parse(OBJECT(dev), value, name, &err); + object_property_parse(OBJECT(dev), value, name, errp); } g_free(legacy_name); - - if (err) { - qerror_report_err(err); - error_free(err); - return -1; - } - return 0; } void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value) @@ -1106,18 +1099,22 @@ void qdev_prop_register_global_list(GlobalProperty *props) } } -void qdev_prop_set_globals(DeviceState *dev) +void qdev_prop_set_globals(DeviceState *dev, Error **errp) { ObjectClass *class = object_get_class(OBJECT(dev)); do { GlobalProperty *prop; QTAILQ_FOREACH(prop, &global_props, next) { + Error *err = NULL; + if (strcmp(object_class_get_name(class), prop->driver) != 0) { continue; } - if (qdev_prop_parse(dev, prop->property, prop->value) != 0) { - exit(1); + qdev_prop_parse(dev, prop->property, prop->value, &err); + if (err != NULL) { + error_propagate(errp, err); + return; } } class = object_class_get_parent(class); diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 069ac90..6985ad8 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -752,7 +752,12 @@ static void device_initfn(Object *obj) } class = object_class_get_parent(class); } while (class != object_class_by_name(TYPE_DEVICE)); - qdev_prop_set_globals(dev); + qdev_prop_set_globals(dev, &err); + if (err != NULL) { + qerror_report_err(err); + error_free(err); + exit(1); + } object_property_add_link(OBJECT(dev), "parent_bus", TYPE_BUS, (Object **)&dev->parent_bus, &err); -- cgit v1.1 From 868d378bb087c6003bfa0e431aec0e5871a90ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Wed, 1 May 2013 16:03:19 +0200 Subject: qdev: Introduce qdev_prop_set_globals_for_type() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reuse it in qdev_prop_set_globals(). Reviewed-by: Eduardo Habkost [AF: Renamed from qdev_prop_set_custom_globals()] Signed-off-by: Andreas Färber --- hw/core/qdev-properties.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'hw') diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 716ba19..3a324fb 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -1099,23 +1099,37 @@ void qdev_prop_register_global_list(GlobalProperty *props) } } +void qdev_prop_set_globals_for_type(DeviceState *dev, const char *typename, + Error **errp) +{ + GlobalProperty *prop; + + QTAILQ_FOREACH(prop, &global_props, next) { + Error *err = NULL; + + if (strcmp(typename, prop->driver) != 0) { + continue; + } + qdev_prop_parse(dev, prop->property, prop->value, &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } + } +} + void qdev_prop_set_globals(DeviceState *dev, Error **errp) { ObjectClass *class = object_get_class(OBJECT(dev)); do { - GlobalProperty *prop; - QTAILQ_FOREACH(prop, &global_props, next) { - Error *err = NULL; + Error *err = NULL; - if (strcmp(object_class_get_name(class), prop->driver) != 0) { - continue; - } - qdev_prop_parse(dev, prop->property, prop->value, &err); - if (err != NULL) { - error_propagate(errp, err); - return; - } + qdev_prop_set_globals_for_type(dev, object_class_get_name(class), + &err); + if (err != NULL) { + error_propagate(errp, err); + return; } class = object_class_get_parent(class); } while (class); -- cgit v1.1 From 4458c23672904fa131e69897007eeb7c953be7e5 Mon Sep 17 00:00:00 2001 From: Borislav Petkov Date: Thu, 25 Apr 2013 15:43:04 -0300 Subject: target-i386: n270 can MOVBE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Atom core (cpu name "n270" in QEMU speak) supports MOVBE. This is needed when booting 3.8 and later linux kernels built with the MATOM target because we require MOVBE in order to boot properly now. Signed-off-by: Borislav Petkov [ehabkost: added compat code to disable MOVBE on pc-*-1.4 and older] Signed-off-by: Eduardo Habkost Signed-off-by: Andreas Färber --- hw/i386/pc_piix.c | 1 + hw/i386/pc_q35.c | 1 + 2 files changed, 2 insertions(+) (limited to 'hw') diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index fe52e5f..f7c80ad 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -250,6 +250,7 @@ static void pc_init_pci_1_4(QEMUMachineInitArgs *args) { pc_sysfw_flash_vs_rom_bug_compatible = true; has_pvpanic = false; + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); pc_init_pci(args); } diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 52511e2..4160e2b 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -212,6 +212,7 @@ static void pc_q35_init_1_4(QEMUMachineInitArgs *args) { pc_sysfw_flash_vs_rom_bug_compatible = true; has_pvpanic = false; + x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); pc_q35_init(args); } -- cgit v1.1