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> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									288d332202
								
							
						
					
					
						commit
						9f6b2f1c64
					
				| 
						 | 
					@ -219,6 +219,12 @@ static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void pci_bridge_region_cleanup(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);
 | 
					    g_free(w);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue