From f279ee45832db52fb801e86a929bc53f575cd2f5 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Thu, 13 Oct 2016 18:44:14 +0200 Subject: [PATCH 1/5] machine: Fix replacement of '_' by '-' in machine property names machine_set_property() replaces '_' by '-' in the property name. Except it fails to replace an initial '_'. Screwed up in commit b0ddb8b. Reproducer: "-M pc,__foo_bar=true" produces "Property '._-foo-bar' not found". Error messages using a mangled name rather than the name the user actually wrote is user-hostile, but that's a different topic. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Reviewed-by: Eduardo Habkost Signed-off-by: Eduardo Habkost --- vl.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/vl.c b/vl.c index c657acdd3c..1c0b0ba834 100644 --- a/vl.c +++ b/vl.c @@ -2804,17 +2804,16 @@ static int machine_set_property(void *opaque, { Object *obj = OBJECT(opaque); Error *local_err = NULL; - char *c, *qom_name; + char *p, *qom_name; if (strcmp(name, "type") == 0) { return 0; } qom_name = g_strdup(name); - c = qom_name; - while (*c++) { - if (*c == '_') { - *c = '-'; + for (p = qom_name; *p; p++) { + if (*p == '_') { + *p = '-'; } } From 26b81df45c7f827511d11925b6c666cf667a0aaa Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 13 Oct 2016 17:40:46 -0300 Subject: [PATCH 2/5] machine: Register TYPE_MACHINE properties as class properties When doing the conversion, the NULL errp arguments on the property registration calls were changed to &error_abort. Reviewed-by: Igor Mammedov Signed-off-by: Eduardo Habkost --- hw/core/machine.c | 206 ++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 108 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index afd84accbf..b0fd91f6cd 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -364,6 +364,104 @@ static void machine_class_init(ObjectClass *oc, void *data) /* Default 128 MB as guest ram size */ mc->default_ram_size = 128 * M_BYTE; mc->rom_file_has_mr = true; + + object_class_property_add_str(oc, "accel", + machine_get_accel, machine_set_accel, &error_abort); + object_class_property_set_description(oc, "accel", + "Accelerator list", &error_abort); + + object_class_property_add(oc, "kernel-irqchip", "OnOffSplit", + NULL, machine_set_kernel_irqchip, + NULL, NULL, &error_abort); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure KVM in-kernel irqchip", &error_abort); + + object_class_property_add(oc, "kvm-shadow-mem", "int", + machine_get_kvm_shadow_mem, machine_set_kvm_shadow_mem, + NULL, NULL, &error_abort); + object_class_property_set_description(oc, "kvm-shadow-mem", + "KVM shadow MMU size", &error_abort); + + object_class_property_add_str(oc, "kernel", + machine_get_kernel, machine_set_kernel, &error_abort); + object_class_property_set_description(oc, "kernel", + "Linux kernel image file", &error_abort); + + object_class_property_add_str(oc, "initrd", + machine_get_initrd, machine_set_initrd, &error_abort); + object_class_property_set_description(oc, "initrd", + "Linux initial ramdisk file", &error_abort); + + object_class_property_add_str(oc, "append", + machine_get_append, machine_set_append, &error_abort); + object_class_property_set_description(oc, "append", + "Linux kernel command line", &error_abort); + + object_class_property_add_str(oc, "dtb", + machine_get_dtb, machine_set_dtb, &error_abort); + object_class_property_set_description(oc, "dtb", + "Linux kernel device tree file", &error_abort); + + object_class_property_add_str(oc, "dumpdtb", + machine_get_dumpdtb, machine_set_dumpdtb, &error_abort); + object_class_property_set_description(oc, "dumpdtb", + "Dump current dtb to a file and quit", &error_abort); + + object_class_property_add(oc, "phandle-start", "int", + machine_get_phandle_start, machine_set_phandle_start, + NULL, NULL, &error_abort); + object_class_property_set_description(oc, "phandle-start", + "The first phandle ID we may generate dynamically", &error_abort); + + object_class_property_add_str(oc, "dt-compatible", + machine_get_dt_compatible, machine_set_dt_compatible, &error_abort); + object_class_property_set_description(oc, "dt-compatible", + "Overrides the \"compatible\" property of the dt root node", + &error_abort); + + object_class_property_add_bool(oc, "dump-guest-core", + machine_get_dump_guest_core, machine_set_dump_guest_core, &error_abort); + object_class_property_set_description(oc, "dump-guest-core", + "Include guest memory in a core dump", &error_abort); + + object_class_property_add_bool(oc, "mem-merge", + machine_get_mem_merge, machine_set_mem_merge, &error_abort); + object_class_property_set_description(oc, "mem-merge", + "Enable/disable memory merge support", &error_abort); + + object_class_property_add_bool(oc, "usb", + machine_get_usb, machine_set_usb, &error_abort); + object_class_property_set_description(oc, "usb", + "Set on/off to enable/disable usb", &error_abort); + + object_class_property_add_bool(oc, "graphics", + machine_get_graphics, machine_set_graphics, &error_abort); + object_class_property_set_description(oc, "graphics", + "Set on/off to enable/disable graphics emulation", &error_abort); + + object_class_property_add_bool(oc, "igd-passthru", + machine_get_igd_gfx_passthru, machine_set_igd_gfx_passthru, + &error_abort); + object_class_property_set_description(oc, "igd-passthru", + "Set on/off to enable/disable igd passthrou", &error_abort); + + object_class_property_add_str(oc, "firmware", + machine_get_firmware, machine_set_firmware, + &error_abort); + object_class_property_set_description(oc, "firmware", + "Firmware image", &error_abort); + + object_class_property_add_bool(oc, "suppress-vmdesc", + machine_get_suppress_vmdesc, machine_set_suppress_vmdesc, + &error_abort); + object_class_property_set_description(oc, "suppress-vmdesc", + "Set on to disable self-describing migration", &error_abort); + + object_class_property_add_bool(oc, "enforce-config-section", + machine_get_enforce_config_section, machine_set_enforce_config_section, + &error_abort); + object_class_property_set_description(oc, "enforce-config-section", + "Set on to enforce configuration section migration", &error_abort); } static void machine_class_base_init(ObjectClass *oc, void *data) @@ -387,114 +485,6 @@ static void machine_initfn(Object *obj) ms->mem_merge = true; ms->enable_graphics = true; - object_property_add_str(obj, "accel", - machine_get_accel, machine_set_accel, NULL); - object_property_set_description(obj, "accel", - "Accelerator list", - NULL); - object_property_add(obj, "kernel-irqchip", "OnOffSplit", - NULL, - machine_set_kernel_irqchip, - NULL, NULL, NULL); - object_property_set_description(obj, "kernel-irqchip", - "Configure KVM in-kernel irqchip", - NULL); - object_property_add(obj, "kvm-shadow-mem", "int", - machine_get_kvm_shadow_mem, - machine_set_kvm_shadow_mem, - NULL, NULL, NULL); - object_property_set_description(obj, "kvm-shadow-mem", - "KVM shadow MMU size", - NULL); - object_property_add_str(obj, "kernel", - machine_get_kernel, machine_set_kernel, NULL); - object_property_set_description(obj, "kernel", - "Linux kernel image file", - NULL); - object_property_add_str(obj, "initrd", - machine_get_initrd, machine_set_initrd, NULL); - object_property_set_description(obj, "initrd", - "Linux initial ramdisk file", - NULL); - object_property_add_str(obj, "append", - machine_get_append, machine_set_append, NULL); - object_property_set_description(obj, "append", - "Linux kernel command line", - NULL); - object_property_add_str(obj, "dtb", - machine_get_dtb, machine_set_dtb, NULL); - object_property_set_description(obj, "dtb", - "Linux kernel device tree file", - NULL); - object_property_add_str(obj, "dumpdtb", - machine_get_dumpdtb, machine_set_dumpdtb, NULL); - object_property_set_description(obj, "dumpdtb", - "Dump current dtb to a file and quit", - NULL); - object_property_add(obj, "phandle-start", "int", - machine_get_phandle_start, - machine_set_phandle_start, - NULL, NULL, NULL); - object_property_set_description(obj, "phandle-start", - "The first phandle ID we may generate dynamically", - NULL); - object_property_add_str(obj, "dt-compatible", - machine_get_dt_compatible, - machine_set_dt_compatible, - NULL); - object_property_set_description(obj, "dt-compatible", - "Overrides the \"compatible\" property of the dt root node", - NULL); - object_property_add_bool(obj, "dump-guest-core", - machine_get_dump_guest_core, - machine_set_dump_guest_core, - NULL); - object_property_set_description(obj, "dump-guest-core", - "Include guest memory in a core dump", - NULL); - object_property_add_bool(obj, "mem-merge", - machine_get_mem_merge, - machine_set_mem_merge, NULL); - object_property_set_description(obj, "mem-merge", - "Enable/disable memory merge support", - NULL); - object_property_add_bool(obj, "usb", - machine_get_usb, - machine_set_usb, NULL); - object_property_set_description(obj, "usb", - "Set on/off to enable/disable usb", - NULL); - object_property_add_bool(obj, "graphics", - machine_get_graphics, - machine_set_graphics, NULL); - object_property_set_description(obj, "graphics", - "Set on/off to enable/disable graphics emulation", - NULL); - object_property_add_bool(obj, "igd-passthru", - machine_get_igd_gfx_passthru, - machine_set_igd_gfx_passthru, NULL); - object_property_set_description(obj, "igd-passthru", - "Set on/off to enable/disable igd passthrou", - NULL); - object_property_add_str(obj, "firmware", - machine_get_firmware, - machine_set_firmware, NULL); - object_property_set_description(obj, "firmware", - "Firmware image", - NULL); - object_property_add_bool(obj, "suppress-vmdesc", - machine_get_suppress_vmdesc, - machine_set_suppress_vmdesc, NULL); - object_property_set_description(obj, "suppress-vmdesc", - "Set on to disable self-describing migration", - NULL); - object_property_add_bool(obj, "enforce-config-section", - machine_get_enforce_config_section, - machine_set_enforce_config_section, NULL); - object_property_set_description(obj, "enforce-config-section", - "Set on to enforce configuration section migration", - NULL); - /* Register notifier when init is done for sysbus sanity checks */ ms->sysbus_notifier.notify = machine_init_notify; qemu_add_machine_init_done_notifier(&ms->sysbus_notifier); From 0efc257db9986c3521d098d3d665d26b0b788fa1 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 13 Oct 2016 17:48:36 -0300 Subject: [PATCH 3/5] pc: Register TYPE_PC_MACHINE properties as class properties Reviewed-by: Igor Mammedov Signed-off-by: Eduardo Habkost --- hw/i386/pc.c | 56 ++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 93ff49c60b..f4b0cda707 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -2134,41 +2134,11 @@ static void pc_machine_initfn(Object *obj) { PCMachineState *pcms = PC_MACHINE(obj); - object_property_add(obj, PC_MACHINE_MEMHP_REGION_SIZE, "int", - pc_machine_get_hotplug_memory_region_size, - NULL, NULL, NULL, &error_abort); - pcms->max_ram_below_4g = 0; /* use default */ - object_property_add(obj, PC_MACHINE_MAX_RAM_BELOW_4G, "size", - pc_machine_get_max_ram_below_4g, - pc_machine_set_max_ram_below_4g, - NULL, NULL, &error_abort); - object_property_set_description(obj, PC_MACHINE_MAX_RAM_BELOW_4G, - "Maximum ram below the 4G boundary (32bit boundary)", - &error_abort); - pcms->smm = ON_OFF_AUTO_AUTO; - object_property_add(obj, PC_MACHINE_SMM, "OnOffAuto", - pc_machine_get_smm, - pc_machine_set_smm, - NULL, NULL, &error_abort); - object_property_set_description(obj, PC_MACHINE_SMM, - "Enable SMM (pc & q35)", - &error_abort); - pcms->vmport = ON_OFF_AUTO_AUTO; - object_property_add(obj, PC_MACHINE_VMPORT, "OnOffAuto", - pc_machine_get_vmport, - pc_machine_set_vmport, - NULL, NULL, &error_abort); - object_property_set_description(obj, PC_MACHINE_VMPORT, - "Enable vmport (pc & q35)", - &error_abort); - /* nvdimm is disabled on default. */ pcms->acpi_nvdimm_state.is_enabled = false; - object_property_add_bool(obj, PC_MACHINE_NVDIMM, pc_machine_get_nvdimm, - pc_machine_set_nvdimm, &error_abort); } static void pc_machine_reset(void) @@ -2303,6 +2273,32 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) hc->unplug_request = pc_machine_device_unplug_request_cb; hc->unplug = pc_machine_device_unplug_cb; nc->nmi_monitor_handler = x86_nmi; + + object_class_property_add(oc, PC_MACHINE_MEMHP_REGION_SIZE, "int", + pc_machine_get_hotplug_memory_region_size, NULL, + NULL, NULL, &error_abort); + + object_class_property_add(oc, PC_MACHINE_MAX_RAM_BELOW_4G, "size", + pc_machine_get_max_ram_below_4g, pc_machine_set_max_ram_below_4g, + NULL, NULL, &error_abort); + + object_class_property_set_description(oc, PC_MACHINE_MAX_RAM_BELOW_4G, + "Maximum ram below the 4G boundary (32bit boundary)", &error_abort); + + object_class_property_add(oc, PC_MACHINE_SMM, "OnOffAuto", + pc_machine_get_smm, pc_machine_set_smm, + NULL, NULL, &error_abort); + object_class_property_set_description(oc, PC_MACHINE_SMM, + "Enable SMM (pc & q35)", &error_abort); + + object_class_property_add(oc, PC_MACHINE_VMPORT, "OnOffAuto", + pc_machine_get_vmport, pc_machine_set_vmport, + NULL, NULL, &error_abort); + object_class_property_set_description(oc, PC_MACHINE_VMPORT, + "Enable vmport (pc & q35)", &error_abort); + + object_class_property_add_bool(oc, PC_MACHINE_NVDIMM, + pc_machine_get_nvdimm, pc_machine_set_nvdimm, &error_abort); } static const TypeInfo pc_machine_info = { From e62834ca62a86f057a8bd317137a4ae37d9c0ed2 Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 13 Oct 2016 17:52:51 -0300 Subject: [PATCH 4/5] hostmem: Register TYPE_MEMORY_BACKEND properties as class properties The NULL errp arguments on the property registration calls were changed to &error_abort. Reviewed-by: Igor Mammedov Signed-off-by: Eduardo Habkost --- backends/hostmem.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/backends/hostmem.c b/backends/hostmem.c index b7a208d0da..4256d24acb 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -241,26 +241,6 @@ static void host_memory_backend_init(Object *obj) backend->merge = machine_mem_merge(machine); backend->dump = machine_dump_guest_core(machine); backend->prealloc = mem_prealloc; - - object_property_add_bool(obj, "merge", - host_memory_backend_get_merge, - host_memory_backend_set_merge, NULL); - object_property_add_bool(obj, "dump", - host_memory_backend_get_dump, - host_memory_backend_set_dump, NULL); - object_property_add_bool(obj, "prealloc", - host_memory_backend_get_prealloc, - host_memory_backend_set_prealloc, NULL); - object_property_add(obj, "size", "int", - host_memory_backend_get_size, - host_memory_backend_set_size, NULL, NULL, NULL); - object_property_add(obj, "host-nodes", "int", - host_memory_backend_get_host_nodes, - host_memory_backend_set_host_nodes, NULL, NULL, NULL); - object_property_add_enum(obj, "policy", "HostMemPolicy", - HostMemPolicy_lookup, - host_memory_backend_get_policy, - host_memory_backend_set_policy, NULL); } MemoryRegion * @@ -375,6 +355,28 @@ host_memory_backend_class_init(ObjectClass *oc, void *data) ucc->complete = host_memory_backend_memory_complete; ucc->can_be_deleted = host_memory_backend_can_be_deleted; + + object_class_property_add_bool(oc, "merge", + host_memory_backend_get_merge, + host_memory_backend_set_merge, &error_abort); + object_class_property_add_bool(oc, "dump", + host_memory_backend_get_dump, + host_memory_backend_set_dump, &error_abort); + object_class_property_add_bool(oc, "prealloc", + host_memory_backend_get_prealloc, + host_memory_backend_set_prealloc, &error_abort); + object_class_property_add(oc, "size", "int", + host_memory_backend_get_size, + host_memory_backend_set_size, + NULL, NULL, &error_abort); + object_class_property_add(oc, "host-nodes", "int", + host_memory_backend_get_host_nodes, + host_memory_backend_set_host_nodes, + NULL, NULL, &error_abort); + object_class_property_add_enum(oc, "policy", "HostMemPolicy", + HostMemPolicy_lookup, + host_memory_backend_get_policy, + host_memory_backend_set_policy, &error_abort); } static const TypeInfo host_memory_backend_info = { From 026ac483c70850c82fad849de656204b16f8415e Mon Sep 17 00:00:00 2001 From: Eduardo Habkost Date: Thu, 13 Oct 2016 18:18:41 -0300 Subject: [PATCH 5/5] hostmem-file: Register TYPE_MEMORY_BACKEND_FILE properties as class properties To do the conversion, the file_backend_class_init() was moved after the getter/setter functions. The old file_backend_instance_init() function was removed because it is not needed anymore. The NULL errp arguments on the property registration calls were changed to &error_abort. Reviewed-by: Igor Mammedov Signed-off-by: Eduardo Habkost --- backends/hostmem-file.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index 5c4b808c1a..42efb2f28a 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -64,14 +64,6 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) #endif } -static void -file_backend_class_init(ObjectClass *oc, void *data) -{ - HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc); - - bc->alloc = file_backend_memory_alloc; -} - static char *get_mem_path(Object *o, Error **errp) { HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o); @@ -112,13 +104,18 @@ static void file_memory_backend_set_share(Object *o, bool value, Error **errp) } static void -file_backend_instance_init(Object *o) +file_backend_class_init(ObjectClass *oc, void *data) { - object_property_add_bool(o, "share", - file_memory_backend_get_share, - file_memory_backend_set_share, NULL); - object_property_add_str(o, "mem-path", get_mem_path, - set_mem_path, NULL); + HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc); + + bc->alloc = file_backend_memory_alloc; + + object_class_property_add_bool(oc, "share", + file_memory_backend_get_share, file_memory_backend_set_share, + &error_abort); + object_class_property_add_str(oc, "mem-path", + get_mem_path, set_mem_path, + &error_abort); } static void file_backend_instance_finalize(Object *o) @@ -132,7 +129,6 @@ static const TypeInfo file_backend_info = { .name = TYPE_MEMORY_BACKEND_FILE, .parent = TYPE_MEMORY_BACKEND, .class_init = file_backend_class_init, - .instance_init = file_backend_instance_init, .instance_finalize = file_backend_instance_finalize, .instance_size = sizeof(HostMemoryBackendFile), };