Re: [Qemu-devel] [RFC 0/8] include qdev core in *-user, make CPU child of DeviceState

2012-08-22 Thread Avi Kivity
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

2012-08-22 Thread Eduardo Habkost
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

2012-08-21 Thread Eduardo Habkost
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