From fd80eb370d6fb7ad4f51f494f31b544544e1cdfd Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 22 Feb 2012 14:11:19 +0100 Subject: [PATCH 003/109] qdev: trigger reset from a given device RH-Author: Paolo Bonzini Message-id: <1329919979-20948-3-git-send-email-pbonzini@redhat.com> Patchwork-id: 37483 O-Subject: [RHEL 6.3 qemu-kvm PATCH v2 002/102] qdev: trigger reset from a given device Bugzilla: 782029 RH-Acked-by: Gerd Hoffmann RH-Acked-by: Laszlo Ersek RH-Acked-by: Orit Wasserman Introduce a helper function which triggers reset from a given device. Will be used by pci bus emulation. Signed-off-by: Isaku Yamahata Signed-off-by: Anthony Liguori Signed-off-by: Michael S. Tsirkin (cherry picked from 5af0a04bea1f1704432b7c118c00a466e862bf00) Conflicts: hw/qdev.c hw/qdev.h --- hw/qdev.c | 14 ++++++++++++++ hw/qdev.h | 1 + 2 files changed, 15 insertions(+), 0 deletions(-) Signed-off-by: Michal Novotny --- hw/qdev.c | 14 ++++++++++++++ hw/qdev.h | 1 + 2 files changed, 15 insertions(+), 0 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index 5021041..57ba8ee 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -309,6 +309,20 @@ int qdev_unplug(DeviceState *dev) return dev->info->unplug(dev); } +static int qdev_reset_one(DeviceState *dev, void *opaque) +{ + if (dev->info->reset) { + dev->info->reset(dev); + } + + return 0; +} + +void qdev_reset_all(DeviceState *dev) +{ + qdev_walk_children(dev, qdev_reset_one, NULL, NULL); +} + /* can be used as ->unplug() callback for the simple cases */ int qdev_simple_unplug_cb(DeviceState *dev) { diff --git a/hw/qdev.h b/hw/qdev.h index 294212a..fecaad4 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -195,6 +195,7 @@ int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, qbus_walkerfn *busfn, void *opaque); int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, qbus_walkerfn *busfn, void *opaque); +void qdev_reset_all(DeviceState *dev); void qbus_free(BusState *bus); #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) -- 1.7.7.6