From patchwork Tue Jun 4 18:52:02 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 248813 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 67F042C0040 for ; Wed, 5 Jun 2013 04:57:20 +1000 (EST) Received: from localhost ([::1]:51976 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UjwQ2-000572-JY for incoming@patchwork.ozlabs.org; Tue, 04 Jun 2013 14:57:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53243) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UjwLu-00077D-WF for qemu-devel@nongnu.org; Tue, 04 Jun 2013 14:53:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UjwLu-0007Jg-2m for qemu-devel@nongnu.org; Tue, 04 Jun 2013 14:53:02 -0400 Received: from mail-we0-x234.google.com ([2a00:1450:400c:c03::234]:42267) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UjwLt-0007Ih-RF for qemu-devel@nongnu.org; Tue, 04 Jun 2013 14:53:01 -0400 Received: by mail-we0-f180.google.com with SMTP id w56so539777wes.25 for ; Tue, 04 Jun 2013 11:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=ajVblQ0B4b+ZcfPfk0j0CUzCgDRzgGU0mgoUXPig2hg=; b=jLAWKbg8ciRvY2VYApaRrLUQQKoVSmhyz9TO16ej+gOg5t5qLyNPJcsU4LF6WrafLZ HCRA+fUtf6tsIqtEYmOMBdONoCfDcewEAe6a8iMS81GNReUFriEV7tq0PVZZbzTvJ3kF FGHJK9xCZcGKjdjKXU5Y1e6/3zFLoFn0fFYUERwKvM3BVcU0l6N8LWaJEcC14mAkfdAK q/Lx0XIj0dzfekgvss6sLeE4TJM8vtY+SkjabgrMjUApAaPkH7+KOajVUTtbFxQYofL2 XyjqrOqhmSKki4WMQQyNQp6wnIuLn00w3S6izxirTxiJExOAq8Ocx3Ek02yPgbe3D4J0 Hmvw== X-Received: by 10.194.249.231 with SMTP id yx7mr14692722wjc.13.1370371981048; Tue, 04 Jun 2013 11:53:01 -0700 (PDT) Received: from playground.lan (net-37-116-217-184.cust.dsl.vodafone.it. [37.116.217.184]) by mx.google.com with ESMTPSA id fx7sm4590484wic.11.2013.06.04.11.52.59 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 04 Jun 2013 11:53:00 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 4 Jun 2013 20:52:02 +0200 Message-Id: <1370371954-8479-8-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1370371954-8479-1-git-send-email-pbonzini@redhat.com> References: <1370371954-8479-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c03::234 Cc: mst@redhat.com Subject: [Qemu-devel] [PATCH 07/39] serial: split exit and instance_finalize X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Character devices are still detached at "unrealize" time. Signed-off-by: Paolo Bonzini --- hw/char/serial-pci.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c index 6b6106b..8cdec94 100644 --- a/hw/char/serial-pci.c +++ b/hw/char/serial-pci.c @@ -118,6 +118,14 @@ static void serial_pci_exit(PCIDevice *dev) SerialState *s = &pci->state; serial_exit_core(s); +} + +static void serial_pci_instance_finalize(Object *obj) +{ + PCIDevice *dev = PCI_DEVICE(obj); + PCISerialState *pci = DO_UPCAST(PCISerialState, dev, dev); + SerialState *s = &pci->state; + memory_region_destroy(&s->io); } @@ -130,9 +138,22 @@ static void multi_serial_pci_exit(PCIDevice *dev) for (i = 0; i < pci->ports; i++) { s = pci->state + i; serial_exit_core(s); + } +} + +static void multi_serial_pci_instance_finalize(Object *obj) +{ + PCIDevice *dev = PCI_DEVICE(obj); + PCIMultiSerialState *pci = DO_UPCAST(PCIMultiSerialState, dev, dev); + SerialState *s; + int i; + + for (i = 0; i < pci->ports; i++) { + s = pci->state + i; memory_region_destroy(&s->io); g_free(pci->name[i]); } + memory_region_destroy(&pci->iobar); qemu_free_irqs(pci->irqs); } @@ -227,6 +248,7 @@ static const TypeInfo serial_pci_info = { .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(PCISerialState), .class_init = serial_pci_class_initfn, + .instance_finalize = serial_pci_instance_finalize, }; static const TypeInfo multi_2x_serial_pci_info = { @@ -234,6 +256,7 @@ static const TypeInfo multi_2x_serial_pci_info = { .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(PCIMultiSerialState), .class_init = multi_2x_serial_pci_class_initfn, + .instance_finalize = multi_serial_pci_instance_finalize, }; static const TypeInfo multi_4x_serial_pci_info = { @@ -241,6 +264,7 @@ static const TypeInfo multi_4x_serial_pci_info = { .parent = TYPE_PCI_DEVICE, .instance_size = sizeof(PCIMultiSerialState), .class_init = multi_4x_serial_pci_class_initfn, + .instance_finalize = multi_serial_pci_instance_finalize, }; static void serial_pci_register_types(void)