Skip to content

Commit

Permalink
hw/core/qdev: add trace events to help with resettable transition
Browse files Browse the repository at this point in the history
Adds trace events to reset procedure and when updating the parent
bus of a device.

Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200123132823.1117486-3-damien.hedde@greensocs.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
dhedde authored and pm215 committed Jan 30, 2020
1 parent f703a04 commit 70804c8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
29 changes: 26 additions & 3 deletions hw/core/qdev.c
Expand Up @@ -38,6 +38,7 @@
#include "hw/boards.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "trace.h"

bool qdev_hotplug = false;
static bool qdev_hot_added = false;
Expand Down Expand Up @@ -98,7 +99,11 @@ void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
bool replugging = dev->parent_bus != NULL;

if (replugging) {
/* Keep a reference to the device while it's not plugged into
trace_qdev_update_parent_bus(dev, object_get_typename(OBJECT(dev)),
dev->parent_bus, object_get_typename(OBJECT(dev->parent_bus)),
OBJECT(bus), object_get_typename(OBJECT(bus)));
/*
* Keep a reference to the device while it's not plugged into
* any bus, to avoid it potentially evaporating when it is
* dereffed in bus_remove_child().
*/
Expand Down Expand Up @@ -296,6 +301,18 @@ HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev)
return hotplug_ctrl;
}

static int qdev_prereset(DeviceState *dev, void *opaque)
{
trace_qdev_reset_tree(dev, object_get_typename(OBJECT(dev)));
return 0;
}

static int qbus_prereset(BusState *bus, void *opaque)
{
trace_qbus_reset_tree(bus, object_get_typename(OBJECT(bus)));
return 0;
}

static int qdev_reset_one(DeviceState *dev, void *opaque)
{
device_legacy_reset(dev);
Expand All @@ -306,6 +323,7 @@ static int qdev_reset_one(DeviceState *dev, void *opaque)
static int qbus_reset_one(BusState *bus, void *opaque)
{
BusClass *bc = BUS_GET_CLASS(bus);
trace_qbus_reset(bus, object_get_typename(OBJECT(bus)));
if (bc->reset) {
bc->reset(bus);
}
Expand All @@ -314,7 +332,9 @@ static int qbus_reset_one(BusState *bus, void *opaque)

void qdev_reset_all(DeviceState *dev)
{
qdev_walk_children(dev, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
trace_qdev_reset_all(dev, object_get_typename(OBJECT(dev)));
qdev_walk_children(dev, qdev_prereset, qbus_prereset,
qdev_reset_one, qbus_reset_one, NULL);
}

void qdev_reset_all_fn(void *opaque)
Expand All @@ -324,7 +344,9 @@ void qdev_reset_all_fn(void *opaque)

void qbus_reset_all(BusState *bus)
{
qbus_walk_children(bus, NULL, NULL, qdev_reset_one, qbus_reset_one, NULL);
trace_qbus_reset_all(bus, object_get_typename(OBJECT(bus)));
qbus_walk_children(bus, qdev_prereset, qbus_prereset,
qdev_reset_one, qbus_reset_one, NULL);
}

void qbus_reset_all_fn(void *opaque)
Expand Down Expand Up @@ -1105,6 +1127,7 @@ void device_legacy_reset(DeviceState *dev)
{
DeviceClass *klass = DEVICE_GET_CLASS(dev);

trace_qdev_reset(dev, object_get_typename(OBJECT(dev)));
if (klass->reset) {
klass->reset(dev);
}
Expand Down
9 changes: 9 additions & 0 deletions hw/core/trace-events
@@ -1,2 +1,11 @@
# loader.c
loader_write_rom(const char *name, uint64_t gpa, uint64_t size, bool isrom) "%s: @0x%"PRIx64" size=0x%"PRIx64" ROM=%d"

# qdev.c
qdev_reset(void *obj, const char *objtype) "obj=%p(%s)"
qdev_reset_all(void *obj, const char *objtype) "obj=%p(%s)"
qdev_reset_tree(void *obj, const char *objtype) "obj=%p(%s)"
qbus_reset(void *obj, const char *objtype) "obj=%p(%s)"
qbus_reset_all(void *obj, const char *objtype) "obj=%p(%s)"
qbus_reset_tree(void *obj, const char *objtype) "obj=%p(%s)"
qdev_update_parent_bus(void *obj, const char *objtype, void *oldp, const char *oldptype, void *newp, const char *newptype) "obj=%p(%s) old_parent=%p(%s) new_parent=%p(%s)"

0 comments on commit 70804c8

Please sign in to comment.