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.

Reply via email to