On Tue, Oct 23, 2012 at 12:56:18PM -0200, Eduardo Habkost wrote: > On Wed, Oct 17, 2012 at 01:08:23PM -0500, Anthony Liguori wrote: > > Eduardo Habkost <ehabk...@redhat.com> writes: > > > > > The reset register/unregister code is specific to qemu-system-*, so > > > isolate it so it can be moved to qdev-system.c. > > > > > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > > > --- > > > hw/qdev-core.c | 24 ++++++++++++++++++------ > > > 1 file changed, 18 insertions(+), 6 deletions(-) > > > > > > diff --git a/hw/qdev-core.c b/hw/qdev-core.c > > > index af0af52..a105679 100644 > > > --- a/hw/qdev-core.c > > > +++ b/hw/qdev-core.c > > > @@ -47,6 +47,21 @@ void GCC_WEAK qdev_finalize_vmstate(DeviceState *dev) > > > { > > > } > > > > > > +static void qbus_register_reset(BusState *bus) > > > +{ > > > + if (bus != sysbus_get_default()) { > > > + /* TODO: once all bus devices are qdevified, > > > + only reset handler for main_system_bus should be registered > > > here. */ > > > + qemu_register_reset(qbus_reset_all_fn, bus); > > > + } > > > +} > > > + > > > +static void qbus_unregister_reset(BusState *bus) > > > +{ > > > + assert(bus != sysbus_get_default()); /* main_system_bus is never > > > freed */ > > > + qemu_unregister_reset(qbus_reset_all_fn, bus); > > > +} > > > + > > > > Again, I'd suggest stubbing out qemu_[un]register_reset instead of > > trying to cope with it's users. > > I was going to implement it the way you suggested. But then I noticed > that I _ *-user will need to request the devices to be reset once, too > (even if the only devices available are the CPU objects). > > On the next version, I will move the reset-function list from vl.c to > qdev-core.c. Code that uses qdev will need to take care of calling > qemu_devices_reset() eventually (qemu-system does that on vl.c *-user > will need to that somewhere else).
I don't usually reply to myself to correct typos, but the message above was almost impossible to parse. So, rewriting it: I was going to implement it the way you suggested. But then I noticed that *-user will need to request the devices to be reset once, too (even if the only devices available are the CPU objects). On the next version, I will move the reset-function list from vl.c to qdev-core.c. Code that uses qdev will need to take care of calling qemu_devices_reset() eventually (qemu-system does that on vl.c, and *-user will need to that somewhere else). > > > > > Regards, > > > > Anthony Liguori > > > > > const char *qdev_fw_name(DeviceState *dev) > > > { > > > DeviceClass *dc = DEVICE_GET_CLASS(dev); > > > @@ -355,10 +370,8 @@ static void qbus_realize(BusState *bus) > > > QLIST_INSERT_HEAD(&bus->parent->child_bus, bus, sibling); > > > bus->parent->num_child_bus++; > > > object_property_add_child(OBJECT(bus->parent), bus->name, > > > OBJECT(bus), NULL); > > > - } else if (bus != sysbus_get_default()) { > > > - /* TODO: once all bus devices are qdevified, > > > - only reset handler for main_system_bus should be registered > > > here. */ > > > - qemu_register_reset(qbus_reset_all_fn, bus); > > > + } else { > > > + qbus_register_reset(bus); > > > } > > > } > > > > > > @@ -692,8 +705,7 @@ static void qbus_finalize(Object *obj) > > > QLIST_REMOVE(bus, sibling); > > > bus->parent->num_child_bus--; > > > } else { > > > - assert(bus != sysbus_get_default()); /* main_system_bus is never > > > freed */ > > > - qemu_unregister_reset(qbus_reset_all_fn, bus); > > > + qbus_unregister_reset(bus); > > > } > > > g_free((char *)bus->name); > > > } > > > -- > > > 1.7.11.7 > > > > -- > Eduardo > -- Eduardo