From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:33642) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StsL0-0002Ea-DZ for qemu-devel@nongnu.org; Tue, 24 Jul 2012 23:32:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1StsKz-0004mJ-HJ for qemu-devel@nongnu.org; Tue, 24 Jul 2012 23:32:38 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:63227) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StsKz-0004mE-Ag for qemu-devel@nongnu.org; Tue, 24 Jul 2012 23:32:37 -0400 Received: by pbbro12 with SMTP id ro12so658367pbb.4 for ; Tue, 24 Jul 2012 20:32:36 -0700 (PDT) From: Liu Ping Fan Date: Wed, 25 Jul 2012 11:31:10 +0800 Message-Id: <1343187070-27371-6-git-send-email-qemulist@gmail.com> In-Reply-To: <1343187070-27371-1-git-send-email-qemulist@gmail.com> References: <1343187070-27371-1-git-send-email-qemulist@gmail.com> Subject: [Qemu-devel] [PATCH 5/5] e1000: using new interface--unmap to unplug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, Stefan Hajnoczi , Marcelo Tosatti , Avi Kivity , Anthony Liguori , Jan Kiszka From: Liu Ping Fan Signed-off-by: Liu Ping Fan --- hw/e1000.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 4573f13..4c1e141 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1192,6 +1192,18 @@ e1000_cleanup(VLANClientState *nc) s->nic = NULL; } +static void +pci_e1000_unmap(DeviceState *dev) +{ + PCIDevice *p = PCI_DEVICE(dev); + E1000State *d = DO_UPCAST(E1000State, dev, p); + + /* DO NOT FREE anything!until refcnt=0 */ + /* isolate from memory view */ + memory_region_destroy(&d->mmio); + memory_region_destroy(&d->io); +} + static int pci_e1000_uninit(PCIDevice *dev) { @@ -1199,8 +1211,6 @@ pci_e1000_uninit(PCIDevice *dev) qemu_del_timer(d->autoneg_timer); qemu_free_timer(d->autoneg_timer); - memory_region_destroy(&d->mmio); - memory_region_destroy(&d->io); qemu_del_vlan_client(&d->nic->nc); return 0; } @@ -1283,6 +1293,7 @@ static void e1000_class_init(ObjectClass *klass, void *data) k->class_id = PCI_CLASS_NETWORK_ETHERNET; dc->desc = "Intel Gigabit Ethernet"; dc->reset = qdev_e1000_reset; + dc->unmap = pci_e1000_unmap; dc->vmsd = &vmstate_e1000; dc->props = e1000_properties; } -- 1.7.4.4