Message ID | 20191220115035.709876-11-damien.hedde@greensocs.com |
---|---|
State | New |
Headers | show |
Series | Multi-phase reset mechanism | expand |
On 12/20/19 10:50 PM, Damien Hedde wrote: > Replace deprecated qbus_reset_all by resettable_cold_reset_fn for > the sysbus reset registration. > > Apart for the raspi machines, this does not impact the behavior > because: > + at this point resettable just calls the old reset methods of devices > and buses in the same order as qdev/qbus. > + resettable handlers registered with qemu_register_reset are > serialized; there is no interleaving. > + eventual explicit calls to legacy reset API (device_reset or > qdev/qbus_reset) inside this reset handler will not be masked out > by resettable mechanism; they do not go through resettable api. > > For the raspi machines, during the sysbus reset the sd-card is not > reset twice anymore but only once. This is a consequence of switching > both sysbus reset and changing parent to resettable; it detects the > second reset is not needed. This has no impact on the state after > reset; the sd-card reset method only reset local state and query > information from the block backend. > > Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> > --- Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/vl.c b/vl.c index 94508300c3..3990fc4bbe 100644 --- a/vl.c +++ b/vl.c @@ -4260,7 +4260,15 @@ int main(int argc, char **argv, char **envp) /* TODO: once all bus devices are qdevified, this should be done * when bus is created by qdev.c */ - qemu_register_reset(qbus_reset_all_fn, sysbus_get_default()); + /* + * TODO: If we had a main 'reset container' that the whole system + * lived in, we could reset that using the multi-phase reset + * APIs. For the moment, we just reset the sysbus, which will cause + * all devices hanging off it (and all their child buses, recursively) + * to be reset. Note that this will *not* reset any Device objects + * which are not attached to some part of the qbus tree! + */ + qemu_register_reset(resettable_cold_reset_fn, sysbus_get_default()); qemu_run_machine_init_done_notifiers(); if (rom_check_and_register_reset() != 0) {