Message ID | 1408549805-20956-1-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On Wed, Aug 20, 2014 at 05:50:05PM +0200, Paolo Bonzini wrote: > The regions are destroyed and recreated on configuration space accesses. > We need to destroy them before the containing PCIBridgeWindows object > is freed. > > Reported-by: Gonglei <arei.gonglei@huawei.com> > Reported-by: Knut Omang <knut.omang@oracle.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Regression in 2.1? Cc stable? > --- > hw/pci/pci_bridge.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c > index 1307265..40c97b1 100644 > --- a/hw/pci/pci_bridge.c > +++ b/hw/pci/pci_bridge.c > @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w) > > static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) > { > + object_unparent(OBJECT(&w->alias_io)); > + object_unparent(OBJECT(&w->alias_mem)); > + object_unparent(OBJECT(&w->alias_pref_mem)); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); > g_free(w); > } > > -- > 1.8.3.1
On Wed, Aug 20, 2014 at 05:50:05PM +0200, Paolo Bonzini wrote: > The regions are destroyed and recreated on configuration space accesses. > We need to destroy them before the containing PCIBridgeWindows object > is freed. > > Reported-by: Gonglei <arei.gonglei@huawei.com> > Reported-by: Knut Omang <knut.omang@oracle.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Applied, thanks! > --- > hw/pci/pci_bridge.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c > index 1307265..40c97b1 100644 > --- a/hw/pci/pci_bridge.c > +++ b/hw/pci/pci_bridge.c > @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w) > > static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) > { > + object_unparent(OBJECT(&w->alias_io)); > + object_unparent(OBJECT(&w->alias_mem)); > + object_unparent(OBJECT(&w->alias_pref_mem)); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); > g_free(w); > } > > -- > 1.8.3.1
> -----Original Message----- > From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo > Bonzini > Sent: Wednesday, August 20, 2014 11:50 PM > To: qemu-devel@nongnu.org > Cc: peter.maydell@linaro.org; Gonglei (Arei); knut.omang@oracle.com; > mst@redhat.com > Subject: [PATCH] pci_bridge: manually destroy memory regions within > PCIBridgeWindows > > The regions are destroyed and recreated on configuration space accesses. > We need to destroy them before the containing PCIBridgeWindows object > is freed. > > Reported-by: Gonglei <arei.gonglei@huawei.com> > Reported-by: Knut Omang <knut.omang@oracle.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/pci/pci_bridge.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c > index 1307265..40c97b1 100644 > --- a/hw/pci/pci_bridge.c > +++ b/hw/pci/pci_bridge.c > @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, > PCIBridgeWindows *w) > > static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) > { > + object_unparent(OBJECT(&w->alias_io)); > + object_unparent(OBJECT(&w->alias_mem)); > + object_unparent(OBJECT(&w->alias_pref_mem)); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); > g_free(w); > } > > -- > 1.8.3.1 Tested-by: Gonglei <arei.gonglei@huawei.com> Best regards, -Gonglei
Il 20/08/2014 21:17, Michael S. Tsirkin ha scritto: > On Wed, Aug 20, 2014 at 05:50:05PM +0200, Paolo Bonzini wrote: >> The regions are destroyed and recreated on configuration space accesses. >> We need to destroy them before the containing PCIBridgeWindows object >> is freed. >> >> Reported-by: Gonglei <arei.gonglei@huawei.com> >> Reported-by: Knut Omang <knut.omang@oracle.com> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > > > Regression in 2.1? Cc stable? > >> --- >> hw/pci/pci_bridge.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c >> index 1307265..40c97b1 100644 >> --- a/hw/pci/pci_bridge.c >> +++ b/hw/pci/pci_bridge.c >> @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w) >> >> static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) >> { >> + object_unparent(OBJECT(&w->alias_io)); >> + object_unparent(OBJECT(&w->alias_mem)); >> + object_unparent(OBJECT(&w->alias_pref_mem)); >> + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); >> + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); >> + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); >> g_free(w); >> } >> >> -- >> 1.8.3.1 No, regression from yesterday. Paolo
On Wed, Aug 20, 2014 at 05:50:05PM +0200, Paolo Bonzini wrote: > The regions are destroyed and recreated on configuration space accesses. > We need to destroy them before the containing PCIBridgeWindows object > is freed. > > Reported-by: Gonglei <arei.gonglei@huawei.com> > Reported-by: Knut Omang <knut.omang@oracle.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Applied in my tree. > --- > hw/pci/pci_bridge.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c > index 1307265..40c97b1 100644 > --- a/hw/pci/pci_bridge.c > +++ b/hw/pci/pci_bridge.c > @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w) > > static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) > { > + object_unparent(OBJECT(&w->alias_io)); > + object_unparent(OBJECT(&w->alias_mem)); > + object_unparent(OBJECT(&w->alias_pref_mem)); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); > + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); > g_free(w); > } > > -- > 1.8.3.1
diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c index 1307265..40c97b1 100644 --- a/hw/pci/pci_bridge.c +++ b/hw/pci/pci_bridge.c @@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w) static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w) { + object_unparent(OBJECT(&w->alias_io)); + object_unparent(OBJECT(&w->alias_mem)); + object_unparent(OBJECT(&w->alias_pref_mem)); + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_LO])); + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_IO_HI])); + object_unparent(OBJECT(&w->alias_vga[QEMU_PCI_VGA_MEM])); g_free(w); }
The regions are destroyed and recreated on configuration space accesses. We need to destroy them before the containing PCIBridgeWindows object is freed. Reported-by: Gonglei <arei.gonglei@huawei.com> Reported-by: Knut Omang <knut.omang@oracle.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/pci/pci_bridge.c | 6 ++++++ 1 file changed, 6 insertions(+)