Message ID | 20191018150630.31099-12-damien.hedde@greensocs.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Multi-phase reset mechanism | expand |
On 10/18/19 5:06 PM, Damien Hedde wrote: > Replace deprecated qdev_reset_all by resettable_cold_reset_fn for > the ipl registration in the main reset handlers. > > This does not impact the behavior for the following reasons: > + at this point resettable just call the old reset methods of devices > and buses in the same order than 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. > > Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> > --- > Cc: Cornelia Huck <cohuck@redhat.com> > Cc: qemu-s390x@nongnu.org > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Cc: Thomas Huth <thuth@redhat.com> > --- > hw/s390x/ipl.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c > index ca544d64c5..2689f7a017 100644 > --- a/hw/s390x/ipl.c > +++ b/hw/s390x/ipl.c > @@ -237,7 +237,15 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp) > */ > ipl->compat_start_addr = ipl->start_addr; > ipl->compat_bios_start_addr = ipl->bios_start_addr; > - qemu_register_reset(qdev_reset_all_fn, dev); > + /* > + * Because this Device is not on any bus in the qbus tree (it is > + * not a sysbus device and it's not on some other bus like a PCI > + * bus) it will not be automatically reset by the 'reset the > + * sysbus' hook registered by vl.c like most devices. So we must > + * manually register a reset hook for it. :) > + * TODO: there should be a better way to do this. :( > + */ > + qemu_register_reset(resettable_cold_reset_fn, dev); Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > error: > error_propagate(errp, err); > } >
On Fri, 18 Oct 2019 at 16:07, Damien Hedde <damien.hedde@greensocs.com> wrote: > > Replace deprecated qdev_reset_all by resettable_cold_reset_fn for > the ipl registration in the main reset handlers. > > This does not impact the behavior for the following reasons: > + at this point resettable just call the old reset methods of devices > and buses in the same order than 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. > > Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> > --- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
On Fri, 18 Oct 2019 17:06:28 +0200 Damien Hedde <damien.hedde@greensocs.com> wrote: > Replace deprecated qdev_reset_all by resettable_cold_reset_fn for > the ipl registration in the main reset handlers. > > This does not impact the behavior for the following reasons: > + at this point resettable just call the old reset methods of devices > and buses in the same order than 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. > > Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> > --- > Cc: Cornelia Huck <cohuck@redhat.com> > Cc: qemu-s390x@nongnu.org > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Cc: Thomas Huth <thuth@redhat.com> > --- > hw/s390x/ipl.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) Reviewed-by: Cornelia Huck <cohuck@redhat.com>
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index ca544d64c5..2689f7a017 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -237,7 +237,15 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp) */ ipl->compat_start_addr = ipl->start_addr; ipl->compat_bios_start_addr = ipl->bios_start_addr; - qemu_register_reset(qdev_reset_all_fn, dev); + /* + * Because this Device is not on any bus in the qbus tree (it is + * not a sysbus device and it's not on some other bus like a PCI + * bus) it will not be automatically reset by the 'reset the + * sysbus' hook registered by vl.c like most devices. So we must + * manually register a reset hook for it. + * TODO: there should be a better way to do this. + */ + qemu_register_reset(resettable_cold_reset_fn, dev); error: error_propagate(errp, err); }
Replace deprecated qdev_reset_all by resettable_cold_reset_fn for the ipl registration in the main reset handlers. This does not impact the behavior for the following reasons: + at this point resettable just call the old reset methods of devices and buses in the same order than 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. Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> --- Cc: Cornelia Huck <cohuck@redhat.com> Cc: qemu-s390x@nongnu.org Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Thomas Huth <thuth@redhat.com> --- hw/s390x/ipl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)