From nobody Mon Feb 9 22:04:21 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1497923885466257.1429675159769; Mon, 19 Jun 2017 18:58:05 -0700 (PDT) Received: from localhost ([::1]:45192 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dN8Qe-0000Xz-7a for importer@patchew.org; Mon, 19 Jun 2017 21:58:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60127) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dN8Mb-0005pW-JD for qemu-devel@nongnu.org; Mon, 19 Jun 2017 21:53:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dN8MX-0004Be-0y for qemu-devel@nongnu.org; Mon, 19 Jun 2017 21:53:53 -0400 Received: from ozlabs.org ([103.22.144.67]:39071) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dN8MW-0004AU-CL; Mon, 19 Jun 2017 21:53:48 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3ws9qY4vrBz9s75; Tue, 20 Jun 2017 11:53:45 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1497923625; bh=2NrAhORpYuhzKw2A6jhDSAIdCt0QcAYPDY87C/E3MqM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aPv48rCiH9S4YHcPC4R8cciwB2gsJqlbcg2HzUgMb+Ac01WqZ1ALIzmZe9LQSjJZH 5eRLD+5fctg5bef8oX9k1MT672Q1ckxI6i4n5Ury+ssvejdBZgg8Q+JWgu4yfziR5e UBR2jQjPdYQtD3qg6Dn+z91ffyThzPhCGK4ATfa0= From: David Gibson To: mdroth@linux.vnet.ibm.com Date: Tue, 20 Jun 2017 09:53:30 +0800 Message-Id: <20170620015332.13874-4-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170620015332.13874-1-david@gibson.dropbear.id.au> References: <20170620015332.13874-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PATCH 3/5] spapr: Add DRC release method X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sursingh@redhat.com, qemu-devel@nongnu.org, groug@kaod.org, qemu-ppc@nongnu.org, bharata@linux.vnet.ibm.com, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" At the moment, spapr_drc_release() has an ugly switch on the DRC type to call the right, device-specific release function. This cleans it up by doing that via a proper QOM method. It's still arguably an abstraction violation for the DRC code to call into the specific device code, but one mess at a time. Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: Laurent Vivier --- hw/ppc/spapr_drc.c | 22 ++++++---------------- include/hw/ppc/spapr_drc.h | 1 + 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index e5dff16..32e39f2 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -370,22 +370,9 @@ void spapr_drc_attach(sPAPRDRConnector *drc, DeviceSta= te *d, void *fdt, =20 static void spapr_drc_release(sPAPRDRConnector *drc) { - /* Calling release callbacks based on spapr_drc_type(drc). */ - switch (spapr_drc_type(drc)) { - case SPAPR_DR_CONNECTOR_TYPE_CPU: - spapr_core_release(drc->dev); - break; - case SPAPR_DR_CONNECTOR_TYPE_PCI: - spapr_phb_remove_pci_device_cb(drc->dev); - break; - case SPAPR_DR_CONNECTOR_TYPE_LMB: - spapr_lmb_release(drc->dev); - break; - case SPAPR_DR_CONNECTOR_TYPE_PHB: - case SPAPR_DR_CONNECTOR_TYPE_VIO: - default: - g_assert(false); - } + sPAPRDRConnectorClass *drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); + + drck->release(drc->dev); =20 drc->awaiting_release =3D false; g_free(drc->fdt); @@ -629,6 +616,7 @@ static void spapr_drc_cpu_class_init(ObjectClass *k, vo= id *data) drck->typeshift =3D SPAPR_DR_CONNECTOR_TYPE_SHIFT_CPU; drck->typename =3D "CPU"; drck->drc_name_prefix =3D "CPU "; + drck->release =3D spapr_core_release; } =20 static void spapr_drc_pci_class_init(ObjectClass *k, void *data) @@ -638,6 +626,7 @@ static void spapr_drc_pci_class_init(ObjectClass *k, vo= id *data) drck->typeshift =3D SPAPR_DR_CONNECTOR_TYPE_SHIFT_PCI; drck->typename =3D "28"; drck->drc_name_prefix =3D "C"; + drck->release =3D spapr_phb_remove_pci_device_cb; } =20 static void spapr_drc_lmb_class_init(ObjectClass *k, void *data) @@ -647,6 +636,7 @@ static void spapr_drc_lmb_class_init(ObjectClass *k, vo= id *data) drck->typeshift =3D SPAPR_DR_CONNECTOR_TYPE_SHIFT_LMB; drck->typename =3D "MEM"; drck->drc_name_prefix =3D "LMB "; + drck->release =3D spapr_lmb_release; } =20 static const TypeInfo spapr_dr_connector_info =3D { diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h index d9cacb3..6fd84d1 100644 --- a/include/hw/ppc/spapr_drc.h +++ b/include/hw/ppc/spapr_drc.h @@ -217,6 +217,7 @@ typedef struct sPAPRDRConnectorClass { sPAPRDREntitySense (*dr_entity_sense)(sPAPRDRConnector *drc); uint32_t (*isolate)(sPAPRDRConnector *drc); uint32_t (*unisolate)(sPAPRDRConnector *drc); + void (*release)(DeviceState *dev); =20 /* QEMU interfaces for managing hotplug operations */ bool (*release_pending)(sPAPRDRConnector *drc); --=20 2.9.4