From patchwork Tue Sep 22 09:29:15 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 34052 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B6B2BB7B7F for ; Tue, 22 Sep 2009 19:43:05 +1000 (EST) Received: from localhost ([127.0.0.1]:53003 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mq1tm-0006Pt-1Z for incoming@patchwork.ozlabs.org; Tue, 22 Sep 2009 05:43:02 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mq1gv-0003kP-9X for qemu-devel@nongnu.org; Tue, 22 Sep 2009 05:29:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mq1gp-0003gh-Ec for qemu-devel@nongnu.org; Tue, 22 Sep 2009 05:29:43 -0400 Received: from [199.232.76.173] (port=34982 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mq1go-0003gZ-UE for qemu-devel@nongnu.org; Tue, 22 Sep 2009 05:29:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57178) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Mq1go-00089J-AI for qemu-devel@nongnu.org; Tue, 22 Sep 2009 05:29:38 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n8M9Tblp022179 for ; Tue, 22 Sep 2009 05:29:37 -0400 Received: from zweiblum.home.kraxel.org (vpn1-4-80.ams2.redhat.com [10.36.4.80]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with SMTP id n8M9TZ82010082; Tue, 22 Sep 2009 05:29:36 -0400 Received: by zweiblum.home.kraxel.org (Postfix, from userid 500) id A0136700E7; Tue, 22 Sep 2009 11:29:28 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Tue, 22 Sep 2009 11:29:15 +0200 Message-Id: <1253611767-6483-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1253611767-6483-1-git-send-email-kraxel@redhat.com> References: <1253611767-6483-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Gerd Hoffmann Subject: [Qemu-devel] [PATCH 01/13] allow qdev busses allocations be inplace X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org A bus usually is instanciated by the parent device. The accociated bus state can usually be embeeded into the parent device state struct, there is no need for separate allocation and pointer indirection. This patch adds a non-allocating qbus_create variant. We keep track of whenever qdev allocated the struct or not. Will be needed later in this patch series when we'll fix bus unplugging. Signed-off-by: Gerd Hoffmann --- hw/qdev.c | 15 ++++++++++++--- hw/qdev.h | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index 43b1beb..43372c1 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -502,13 +502,12 @@ static BusState *qbus_find(const char *path) } } -BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name) +void qbus_create_inplace(BusState *bus, BusInfo *info, + DeviceState *parent, const char *name) { - BusState *bus; char *buf; int i,len; - bus = qemu_mallocz(info->size); bus->info = info; bus->parent = parent; @@ -537,6 +536,16 @@ BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name) QLIST_INSERT_HEAD(&parent->child_bus, bus, sibling); parent->num_child_bus++; } + +} + +BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name) +{ + BusState *bus; + + bus = qemu_mallocz(info->size); + bus->qdev_allocated = 1; + qbus_create_inplace(bus, info, parent, name); return bus; } diff --git a/hw/qdev.h b/hw/qdev.h index 623ded5..ccc45b9 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -47,6 +47,7 @@ struct BusState { DeviceState *parent; BusInfo *info; const char *name; + int qdev_allocated; QLIST_HEAD(, DeviceState) children; QLIST_ENTRY(BusState) sibling; }; @@ -144,6 +145,8 @@ BusState *qdev_get_parent_bus(DeviceState *dev); /*** BUS API. ***/ +void qbus_create_inplace(BusState *bus, BusInfo *info, + DeviceState *parent, const char *name); BusState *qbus_create(BusInfo *info, DeviceState *parent, const char *name); #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev)