Re: [Qemu-devel] [RFC 0/8] include qdev core in *-user, make CPU child of DeviceState
On 08/21/2012 06:42 PM, Eduardo Habkost wrote: So, here's a third suggestion to the CPU/DeviceState problem. Basically I split the qdev code into a core (that can be easily compiled into *-user), and a part specific to qemu-system-*. I'm barging in late here, so sorry if this has been suggested and shot down: is it not possible to use composition here? typedef ... CPU; typedef struct CPUState { DeviceState qdev; CPU cpu; } CPUState; But I guess bringing qdev to -user is inevitable. -- error compiling committee.c: too many arguments to function
Re: [Qemu-devel] [RFC 0/8] include qdev core in *-user, make CPU child of DeviceState
On Wed, Aug 22, 2012 at 12:05:44PM +0300, Avi Kivity wrote: On 08/21/2012 06:42 PM, Eduardo Habkost wrote: So, here's a third suggestion to the CPU/DeviceState problem. Basically I split the qdev code into a core (that can be easily compiled into *-user), and a part specific to qemu-system-*. I'm barging in late here, so sorry if this has been suggested and shot down: is it not possible to use composition here? typedef ... CPU; typedef struct CPUState { DeviceState qdev; CPU cpu; } CPUState; But I guess bringing qdev to -user is inevitable. I guess it would be OK, and almost equivalent to the suggestion by Anthony (use a different parent class for the CPU class on system-* and *-user), as most state today is in the arch-specific classes. The only problem I see is when some part of the CPU code starts using a DeviceState feature (e.g. calling x86_cpu_realize() only at qdev_init()-time). Then we have to duplicate some code to make *-user work differently (not much code, I guess, but it would still make it easier to break it if we have two implementations). -- Eduardo
[Qemu-devel] [RFC 0/8] include qdev core in *-user, make CPU child of DeviceState
So, here's a third suggestion to the CPU/DeviceState problem. Basically I split the qdev code into a core (that can be easily compiled into *-user), and a part specific to qemu-system-*. There are two remaining parts that forced me to use #ifdefs in the core .c files: - vmstate handling on qdev_init() - the qemu_register_reset() hack If we address those two issues inside qemu-system-* (instead of inside the qdev core code), using DeviceState inside *-user shouldn't be a big problem anymore. Anthony Liguori (1): qdev: split up header so it can be used in cpu.h Eduardo Habkost (3): split qdev into a core and code used only by qemu-system-* qdev: use full qdev.h include path on qdev*.c include core qdev code into *-user, too Igor Mammedov (4): move qemu_irq typedef out of cpu-common.h qapi-types.h doesn't really need to include qemu-common.h cleanup error.h, included qapi-types.h aready has stdbool.h make CPU a child of DeviceState Makefile.objs | 1 + error.h | 1 - hw/Makefile.objs| 3 +- hw/arm-misc.h | 1 + hw/bt.h | 2 + hw/devices.h| 2 + hw/irq.h| 2 + hw/mc146818rtc.c| 1 + hw/omap.h | 1 + hw/qdev-addr.c | 1 + hw/qdev-core.h | 240 +++ hw/qdev-monitor.h | 16 + hw/qdev-properties-system.c | 329 + hw/qdev-properties.h| 129 hw/qdev-system.c| 93 ++ hw/qdev.h | 371 +--- hw/soc_dma.h| 1 + hw/xen.h| 1 + include/qemu/cpu.h | 6 +- qemu-common.h | 1 - qom/Makefile.objs | 2 +- qom/cpu.c | 3 +- hw/qdev-properties.c = qom/device-properties.c | 323 + hw/qdev.c = qom/device.c | 106 +-- scripts/qapi-types.py | 2 +- sysemu.h| 1 + 26 files changed, 849 insertions(+), 790 deletions(-) create mode 100644 hw/qdev-core.h create mode 100644 hw/qdev-monitor.h create mode 100644 hw/qdev-properties-system.c create mode 100644 hw/qdev-properties.h create mode 100644 hw/qdev-system.c rename hw/qdev-properties.c = qom/device-properties.c (75%) rename hw/qdev.c = qom/device.c (89%) -- 1.7.11.4