From 131ec1bd7de661f20f178f582430a9d0d0cfa9b4 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 25 Sep 2009 21:42:34 +0200 Subject: qdev: device free fixups. Two bug fixes: * When freeing a device we unregister even stuff we didn't register in the first place because the ->init() callback failed. * When freeing a device with child busses attached, we fail to zap the child bus (and the devices attached to it). Signed-off-by: Gerd Hoffmann Signed-off-by: Anthony Liguori --- hw/qdev.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'hw/qdev.h') diff --git a/hw/qdev.h b/hw/qdev.h index 51d835f616..cd58fa8cf4 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -19,10 +19,16 @@ typedef struct BusState BusState; typedef struct BusInfo BusInfo; +enum DevState { + DEV_STATE_CREATED = 1, + DEV_STATE_INITIALIZED, +}; + /* This structure should not be accessed directly. We declare it here so that it can be embedded in individual device state structures. */ struct DeviceState { const char *id; + enum DevState state; DeviceInfo *info; BusState *parent_bus; int num_gpio_out; @@ -149,6 +155,7 @@ BusState *qdev_get_parent_bus(DeviceState *dev); void qbus_create_inplace(BusState *bus, BusInfo *info, DeviceState *parent, const char *name); BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name); +void qbus_free(BusState *bus); #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) -- cgit 1.4.1