Message ID | 1357829348-3496-2-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Am 10.01.2013 15:49, schrieb Paolo Bonzini: > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/qdev-core.h | 12 ++++++++++++ > hw/qdev.c | 7 ++++++- > 2 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/hw/qdev-core.h b/hw/qdev-core.h > index fdf14ec..853bd08 100644 > --- a/hw/qdev-core.h > +++ b/hw/qdev-core.h > @@ -182,6 +182,18 @@ int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, > int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, > qbus_walkerfn *busfn, void *opaque); > void qdev_reset_all(DeviceState *dev); > + > +/** > + * @qbus_reset_all: Just " * qbus_reset_all:" please. > + * @bus: Bus to be reset. > + * > + * Reset @bus and perform a bus-level ("hard") reset of all devices connected > + * to it, including recursive processing of all buses below @bus itself. A > + * hard reset means that qbus_reset_all will reset all state of the device. qbus_reset_all()? > + * For PCI devices, for example, this will include the base address registers #PCIDevice? > + * or configuration space. > + */ > +void qbus_reset_all(BusState *bus); Otherwise looks trivial and okay. Andreas > void qbus_reset_all_fn(void *opaque); > > void qbus_free(BusState *bus); > diff --git a/hw/qdev.c b/hw/qdev.c > index f2c2484..e2f957e 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -228,10 +228,15 @@ void qdev_reset_all(DeviceState *dev) > qdev_walk_children(dev, qdev_reset_one, qbus_reset_one, NULL); > } > > +void qbus_reset_all(BusState *bus) > +{ > + qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL); > +} > + > void qbus_reset_all_fn(void *opaque) > { > BusState *bus = opaque; > - qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL); > + qbus_reset_all(bus); > } > > /* can be used as ->unplug() callback for the simple cases */
Am 10.01.2013 19:34, schrieb Andreas Färber: > Am 10.01.2013 15:49, schrieb Paolo Bonzini: >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> hw/qdev-core.h | 12 ++++++++++++ >> hw/qdev.c | 7 ++++++- >> 2 files changed, 18 insertions(+), 1 deletion(-) >> >> diff --git a/hw/qdev-core.h b/hw/qdev-core.h >> index fdf14ec..853bd08 100644 >> --- a/hw/qdev-core.h >> +++ b/hw/qdev-core.h >> @@ -182,6 +182,18 @@ int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, >> int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, >> qbus_walkerfn *busfn, void *opaque); >> void qdev_reset_all(DeviceState *dev); >> + >> +/** >> + * @qbus_reset_all: > > Just " * qbus_reset_all:" please. Patch was applied nontheless, please fix in a follow-up. Andreas >> + * @bus: Bus to be reset. >> + * >> + * Reset @bus and perform a bus-level ("hard") reset of all devices connected >> + * to it, including recursive processing of all buses below @bus itself. A >> + * hard reset means that qbus_reset_all will reset all state of the device. > > qbus_reset_all()? > >> + * For PCI devices, for example, this will include the base address registers > > #PCIDevice? > >> + * or configuration space. >> + */ >> +void qbus_reset_all(BusState *bus); > > Otherwise looks trivial and okay. > > Andreas > >> void qbus_reset_all_fn(void *opaque); >> >> void qbus_free(BusState *bus); [snip]
diff --git a/hw/qdev-core.h b/hw/qdev-core.h index fdf14ec..853bd08 100644 --- a/hw/qdev-core.h +++ b/hw/qdev-core.h @@ -182,6 +182,18 @@ int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, qbus_walkerfn *busfn, void *opaque); void qdev_reset_all(DeviceState *dev); + +/** + * @qbus_reset_all: + * @bus: Bus to be reset. + * + * Reset @bus and perform a bus-level ("hard") reset of all devices connected + * to it, including recursive processing of all buses below @bus itself. A + * hard reset means that qbus_reset_all will reset all state of the device. + * For PCI devices, for example, this will include the base address registers + * or configuration space. + */ +void qbus_reset_all(BusState *bus); void qbus_reset_all_fn(void *opaque); void qbus_free(BusState *bus); diff --git a/hw/qdev.c b/hw/qdev.c index f2c2484..e2f957e 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -228,10 +228,15 @@ void qdev_reset_all(DeviceState *dev) qdev_walk_children(dev, qdev_reset_one, qbus_reset_one, NULL); } +void qbus_reset_all(BusState *bus) +{ + qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL); +} + void qbus_reset_all_fn(void *opaque) { BusState *bus = opaque; - qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL); + qbus_reset_all(bus); } /* can be used as ->unplug() callback for the simple cases */
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/qdev-core.h | 12 ++++++++++++ hw/qdev.c | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-)