diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2009-09-25 21:42:39 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-10-05 09:32:48 -0500 |
commit | a8e662b5477a7e3659c7fc2d83db50c42b201c1d (patch) | |
tree | 12dcfa0a4ef0960eec14ff44b772c8e0a5e80061 /hw/usb-hub.c | |
parent | e3936fa574d9fbe241acdc76b5195b048567537e (diff) |
usb: hook unplug into qdev, cleanups + fixes.
Hook into DeviceInfo->exit().
handle_destroy() must not free the state struct, this is handled
by the new usb_qdev_exit() function now.
qdev_free(usb_device) works now.
Fix usb hub to qdev_free() all connected devices on unplug.
Unplugging a usb hub works now.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/usb-hub.c')
-rw-r--r-- | hw/usb-hub.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/hw/usb-hub.c b/hw/usb-hub.c index 0a39986468..e5a0938776 100644 --- a/hw/usb-hub.c +++ b/hw/usb-hub.c @@ -517,8 +517,12 @@ static int usb_hub_handle_packet(USBDevice *dev, USBPacket *p) static void usb_hub_handle_destroy(USBDevice *dev) { USBHubState *s = (USBHubState *)dev; + int i; - qemu_free(s); + for (i = 0; i < s->nb_ports; i++) { + usb_unregister_port(usb_bus_from_device(dev), + &s->ports[i].port); + } } static int usb_hub_initfn(USBDevice *dev) |