From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47607) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WK67m-0003Z9-H8 for qemu-devel@nongnu.org; Sun, 02 Mar 2014 08:08:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WK67f-00010e-Ed for qemu-devel@nongnu.org; Sun, 02 Mar 2014 08:08:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50240) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WK67f-00010X-6S for qemu-devel@nongnu.org; Sun, 02 Mar 2014 08:08:03 -0500 From: Marcel Apfelbaum Date: Sun, 2 Mar 2014 15:07:03 +0200 Message-Id: <1393765632-2753-1-git-send-email-marcel.a@redhat.com> Subject: [Qemu-devel] [PATCH RFC V2 0/9] qemu-machine as a QOM object List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, blauwirbel@gmail.com, mdroth@linux.vnet.ibm.com, mst@redhat.com, armbru@redhat.com, mtosatti@redhat.com, agraf@suse.de, ehabkost@redhat.com, lcapitulino@redhat.com, peter.crosthwaite@petalogix.com, quintela@redhat.com, imammedo@redhat.com, aliguori@amazon.com, pbonzini@redhat.com, scottwood@freescale.com, edgar.iglesias@gmail.com, afaerber@suse.de, rth@twiddle.net Most of the "Cc" list is due to patch 8: (Should I send each patch to a different list?) machine-opts: replace qemu_opt_get by QOM QemuMachine queries. Status: - machine_opts are mapped into QemuMachineState's properties, which can be queried as regular QOM properties. - Subclassing QemuMachineClass allows to add a command line option specific to a machine type, error mechanism should work if this option is used on another machine. (Not tested, on the todo list.) - Next big step would be to completely remove the qemu machines initialization and replace it by regular QOM type registration. RFC v1 -> RFC v2 Replaced QemuOpts access by QOM queries. (The main addition) Addressed Paolo Bonzini's comments: - Eliminated duplicate fields (of QEMUMachineInitArgs and QemuMachineState) I am not sure about this one, it does mess with the "const" usage. Maybe delay this duplication removal until after QEMUMachineInitArgs disappears completely? - Added "machine-" prefix to QOM machine type. - An instance of QEMUMachineInitArgs os is used by QemuMachineState and not a pointer. The main benefit of QOMifying the qemu machine would be the possibility to have options per machine type and not global. However, there are other benefits as: - accessing qemu object properties instead of a global QemuOpts list from different code subsystems. - improving the machine "initialization" code (compat and stuff) - getting more close to QOM's vision of single interface for device creation and so on. Basically the series aims (in the long run) to convert: QEMUMachine -> QemuMachineClass QEMUMachineInitArgs -> QemuMachineState. As a first step, in order to make possible an incremental development, both QEMUMachine and QEMUMachineInitArgs are being embedded into the new types. Your comments are welcomed, Marcel Marcel Apfelbaum (9): hw/core: introduced qemu machine as QOM object vl: use qemu machine QOM class instead of global machines list hw/boards: converted current_machine to be an instance of QemuMachineCLass hw/machine: add qemu machine opts as properties to QemuMachineState qapi: output visitor crashes qemu if it encounters a NULL value vl.c: do not set 'type' property in obj_set_property qom: add object_property_is_set machine-opts: replace qemu_opt_get by QOM QemuMachine queries hw/core: mapped QemuOpts into QEMUMachineInitArgs fields to remove duplication device-hotplug.c | 4 +- device_tree.c | 9 +- exec.c | 21 +++- hw/arm/boot.c | 3 +- hw/core/Makefile.objs | 2 +- hw/core/machine.c | 289 ++++++++++++++++++++++++++++++++++++++++++++++ hw/microblaze/boot.c | 13 ++- hw/ppc/e500.c | 21 ++-- hw/ppc/spapr.c | 14 ++- hw/ppc/virtex_ml507.c | 3 +- include/hw/boards.h | 60 +++++++++- include/qom/object.h | 11 ++ kvm-all.c | 11 +- qapi/qmp-output-visitor.c | 5 + qmp.c | 7 +- qom/object.c | 12 ++ target-i386/kvm.c | 10 +- vl.c | 150 ++++++++++++++++-------- 18 files changed, 555 insertions(+), 90 deletions(-) create mode 100644 hw/core/machine.c -- 1.8.3.1