Alistair Francis <alistair.fran...@xilinx.com> writes: > If the device being added when running qdev_device_add() has > a reset function, register it so that it can be called. > > Signed-off-by: Alistair Francis <alistair.fran...@xilinx.com> > --- > > qdev-monitor.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/qdev-monitor.c b/qdev-monitor.c > index 81e3ff3..0a99d01 100644 > --- a/qdev-monitor.c > +++ b/qdev-monitor.c > @@ -561,6 +561,8 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error **errp) > > if (bus) { > qdev_set_parent_bus(dev, bus); > + } else if (dc->reset) { > + qemu_register_reset((void (*)(void *))dc->reset, dev); > } > > id = qemu_opts_id(opts);
This looks wrong to me. You stuff all the device reset methods into the global reset_handlers list, where they get called in some semi-random order. This breaks when there are reset order dependencies between devices, e.g. between a device and the bus it plugs into. Propagating the reset signal to all the devices is a qdev problem. Copying Andreas for further insight.