qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] usb: ehci: fix memory leak in ehci


From: Li Qiang
Subject: Re: [Qemu-devel] [PATCH] usb: ehci: fix memory leak in ehci
Date: Wed, 15 Feb 2017 14:25:18 +0800

Ping...

2017-02-08 10:42 GMT+08:00 Li Qiang <address@hidden>:

> From: Li Qiang <address@hidden>
>
> In usb_ehci_init function, it initializes 's->ipacket', but there
> is no corresponding function to free this. As the ehci can be hotplug
> and unplug, this will leak host memory leak. In order to make the
> hierarchy clean, we should add a ehci pci finalize function, then call
> the clean function in ehci device.
>
> Signed-off-by: Li Qiang <address@hidden>
> ---
>  hw/usb/hcd-ehci-pci.c | 9 +++++++++
>  hw/usb/hcd-ehci.c     | 5 +++++
>  hw/usb/hcd-ehci.h     | 1 +
>  3 files changed, 15 insertions(+)
>
> diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c
> index 5657705..6dedcb8 100644
> --- a/hw/usb/hcd-ehci-pci.c
> +++ b/hw/usb/hcd-ehci-pci.c
> @@ -89,6 +89,14 @@ static void usb_ehci_pci_init(Object *obj)
>      usb_ehci_init(s, DEVICE(obj));
>  }
>
> +static void usb_ehci_pci_finalize(Object *obj)
> +{
> +    EHCIPCIState *i = PCI_EHCI(obj);
> +    EHCIState *s = &i->ehci;
> +
> +    usb_ehci_finalize(s);
> +}
> +
>  static void usb_ehci_pci_exit(PCIDevice *dev)
>  {
>      EHCIPCIState *i = PCI_EHCI(dev);
> @@ -159,6 +167,7 @@ static const TypeInfo ehci_pci_type_info = {
>      .parent = TYPE_PCI_DEVICE,
>      .instance_size = sizeof(EHCIPCIState),
>      .instance_init = usb_ehci_pci_init,
> +    .instance_finalize = usb_ehci_pci_finalize,
>      .abstract = true,
>      .class_init = ehci_class_init,
>  };
> diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
> index 7622a3a..50ef817 100644
> --- a/hw/usb/hcd-ehci.c
> +++ b/hw/usb/hcd-ehci.c
> @@ -2545,6 +2545,11 @@ void usb_ehci_init(EHCIState *s, DeviceState *dev)
>                                  &s->mem_ports);
>  }
>
> +void usb_ehci_finalize(EHCIState *s)
> +{
> +    usb_packet_cleanup(&s->ipacket);
> +}
> +
>  /*
>   * vim: expandtab ts=4
>   */
> diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h
> index 3fd7038..938d8aa 100644
> --- a/hw/usb/hcd-ehci.h
> +++ b/hw/usb/hcd-ehci.h
> @@ -323,6 +323,7 @@ struct EHCIState {
>  extern const VMStateDescription vmstate_ehci;
>
>  void usb_ehci_init(EHCIState *s, DeviceState *dev);
> +void usb_ehci_finalize(EHCIState *s);
>  void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp);
>  void usb_ehci_unrealize(EHCIState *s, DeviceState *dev, Error **errp);
>  void ehci_reset(void *opaque);
> --
> 1.8.3.1
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]