diff mbox

[2/6] usb-ohci: add exit function

Message ID 1401452542-11080-3-git-send-email-arei.gonglei@huawei.com
State New
Headers show

Commit Message

Gonglei (Arei) May 30, 2014, 12:22 p.m. UTC
From: Gonglei <arei.gonglei@huawei.com>

clean up ohci resource when ohci pci device exit

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
---
 hw/usb/hcd-ohci.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Gerd Hoffmann June 2, 2014, 7:45 a.m. UTC | #1
Hi,

> +static void usb_ohci_exit(PCIDevice *dev)
> +{
> +    OHCIPCIState *ohci = PCI_OHCI(dev);
> +    OHCIState *s = &ohci->state;
> +
> +    memory_region_destroy(&s->mem);
> +
> +    if (!ohci->masterbus) {
> +        usb_bus_release(&s->bus);
> +    }
> +}

This is incomplete.  At minimum you have to care about s->eof_timer.

Same goes for the other host adapters.  There can be timers running and
there might be in-flight usb requests which must be property teared
down, to make sure we don't use-after-free hostadapter state in
callbacks.

cheers,
  Gerd
Gonglei (Arei) June 3, 2014, 1:40 a.m. UTC | #2
> -----Original Message-----

> From: Gerd Hoffmann [mailto:kraxel@redhat.com]

> Sent: Monday, June 02, 2014 3:45 PM

> To: Gonglei (Arei)

> Cc: qemu-devel@nongnu.org; Luonengjun; Huangweidong (C); Huangpeng

> (Peter)

> Subject: Re: [PATCH 2/6] usb-ohci: add exit function

> 

>   Hi,

> 

> > +static void usb_ohci_exit(PCIDevice *dev)

> > +{

> > +    OHCIPCIState *ohci = PCI_OHCI(dev);

> > +    OHCIState *s = &ohci->state;

> > +

> > +    memory_region_destroy(&s->mem);

> > +

> > +    if (!ohci->masterbus) {

> > +        usb_bus_release(&s->bus);

> > +    }

> > +}

> 

> This is incomplete.  At minimum you have to care about s->eof_timer.

> 

Agreed. 

> Same goes for the other host adapters.  There can be timers running and

> there might be in-flight usb requests which must be property teared

> down, to make sure we don't use-after-free hostadapter state in

> callbacks.

> 

I will check and complete them. Thanks.


Best regards,
-Gonglei
diff mbox

Patch

diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index cd87074..3add206 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -1952,6 +1952,18 @@  static int usb_ohci_initfn_pci(PCIDevice *dev)
     return 0;
 }
 
+static void usb_ohci_exit(PCIDevice *dev)
+{
+    OHCIPCIState *ohci = PCI_OHCI(dev);
+    OHCIState *s = &ohci->state;
+
+    memory_region_destroy(&s->mem);
+
+    if (!ohci->masterbus) {
+        usb_bus_release(&s->bus);
+    }
+}
+
 #define TYPE_SYSBUS_OHCI "sysbus-ohci"
 #define SYSBUS_OHCI(obj) OBJECT_CHECK(OHCISysBusState, (obj), TYPE_SYSBUS_OHCI)
 
@@ -2092,6 +2104,7 @@  static void ohci_pci_class_init(ObjectClass *klass, void *data)
     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
 
     k->init = usb_ohci_initfn_pci;
+    k->exit = usb_ohci_exit;
     k->vendor_id = PCI_VENDOR_ID_APPLE;
     k->device_id = PCI_DEVICE_ID_APPLE_IPID_USB;
     k->class_id = PCI_CLASS_SERIAL_USB;