diff options
Diffstat (limited to 'hw/core')
-rw-r--r-- | hw/core/bus.c | 26 | ||||
-rw-r--r-- | hw/core/cpu.c | 2 | ||||
-rw-r--r-- | hw/core/generic-loader.c | 2 | ||||
-rw-r--r-- | hw/core/machine-qmp-cmds.c | 16 | ||||
-rw-r--r-- | hw/core/machine.c | 87 | ||||
-rw-r--r-- | hw/core/qdev-clock.c | 4 | ||||
-rw-r--r-- | hw/core/qdev-properties.c | 11 | ||||
-rw-r--r-- | hw/core/qdev.c | 74 |
8 files changed, 93 insertions, 129 deletions
diff --git a/hw/core/bus.c b/hw/core/bus.c index 3dc0a82..5092479 100644 --- a/hw/core/bus.c +++ b/hw/core/bus.c @@ -25,7 +25,7 @@ void qbus_set_hotplug_handler(BusState *bus, Object *handler, Error **errp) { - object_property_set_link(OBJECT(bus), OBJECT(handler), + object_property_set_link(OBJECT(bus), handler, QDEV_HOTPLUG_HANDLER_PROPERTY, errp); } @@ -122,7 +122,7 @@ static void qbus_realize(BusState *bus, DeviceState *parent, const char *name) if (bus->parent) { QLIST_INSERT_HEAD(&bus->parent->child_bus, bus, sibling); bus->parent->num_child_bus++; - object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL); + object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus)); object_unref(OBJECT(bus)); } else { /* The only bus without a parent is the main system bus */ @@ -176,11 +176,10 @@ static void bus_set_realized(Object *obj, bool value, Error **errp) BusState *bus = BUS(obj); BusClass *bc = BUS_GET_CLASS(bus); BusChild *kid; - Error *local_err = NULL; if (value && !bus->realized) { if (bc->realize) { - bc->realize(bus, &local_err); + bc->realize(bus, errp); } /* TODO: recursive realization */ @@ -188,21 +187,13 @@ static void bus_set_realized(Object *obj, bool value, Error **errp) QTAILQ_FOREACH(kid, &bus->children, sibling) { DeviceState *dev = kid->child; object_property_set_bool(OBJECT(dev), false, "realized", - &local_err); - if (local_err != NULL) { - break; - } + &error_abort); } - if (bc->unrealize && local_err == NULL) { - bc->unrealize(bus, &local_err); + if (bc->unrealize) { + bc->unrealize(bus); } } - if (local_err != NULL) { - error_propagate(errp, local_err); - return; - } - bus->realized = value; } @@ -215,10 +206,9 @@ static void qbus_initfn(Object *obj) TYPE_HOTPLUG_HANDLER, (Object **)&bus->hotplug_handler, object_property_allow_set_link, - 0, - NULL); + 0); object_property_add_bool(obj, "realized", - bus_get_realized, bus_set_realized, NULL); + bus_get_realized, bus_set_realized); } static char *default_bus_get_fw_dev_path(DeviceState *dev) diff --git a/hw/core/cpu.c b/hw/core/cpu.c index 786a1be..5284d38 100644 --- a/hw/core/cpu.c +++ b/hw/core/cpu.c @@ -345,7 +345,7 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp) trace_init_vcpu(cpu); } -static void cpu_common_unrealizefn(DeviceState *dev, Error **errp) +static void cpu_common_unrealizefn(DeviceState *dev) { CPUState *cpu = CPU(dev); /* NOTE: latest generic point before the cpu is fully unrealized */ diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c index b9aaa52..a242c07 100644 --- a/hw/core/generic-loader.c +++ b/hw/core/generic-loader.c @@ -173,7 +173,7 @@ static void generic_loader_realize(DeviceState *dev, Error **errp) } } -static void generic_loader_unrealize(DeviceState *dev, Error **errp) +static void generic_loader_unrealize(DeviceState *dev) { qemu_unregister_reset(generic_loader_reset, dev); } diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index eed5aeb..2c5da84 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -11,9 +11,13 @@ #include "cpu.h" #include "hw/boards.h" #include "qapi/error.h" +#include "qapi/qapi-builtin-visit.h" #include "qapi/qapi-commands-machine.h" #include "qapi/qmp/qerror.h" +#include "qapi/qmp/qobject.h" +#include "qapi/qobject-input-visitor.h" #include "qemu/main-loop.h" +#include "qom/qom-qobject.h" #include "sysemu/hostmem.h" #include "sysemu/hw_accel.h" #include "sysemu/numa.h" @@ -303,6 +307,8 @@ static int query_memdev(Object *obj, void *opaque) { MemdevList **list = opaque; MemdevList *m = NULL; + QObject *host_nodes; + Visitor *v; if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) { m = g_malloc0(sizeof(*m)); @@ -325,9 +331,13 @@ static int query_memdev(Object *obj, void *opaque) "policy", "HostMemPolicy", &error_abort); - object_property_get_uint16List(obj, "host-nodes", - &m->value->host_nodes, - &error_abort); + host_nodes = object_property_get_qobject(obj, + "host-nodes", + &error_abort); + v = qobject_input_visitor_new(host_nodes); + visit_type_uint16List(v, NULL, &m->value->host_nodes, &error_abort); + visit_free(v); + qobject_unref(host_nodes); m->next = *list; *list = m; diff --git a/hw/core/machine.c b/hw/core/machine.c index 7a50dd5..bb3a7b1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -787,85 +787,80 @@ static void machine_class_init(ObjectClass *oc, void *data) mc->numa_auto_assign_ram = numa_default_auto_assign_ram; object_class_property_add_str(oc, "kernel", - machine_get_kernel, machine_set_kernel, &error_abort); + machine_get_kernel, machine_set_kernel); object_class_property_set_description(oc, "kernel", - "Linux kernel image file", &error_abort); + "Linux kernel image file"); object_class_property_add_str(oc, "initrd", - machine_get_initrd, machine_set_initrd, &error_abort); + machine_get_initrd, machine_set_initrd); object_class_property_set_description(oc, "initrd", - "Linux initial ramdisk file", &error_abort); + "Linux initial ramdisk file"); object_class_property_add_str(oc, "append", - machine_get_append, machine_set_append, &error_abort); + machine_get_append, machine_set_append); object_class_property_set_description(oc, "append", - "Linux kernel command line", &error_abort); + "Linux kernel command line"); object_class_property_add_str(oc, "dtb", - machine_get_dtb, machine_set_dtb, &error_abort); + machine_get_dtb, machine_set_dtb); object_class_property_set_description(oc, "dtb", - "Linux kernel device tree file", &error_abort); + "Linux kernel device tree file"); object_class_property_add_str(oc, "dumpdtb", - machine_get_dumpdtb, machine_set_dumpdtb, &error_abort); + machine_get_dumpdtb, machine_set_dumpdtb); object_class_property_set_description(oc, "dumpdtb", - "Dump current dtb to a file and quit", &error_abort); + "Dump current dtb to a file and quit"); object_class_property_add(oc, "phandle-start", "int", machine_get_phandle_start, machine_set_phandle_start, - NULL, NULL, &error_abort); + NULL, NULL); object_class_property_set_description(oc, "phandle-start", - "The first phandle ID we may generate dynamically", &error_abort); + "The first phandle ID we may generate dynamically"); object_class_property_add_str(oc, "dt-compatible", - machine_get_dt_compatible, machine_set_dt_compatible, &error_abort); + machine_get_dt_compatible, machine_set_dt_compatible); object_class_property_set_description(oc, "dt-compatible", - "Overrides the \"compatible\" property of the dt root node", - &error_abort); + "Overrides the \"compatible\" property of the dt root node"); object_class_property_add_bool(oc, "dump-guest-core", - machine_get_dump_guest_core, machine_set_dump_guest_core, &error_abort); + machine_get_dump_guest_core, machine_set_dump_guest_core); object_class_property_set_description(oc, "dump-guest-core", - "Include guest memory in a core dump", &error_abort); + "Include guest memory in a core dump"); object_class_property_add_bool(oc, "mem-merge", - machine_get_mem_merge, machine_set_mem_merge, &error_abort); + machine_get_mem_merge, machine_set_mem_merge); object_class_property_set_description(oc, "mem-merge", - "Enable/disable memory merge support", &error_abort); + "Enable/disable memory merge support"); object_class_property_add_bool(oc, "usb", - machine_get_usb, machine_set_usb, &error_abort); + machine_get_usb, machine_set_usb); object_class_property_set_description(oc, "usb", - "Set on/off to enable/disable usb", &error_abort); + "Set on/off to enable/disable usb"); object_class_property_add_bool(oc, "graphics", - machine_get_graphics, machine_set_graphics, &error_abort); + machine_get_graphics, machine_set_graphics); object_class_property_set_description(oc, "graphics", - "Set on/off to enable/disable graphics emulation", &error_abort); + "Set on/off to enable/disable graphics emulation"); object_class_property_add_str(oc, "firmware", - machine_get_firmware, machine_set_firmware, - &error_abort); + machine_get_firmware, machine_set_firmware); object_class_property_set_description(oc, "firmware", - "Firmware image", &error_abort); + "Firmware image"); object_class_property_add_bool(oc, "suppress-vmdesc", - machine_get_suppress_vmdesc, machine_set_suppress_vmdesc, - &error_abort); + machine_get_suppress_vmdesc, machine_set_suppress_vmdesc); object_class_property_set_description(oc, "suppress-vmdesc", - "Set on to disable self-describing migration", &error_abort); + "Set on to disable self-describing migration"); object_class_property_add_bool(oc, "enforce-config-section", - machine_get_enforce_config_section, machine_set_enforce_config_section, - &error_abort); + machine_get_enforce_config_section, machine_set_enforce_config_section); object_class_property_set_description(oc, "enforce-config-section", - "Set on to enforce configuration section migration", &error_abort); + "Set on to enforce configuration section migration"); object_class_property_add_str(oc, "memory-encryption", - machine_get_memory_encryption, machine_set_memory_encryption, - &error_abort); + machine_get_memory_encryption, machine_set_memory_encryption); object_class_property_set_description(oc, "memory-encryption", - "Set memory encryption object to use", &error_abort); + "Set memory encryption object to use"); } static void machine_class_base_init(ObjectClass *oc, void *data) @@ -894,40 +889,34 @@ static void machine_initfn(Object *obj) ms->nvdimms_state = g_new0(NVDIMMState, 1); object_property_add_bool(obj, "nvdimm", - machine_get_nvdimm, machine_set_nvdimm, - &error_abort); + machine_get_nvdimm, machine_set_nvdimm); object_property_set_description(obj, "nvdimm", "Set on/off to enable/disable " - "NVDIMM instantiation", NULL); + "NVDIMM instantiation"); object_property_add_str(obj, "nvdimm-persistence", machine_get_nvdimm_persistence, - machine_set_nvdimm_persistence, - &error_abort); + machine_set_nvdimm_persistence); object_property_set_description(obj, "nvdimm-persistence", "Set NVDIMM persistence" - "Valid values are cpu, mem-ctrl", - NULL); + "Valid values are cpu, mem-ctrl"); } if (mc->cpu_index_to_instance_props && mc->get_default_cpu_node_id) { ms->numa_state = g_new0(NumaState, 1); object_property_add_bool(obj, "hmat", - machine_get_hmat, machine_set_hmat, - &error_abort); + machine_get_hmat, machine_set_hmat); object_property_set_description(obj, "hmat", "Set on/off to enable/disable " "ACPI Heterogeneous Memory Attribute " - "Table (HMAT)", NULL); + "Table (HMAT)"); } object_property_add_str(obj, "memory-backend", - machine_get_memdev, machine_set_memdev, - &error_abort); + machine_get_memdev, machine_set_memdev); object_property_set_description(obj, "memory-backend", "Set RAM backend" - "Valid value is ID of hostmem based backend", - &error_abort); + "Valid value is ID of hostmem based backend"); /* Register notifier when init is done for sysbus sanity checks */ ms->sysbus_notifier.notify = machine_init_notify; diff --git a/hw/core/qdev-clock.c b/hw/core/qdev-clock.c index a94cc44..5cc1e82 100644 --- a/hw/core/qdev-clock.c +++ b/hw/core/qdev-clock.c @@ -46,7 +46,7 @@ static NamedClockList *qdev_init_clocklist(DeviceState *dev, const char *name, */ if (clk == NULL) { clk = CLOCK(object_new(TYPE_CLOCK)); - object_property_add_child(OBJECT(dev), name, OBJECT(clk), &error_abort); + object_property_add_child(OBJECT(dev), name, OBJECT(clk)); if (output) { /* * Remove object_new()'s initial reference. @@ -59,7 +59,7 @@ static NamedClockList *qdev_init_clocklist(DeviceState *dev, const char *name, object_property_add_link(OBJECT(dev), name, object_get_typename(OBJECT(clk)), (Object **) &ncl->clock, - NULL, OBJ_PROP_LINK_STRONG, &error_abort); + NULL, OBJ_PROP_LINK_STRONG); } ncl->clock = clk; diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 2047114..cc92481 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -1043,11 +1043,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name, arrayprop->prop.info->get, arrayprop->prop.info->set, array_element_release, - arrayprop, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } + arrayprop); } } @@ -1254,13 +1250,12 @@ const PropertyInfo qdev_prop_size = { /* --- object link property --- */ -static void create_link_property(ObjectClass *oc, Property *prop, Error **errp) +static void create_link_property(ObjectClass *oc, Property *prop) { object_class_property_add_link(oc, prop->name, prop->link_type, prop->offset, qdev_prop_allow_set_link_before_realize, - OBJ_PROP_LINK_STRONG, - errp); + OBJ_PROP_LINK_STRONG); } const PropertyInfo qdev_prop_link = { diff --git a/hw/core/qdev.c b/hw/core/qdev.c index dd77a56..9e5538a 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -65,7 +65,7 @@ static void bus_remove_child(BusState *bus, DeviceState *child) bus->num_children--; /* This gives back ownership of kid->child back to us. */ - object_property_del(OBJECT(bus), name, NULL); + object_property_del(OBJECT(bus), name); object_unref(OBJECT(kid->child)); g_free(kid); return; @@ -91,8 +91,7 @@ static void bus_add_child(BusState *bus, DeviceState *child) object_get_typename(OBJECT(child)), (Object **)&kid->child, NULL, /* read-only property */ - 0, /* return ownership on prop deletion */ - NULL); + 0); } void qdev_set_parent_bus(DeviceState *dev, BusState *bus) @@ -393,7 +392,7 @@ static void device_reset_child_foreach(Object *obj, ResettableChildCallback cb, void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { - object_property_set_bool(OBJECT(dev), false, "realized", NULL); + object_property_set_bool(OBJECT(dev), false, "realized", &error_abort); } /* @@ -481,7 +480,7 @@ void qdev_init_gpio_in_named_with_opaque(DeviceState *dev, gchar *propname = g_strdup_printf("%s[%u]", name, i); object_property_add_child(OBJECT(dev), propname, - OBJECT(gpio_list->in[i]), &error_abort); + OBJECT(gpio_list->in[i])); g_free(propname); } @@ -512,8 +511,7 @@ void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins, object_property_add_link(OBJECT(dev), propname, TYPE_IRQ, (Object **)&pins[i], object_property_allow_set_link, - OBJ_PROP_LINK_STRONG, - &error_abort); + OBJ_PROP_LINK_STRONG); g_free(propname); } gpio_list->num_out += n; @@ -542,15 +540,11 @@ void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n, { char *propname = g_strdup_printf("%s[%d]", name ? name : "unnamed-gpio-out", n); - if (pin) { - /* We need a name for object_property_set_link to work. If the - * object has a parent, object_property_add_child will come back - * with an error without doing anything. If it has none, it will - * never fail. So we can just call it with a NULL Error pointer. - */ + if (pin && !OBJECT(pin)->parent) { + /* We need a name for object_property_set_link to work */ object_property_add_child(container_get(qdev_get_machine(), "/unattached"), - "non-qdev-gpio[*]", OBJECT(pin), NULL); + "non-qdev-gpio[*]", OBJECT(pin)); } object_property_set_link(OBJECT(dev), OBJECT(pin), propname, &error_abort); g_free(propname); @@ -608,8 +602,7 @@ void qdev_pass_gpios(DeviceState *dev, DeviceState *container, char *propname = g_strdup_printf("%s[%d]", nm, i); object_property_add_alias(OBJECT(container), propname, - OBJECT(dev), propname, - &error_abort); + OBJECT(dev), propname); g_free(propname); } for (i = 0; i < ngl->num_out; i++) { @@ -617,8 +610,7 @@ void qdev_pass_gpios(DeviceState *dev, DeviceState *container, char *propname = g_strdup_printf("%s[%d]", nm, i); object_property_add_alias(OBJECT(container), propname, - OBJECT(dev), propname, - &error_abort); + OBJECT(dev), propname); g_free(propname); } QLIST_REMOVE(ngl, node); @@ -759,7 +751,7 @@ static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop) name = g_strdup_printf("legacy-%s", prop->name); object_class_property_add(OBJECT_CLASS(dc), name, "str", prop->info->print ? qdev_get_legacy_property : prop->info->get, - NULL, NULL, prop, &error_abort); + NULL, NULL, prop); } void qdev_property_add_static(DeviceState *dev, Property *prop) @@ -772,11 +764,10 @@ void qdev_property_add_static(DeviceState *dev, Property *prop) op = object_property_add(obj, prop->name, prop->info->name, prop->info->get, prop->info->set, prop->info->release, - prop, &error_abort); + prop); object_property_set_description(obj, prop->name, - prop->info->description, - &error_abort); + prop->info->description); if (prop->set_default) { prop->info->set_default_value(op, prop); @@ -791,7 +782,7 @@ static void qdev_class_add_property(DeviceClass *klass, Property *prop) ObjectClass *oc = OBJECT_CLASS(klass); if (prop->info->create) { - prop->info->create(oc, prop, &error_abort); + prop->info->create(oc, prop); } else { ObjectProperty *op; @@ -799,14 +790,13 @@ static void qdev_class_add_property(DeviceClass *klass, Property *prop) prop->name, prop->info->name, prop->info->get, prop->info->set, prop->info->release, - prop, &error_abort); + prop); if (prop->set_default) { prop->info->set_default_value(op, prop); } } object_class_property_set_description(oc, prop->name, - prop->info->description, - &error_abort); + prop->info->description); } /* @qdev_alias_all_properties - Add alias properties to the source object for @@ -823,8 +813,7 @@ void qdev_alias_all_properties(DeviceState *target, Object *source) for (prop = dc->props_; prop && prop->name; prop++) { object_property_add_alias(source, prop->name, - OBJECT(target), prop->name, - &error_abort); + OBJECT(target), prop->name); } class = object_class_get_parent(class); } while (class != object_class_by_name(TYPE_DEVICE)); @@ -876,7 +865,7 @@ static void device_set_realized(Object *obj, bool value, Error **errp) object_property_add_child(container_get(qdev_get_machine(), "/unattached"), - name, obj, &error_abort); + name, obj); unattached_parent = true; g_free(name); } @@ -956,23 +945,18 @@ static void device_set_realized(Object *obj, bool value, Error **errp) } } else if (!value && dev->realized) { - /* We want local_err to track only the first error */ QLIST_FOREACH(bus, &dev->child_bus, sibling) { object_property_set_bool(OBJECT(bus), false, "realized", - local_err ? NULL : &local_err); + &error_abort); } if (qdev_get_vmsd(dev)) { vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); } if (dc->unrealize) { - dc->unrealize(dev, local_err ? NULL : &local_err); + dc->unrealize(dev); } dev->pending_deleted_event = true; DEVICE_LISTENER_CALL(unrealize, Reverse, dev); - - if (local_err != NULL) { - goto fail; - } } assert(local_err == NULL); @@ -982,7 +966,7 @@ static void device_set_realized(Object *obj, bool value, Error **errp) child_realize_fail: QLIST_FOREACH(bus, &dev->child_bus, sibling) { object_property_set_bool(OBJECT(bus), false, "realized", - NULL); + &error_abort); } if (qdev_get_vmsd(dev)) { @@ -993,7 +977,7 @@ post_realize_fail: g_free(dev->canonical_path); dev->canonical_path = NULL; if (dc->unrealize) { - dc->unrealize(dev, NULL); + dc->unrealize(dev); } fail: @@ -1094,7 +1078,7 @@ static void device_unparent(Object *obj) BusState *bus; if (dev->realized) { - object_property_set_bool(obj, false, "realized", NULL); + object_property_set_bool(obj, false, "realized", &error_abort); } while (dev->num_child_bus) { bus = QLIST_FIRST(&dev->child_bus); @@ -1203,17 +1187,13 @@ static void device_class_init(ObjectClass *class, void *data) rc->get_transitional_function = device_get_transitional_reset; object_class_property_add_bool(class, "realized", - device_get_realized, device_set_realized, - &error_abort); + device_get_realized, device_set_realized); object_class_property_add_bool(class, "hotpluggable", - device_get_hotpluggable, NULL, - &error_abort); + device_get_hotpluggable, NULL); object_class_property_add_bool(class, "hotplugged", - device_get_hotplugged, NULL, - &error_abort); + device_get_hotplugged, NULL); object_class_property_add_link(class, "parent_bus", TYPE_BUS, - offsetof(DeviceState, parent_bus), NULL, 0, - &error_abort); + offsetof(DeviceState, parent_bus), NULL, 0); } void device_class_set_props(DeviceClass *dc, Property *props) |