Patchwork pci: fix pci_unregister_secondary_bus().

login
register
mail settings
Submitter Isaku Yamahata
Date July 9, 2010, 1:52 a.m.
Message ID <c7e8ea68cce5e6b10e3378463e6befd335fd723b.1278640326.git.yamahata@valinux.co.jp>
Download mbox | patch
Permalink /patch/58321/
State New
Headers show

Comments

Isaku Yamahata - July 9, 2010, 1:52 a.m.
Fix leak in pci_unregister_secondary_bus().
call qbus_free().

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 hw/pci.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
Markus Armbruster - July 9, 2010, 6:46 a.m.
Isaku Yamahata <yamahata@valinux.co.jp> writes:

> Fix leak in pci_unregister_secondary_bus().
> call qbus_free().
>
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> ---
>  hw/pci.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/hw/pci.c b/hw/pci.c
> index a7ff566..25634ed 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -298,6 +298,7 @@ static void pci_unregister_secondary_bus(PCIBus *bus)
>  {
>      assert(QLIST_EMPTY(&bus->child));
>      QLIST_REMOVE(bus, sibling);
> +    qbus_free(&bus->qbus);
>  }
>  
>  int pci_bus_num(PCIBus *s)

Buses are normally freed automatically along with the device providing
them, in qdev_free().  Why is that not sufficient for pci-bridge?
Isaku Yamahata - July 9, 2010, 7:02 a.m.
On Fri, Jul 09, 2010 at 08:46:33AM +0200, Markus Armbruster wrote:
> Isaku Yamahata <yamahata@valinux.co.jp> writes:
> 
> > Fix leak in pci_unregister_secondary_bus().
> > call qbus_free().
> >
> > Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> > ---
> >  hw/pci.c |    1 +
> >  1 files changed, 1 insertions(+), 0 deletions(-)
> >
> > diff --git a/hw/pci.c b/hw/pci.c
> > index a7ff566..25634ed 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -298,6 +298,7 @@ static void pci_unregister_secondary_bus(PCIBus *bus)
> >  {
> >      assert(QLIST_EMPTY(&bus->child));
> >      QLIST_REMOVE(bus, sibling);
> > +    qbus_free(&bus->qbus);
> >  }
> >  
> >  int pci_bus_num(PCIBus *s)
> 
> Buses are normally freed automatically along with the device providing
> them, in qdev_free().  Why is that not sufficient for pci-bridge?
> 

Right. I withdraw this patch.
Sorry for noise.

Patch

diff --git a/hw/pci.c b/hw/pci.c
index a7ff566..25634ed 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -298,6 +298,7 @@  static void pci_unregister_secondary_bus(PCIBus *bus)
 {
     assert(QLIST_EMPTY(&bus->child));
     QLIST_REMOVE(bus, sibling);
+    qbus_free(&bus->qbus);
 }
 
 int pci_bus_num(PCIBus *s)