Re: [Qemu-devel] [PATCH 22/22] core/sysbus: remove the SysBusDeviceClass::init path
On Mon, Nov 19, 2018 at 09:31:39PM -0200, Eduardo Habkost wrote: > On Mon, Nov 19, 2018 at 08:08:20PM +0800, Mao Zhongyi wrote: > > Currently, all sysbus devices have been converted to realize(), > > so remove this path. > > > > Cc: ehabk...@redhat.com > > Cc: th...@redhat.com > > Cc: pbonz...@redhat.com > > Cc: arm...@redhat.com > > Cc: peter.mayd...@linaro.org > > Cc: richard.hender...@linaro.org > > Cc: alistair.fran...@wdc.com > > > > Signed-off-by: Mao Zhongyi > > Signed-off-by: Zhang Shengju > > --- > > hw/core/sysbus.c| 15 --- > > include/hw/sysbus.h | 3 --- > > 2 files changed, 18 deletions(-) > > > > diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c > > index 7ac36ad3e7..030ad426c1 100644 > > --- a/hw/core/sysbus.c > > +++ b/hw/core/sysbus.c > > @@ -201,20 +201,6 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t > > ioport, uint32_t size) > > } > > } > > > > -/* TODO remove once all sysbus devices have been converted to realize */ > > -static void sysbus_realize(DeviceState *dev, Error **errp) > > -{ > > -SysBusDevice *sd = SYS_BUS_DEVICE(dev); > > -SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd); > > - > > -if (!sbc->init) { > > -return; > > -} > > -if (sbc->init(sd) < 0) { > > -error_setg(errp, "Device initialization failed"); > > -} > > -} > > Nice. :) > > > > - > > DeviceState *sysbus_create_varargs(const char *name, > > hwaddr addr, ...) > > { > > @@ -327,7 +313,6 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev) > > static void sysbus_device_class_init(ObjectClass *klass, void *data) > > { > > DeviceClass *k = DEVICE_CLASS(klass); > > -k->realize = sysbus_realize; > > Have you ensured this won't break any subclasses that > saved the original realize function on a parent_realize field? > Now they will have parent_realize set to NULL. > > Most of them use device_class_set_parent_realize() to implement > that. Found one: $ ./aarch64-softmmu/qemu-system-aarch64 -machine virt,iommu=smmuv3 Segmentation fault (core dumped) (gdb) bt #0 0x in () #1 0x5596eabe in smmu_base_realize (dev=0x56ac0cb0, errp=0x7fffc450) at /home/ehabkost/rh/proj/virt/qemu/hw/arm/smmu-common.c:428 #2 0x55970322 in smmu_realize (d=0x56ac0cb0, errp=0x7fffc4c0) at /home/ehabkost/rh/proj/virt/qemu/hw/arm/smmuv3.c:1390 #3 0x55ac8f00 in device_set_realized (obj=, value=, errp=0x7fffc5b0) at hw/core/qdev.c:826 #4 0x55c424a7 in property_set_bool (obj=0x56ac0cb0, v=, name=, opaque=0x56a05b70, errp=0x7fffc5b0) at qom/object.c:1991 #5 0x55c468df in object_property_set_qobject (obj=obj@entry=0x56ac0cb0, value=value@entry=0x56ac2520, name=name@entry=0x55de03f9 "realized", errp=errp@entry=0x7fffc5b0) at qom/qom-qobject.c:27 #6 0x55c44355 in object_property_set_bool (obj=0x56ac0cb0, value=, name=0x55de03f9 "realized", errp=0x7fffc5b0) at qom/object.c:1249 #7 0x55ac7e22 in qdev_init_nofail (dev=dev@entry=0x56ac0cb0) at hw/core/qdev.c:313 #8 0x5592ef97 in create_smmu (bus=0x569970a0, pic=0x7fffc900, vms=) at /home/ehabkost/rh/proj/virt/qemu/hw/arm/virt.c:1058 #9 0x5592ef97 in create_pcie (pic=0x7fffc900, vms=) at /home/ehabkost/rh/proj/virt/qemu/hw/arm/virt.c:1208 #10 0x5592ef97 in machvirt_init (machine=0x5663e9c0) at /home/ehabkost/rh/proj/virt/qemu/hw/arm/virt.c:1549 #11 0x55acf013 in machine_run_board_init (machine=0x5663e9c0) at hw/core/machine.c:834 #12 0x5581dab8 in main (argc=, argv=, envp=) at vl.c:4518 > > > k->bus_type = TYPE_SYSTEM_BUS; > > /* > > * device_add plugs devices into a suitable bus. For "real" buses, > > diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h > > index 0b59a3b8d6..1aedcf05c9 100644 > > --- a/include/hw/sysbus.h > > +++ b/include/hw/sysbus.h > > @@ -38,9 +38,6 @@ typedef struct SysBusDevice SysBusDevice; > > typedef struct SysBusDeviceClass { > > /*< private >*/ > > DeviceClass parent_class; > > -/*< public >*/ > > - > > -int (*init)(SysBusDevice *dev); > > > > /* > > * Let the sysbus device format its own non-PIO, non-MMIO unit address. > > -- > > 2.17.1 > > > > > > > > -- > Eduardo -- Eduardo
Re: [Qemu-devel] [PATCH 22/22] core/sysbus: remove the SysBusDeviceClass::init path
On Mon, Nov 19, 2018 at 08:08:20PM +0800, Mao Zhongyi wrote: > Currently, all sysbus devices have been converted to realize(), > so remove this path. > > Cc: ehabk...@redhat.com > Cc: th...@redhat.com > Cc: pbonz...@redhat.com > Cc: arm...@redhat.com > Cc: peter.mayd...@linaro.org > Cc: richard.hender...@linaro.org > Cc: alistair.fran...@wdc.com > > Signed-off-by: Mao Zhongyi > Signed-off-by: Zhang Shengju > --- > hw/core/sysbus.c| 15 --- > include/hw/sysbus.h | 3 --- > 2 files changed, 18 deletions(-) > > diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c > index 7ac36ad3e7..030ad426c1 100644 > --- a/hw/core/sysbus.c > +++ b/hw/core/sysbus.c > @@ -201,20 +201,6 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t > ioport, uint32_t size) > } > } > > -/* TODO remove once all sysbus devices have been converted to realize */ > -static void sysbus_realize(DeviceState *dev, Error **errp) > -{ > -SysBusDevice *sd = SYS_BUS_DEVICE(dev); > -SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd); > - > -if (!sbc->init) { > -return; > -} > -if (sbc->init(sd) < 0) { > -error_setg(errp, "Device initialization failed"); > -} > -} Nice. :) > - > DeviceState *sysbus_create_varargs(const char *name, > hwaddr addr, ...) > { > @@ -327,7 +313,6 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev) > static void sysbus_device_class_init(ObjectClass *klass, void *data) > { > DeviceClass *k = DEVICE_CLASS(klass); > -k->realize = sysbus_realize; Have you ensured this won't break any subclasses that saved the original realize function on a parent_realize field? Now they will have parent_realize set to NULL. Most of them use device_class_set_parent_realize() to implement that. > k->bus_type = TYPE_SYSTEM_BUS; > /* > * device_add plugs devices into a suitable bus. For "real" buses, > diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h > index 0b59a3b8d6..1aedcf05c9 100644 > --- a/include/hw/sysbus.h > +++ b/include/hw/sysbus.h > @@ -38,9 +38,6 @@ typedef struct SysBusDevice SysBusDevice; > typedef struct SysBusDeviceClass { > /*< private >*/ > DeviceClass parent_class; > -/*< public >*/ > - > -int (*init)(SysBusDevice *dev); > > /* > * Let the sysbus device format its own non-PIO, non-MMIO unit address. > -- > 2.17.1 > > > -- Eduardo
[Qemu-devel] [PATCH 22/22] core/sysbus: remove the SysBusDeviceClass::init path
Currently, all sysbus devices have been converted to realize(), so remove this path. Cc: ehabk...@redhat.com Cc: th...@redhat.com Cc: pbonz...@redhat.com Cc: arm...@redhat.com Cc: peter.mayd...@linaro.org Cc: richard.hender...@linaro.org Cc: alistair.fran...@wdc.com Signed-off-by: Mao Zhongyi Signed-off-by: Zhang Shengju --- hw/core/sysbus.c| 15 --- include/hw/sysbus.h | 3 --- 2 files changed, 18 deletions(-) diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index 7ac36ad3e7..030ad426c1 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -201,20 +201,6 @@ void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size) } } -/* TODO remove once all sysbus devices have been converted to realize */ -static void sysbus_realize(DeviceState *dev, Error **errp) -{ -SysBusDevice *sd = SYS_BUS_DEVICE(dev); -SysBusDeviceClass *sbc = SYS_BUS_DEVICE_GET_CLASS(sd); - -if (!sbc->init) { -return; -} -if (sbc->init(sd) < 0) { -error_setg(errp, "Device initialization failed"); -} -} - DeviceState *sysbus_create_varargs(const char *name, hwaddr addr, ...) { @@ -327,7 +313,6 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev) static void sysbus_device_class_init(ObjectClass *klass, void *data) { DeviceClass *k = DEVICE_CLASS(klass); -k->realize = sysbus_realize; k->bus_type = TYPE_SYSTEM_BUS; /* * device_add plugs devices into a suitable bus. For "real" buses, diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index 0b59a3b8d6..1aedcf05c9 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -38,9 +38,6 @@ typedef struct SysBusDevice SysBusDevice; typedef struct SysBusDeviceClass { /*< private >*/ DeviceClass parent_class; -/*< public >*/ - -int (*init)(SysBusDevice *dev); /* * Let the sysbus device format its own non-PIO, non-MMIO unit address. -- 2.17.1