On Fri, Sep 05, 2014 at 04:37:32PM +0800, arei.gong...@huawei.com wrote: > From: Gonglei <arei.gong...@huawei.com> > > Add a qom property with the same name 'bootindex', > when we remove it form qdev property, things will > continue to work just fine, and we can use qom features > which are not supported by qdev property. > > Signed-off-by: Gonglei <arei.gong...@huawei.com> > --- > hw/ide/qdev.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c > index efab95b..9e2ed40 100644 > --- a/hw/ide/qdev.c > +++ b/hw/ide/qdev.c > @@ -191,6 +191,17 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind > kind) > return 0; > } > > +static void ide_dev_instance_init(Object *obj) > +{ > + DeviceState *dev = DEVICE(obj); > + IDEDevice *d = DO_UPCAST(IDEDevice, qdev, dev); > + > + device_add_bootindex_property(obj, &d->conf.bootindex, > + "bootindex", > + d->unit ? "/disk@1" : "/disk@0", > + &d->qdev, NULL); > +} > + > static int ide_hd_initfn(IDEDevice *dev) > { > return ide_dev_initfn(dev, IDE_HD); > @@ -238,6 +249,7 @@ static const TypeInfo ide_hd_info = { > .parent = TYPE_IDE_DEVICE, > .instance_size = sizeof(IDEDrive), > .class_init = ide_hd_class_init, > + .instance_init = ide_dev_instance_init, > }; > > static Property ide_cd_properties[] = { > @@ -260,6 +272,7 @@ static const TypeInfo ide_cd_info = { > .parent = TYPE_IDE_DEVICE, > .instance_size = sizeof(IDEDrive), > .class_init = ide_cd_class_init, > + .instance_init = ide_dev_instance_init, > }; > > static Property ide_drive_properties[] = { > @@ -282,6 +295,7 @@ static const TypeInfo ide_drive_info = { > .parent = TYPE_IDE_DEVICE, > .instance_size = sizeof(IDEDrive), > .class_init = ide_drive_class_init, > + .instance_init = ide_dev_instance_init, > };
If all TYPE_IDE_DEVICE subclasses have the same instance_init, why not just set ide_device_type_info.instance_init = ide_dev_instance_init? -- Eduardo