From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: [PATCH 1/6] pci-assign: Fix device removal Date: Wed, 16 Nov 2011 13:45:32 -0700 Message-ID: <20111116204523.23506.90453.stgit@bling.home> References: <20111116203834.23506.21535.stgit@bling.home> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: jan.kiszka@siemens.com, alex.williamson@redhat.com, yongjie.ren@intel.com To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:12703 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752021Ab1KPUpf (ORCPT ); Wed, 16 Nov 2011 15:45:35 -0500 In-Reply-To: <20111116203834.23506.21535.stgit@bling.home> Sender: kvm-owner@vger.kernel.org List-ID: We're destroying the memory container before we remove the subregions it holds. This fixes: https://bugs.launchpad.net/qemu/+bug/875723 Signed-off-by: Alex Williamson --- hw/device-assignment.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 11efd16..cde0681 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -677,10 +677,23 @@ static void free_assigned_device(AssignedDevice *dev) kvm_remove_ioport_region(region->u.r_baseport, region->r_size, dev->dev.qdev.hotplugged); } + memory_region_del_subregion(®ion->container, + ®ion->real_iomem); + memory_region_destroy(®ion->real_iomem); + memory_region_destroy(®ion->container); } else if (pci_region->type & IORESOURCE_MEM) { if (region->u.r_virtbase) { memory_region_del_subregion(®ion->container, ®ion->real_iomem); + + /* Remove MSI-X table subregion */ + if (pci_region->base_addr <= dev->msix_table_addr && + pci_region->base_addr + pci_region->size > + dev->msix_table_addr) { + memory_region_del_subregion(®ion->container, + &dev->mmio); + } + memory_region_destroy(®ion->real_iomem); memory_region_destroy(®ion->container); if (munmap(region->u.r_virtbase,