From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985451; cv=none; d=zoho.com; s=zohoarc; b=JM2ns1Z1roJxyZ+8KXBxwTGkSWJuuX4msb6g9P/vIOPvj1UhY2LmYgjkTobYxvS15JyEk2dUxA4DK0GPcTy3pmycmrS9kN1tcQHHxkxJytg7nquTUNMqn2GuJx9afwEtQqF2XW6/nqoQJTcWXn06xCwBU+PPSNXlnIpMgwG6D2c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985451; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=5/KpWrc4raNpdeppW3smWgOgWB4NDajlBxb3v9hFro0=; b=DwxEShRvfHf2SViApL+OgLQBE7lqGXof4LKCeJ1EUANQR+s+rklcPUDBZ+H2oYFZ3U+iVxnuAKpewOyarZbIWimr1X67l5BDbAFl1WvwnXy5y3D0HWT7wWxxRbW0mzOKNVm6kvqil/7O1cFukyPJlpBejuksK3Cnff+3jzasUsM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985451211168.17051742631725; Tue, 1 Oct 2019 20:04:11 -0700 (PDT) Received: from localhost ([::1]:50904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUvv-0003kS-Pv for importer@patchew.org; Tue, 01 Oct 2019 23:04:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59565) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkg-0001Zt-IB for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkf-0002m7-5Y for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:30 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:51771) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkb-0002bz-NH; Tue, 01 Oct 2019 22:52:28 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf640t0z9sPq; Wed, 2 Oct 2019 12:52:14 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984734; bh=nQZ6RYMQSnBaHohmcBBdc5v6CdjWwiWcXseE3ZORP8M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I070B1qz61GR9pEl9Ld5GbyiDmRsIiFZbYhj35cZeujy2jYPhI+vp4kNU5sm4jGWh V9pc7EKJfoWAMkuRt7JNi6LwxDbpZkXzipSEA3dRzVDf2K57pVEu2b4xYZrFghIsJd YjEbP2YmwBbDO6Qgwpr+/TuNQnmBlI9zf9p+QJZ0= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 01/34] xics: Minor fixes for XICSFabric interface Date: Wed, 2 Oct 2019 12:51:35 +1000 Message-Id: <20191002025208.3487-2-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Interface instances should never be directly dereferenced. So, the common practice is to make them incomplete types to make sure no-one does that. XICSFrabric, however, had a dummy type which is less safe. We were also using OBJECT_CHECK() where we should have been using INTERFACE_CHECK(). Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- include/hw/ppc/xics.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 64a2c8862a..faa33ae943 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -147,13 +147,9 @@ struct ICSIRQState { uint8_t flags; }; =20 -struct XICSFabric { - Object parent; -}; - #define TYPE_XICS_FABRIC "xics-fabric" #define XICS_FABRIC(obj) \ - OBJECT_CHECK(XICSFabric, (obj), TYPE_XICS_FABRIC) + INTERFACE_CHECK(XICSFabric, (obj), TYPE_XICS_FABRIC) #define XICS_FABRIC_CLASS(klass) \ OBJECT_CLASS_CHECK(XICSFabricClass, (klass), TYPE_XICS_FABRIC) #define XICS_FABRIC_GET_CLASS(obj) \ --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569984955; cv=none; d=zoho.com; s=zohoarc; b=FHRCt5atcdTwf+K1PgGi82fJ/xghAGKUjkzzV7ttd3tyrhe7bTOqWZEPTwPKxH+FCj0Ze4MUzNglFy7OJaryoxcdHMquqHVGHU3BEmB/i7cmgFfj/rRUq074TMst5N29X9bZyn2/pdyoIkKrzTDcbT4LP1NTLqdk9u0OZ2JHOzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569984955; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ahMpnerJP79YUS3fH2LVfDAVxUVAs1mmKy8zMOUbOfw=; b=EQ+YbXVVnir2snmy/q6tubQdO9NFRpz+sTFAowI/M+OwGEiWFoFOTvMNQc+Is1nSK8oF9uAsM2xEklat1Cg4qHTKKQs2h3dSOmkqyiPSE+wkUd3Lu4JRNT67+h8VSMJzaUVAh86vJrJAIrWKo0LJpcK/IYLZQ8HvHcYkN9lwQTc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569984954076363.82549661541964; Tue, 1 Oct 2019 19:55:54 -0700 (PDT) Received: from localhost ([::1]:50832 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUnq-0004DN-H6 for importer@patchew.org; Tue, 01 Oct 2019 22:55:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59577) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkg-0001Zx-Lu for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkf-0002m5-5g for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:30 -0400 Received: from ozlabs.org ([203.11.71.1]:50325) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkb-0002bl-NI; Tue, 01 Oct 2019 22:52:28 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf639bBz9sCJ; Wed, 2 Oct 2019 12:52:14 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984734; bh=lUi1h7mkfdblyuP4UD186bZ+KRfIT8I60hvDArNEODU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EivDPiWwQRRFPbaEzAdhUmsDmkFGxYP2CvmL3G1WUFPzC3bqpwcHP/KCbB1RIshPx ZbrDwxW/YNw63q+hWad8Zwbm6qgoXGufB+J2URw73k1/ht10DJaHFQeN38cAm2KhjH OZJ004CMTQKwNzawV9tE8Ltj9UGpmwFcr4ievq1E= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 02/34] xics: Eliminate 'reject', 'resend' and 'eoi' class hooks Date: Wed, 2 Oct 2019 12:51:36 +1000 Message-Id: <20191002025208.3487-3-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Currently ics_reject(), ics_resend() and ics_eoi() indirect through class methods. But there's only one implementation of each method, the one in TYPE_ICS_SIMPLE. TYPE_ICS_BASE has no implementation, but it's never instantiated, and has no other subtypes. So clean up by eliminating the method and just having ics_reject(), ics_resend() and ics_eoi() contain the logic directly. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/trace-events | 4 ++-- hw/intc/xics.c | 54 +++++++++++-------------------------------- include/hw/ppc/xics.h | 4 ---- 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/hw/intc/trace-events b/hw/intc/trace-events index 719f46b516..fdc716c2cc 100644 --- a/hw/intc/trace-events +++ b/hw/intc/trace-events @@ -70,8 +70,8 @@ xics_ics_simple_set_irq_msi(int srcno, int nr) "set_irq_m= si: srcno %d [irq 0x%x] xics_masked_pending(void) "set_irq_msi: masked pending" xics_ics_simple_set_irq_lsi(int srcno, int nr) "set_irq_lsi: srcno %d [irq= 0x%x]" xics_ics_simple_write_xive(int nr, int srcno, int server, uint8_t priority= ) "ics_write_xive: irq 0x%x [src %d] server 0x%x prio 0x%x" -xics_ics_simple_reject(int nr, int srcno) "reject irq 0x%x [src %d]" -xics_ics_simple_eoi(int nr) "ics_eoi: irq 0x%x" +xics_ics_reject(int nr, int srcno) "reject irq 0x%x [src %d]" +xics_ics_eoi(int nr) "ics_eoi: irq 0x%x" =20 # s390_flic_kvm.c flic_create_device(int err) "flic: create device failed %d" diff --git a/hw/intc/xics.c b/hw/intc/xics.c index b2fca2975c..93139b0189 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -98,32 +98,8 @@ void ics_pic_print_info(ICSState *ics, Monitor *mon) #define XISR(icp) (((icp)->xirr) & XISR_MASK) #define CPPR(icp) (((icp)->xirr) >> 24) =20 -static void ics_reject(ICSState *ics, uint32_t nr) -{ - ICSStateClass *k =3D ICS_BASE_GET_CLASS(ics); - - if (k->reject) { - k->reject(ics, nr); - } -} - -void ics_resend(ICSState *ics) -{ - ICSStateClass *k =3D ICS_BASE_GET_CLASS(ics); - - if (k->resend) { - k->resend(ics); - } -} - -static void ics_eoi(ICSState *ics, int nr) -{ - ICSStateClass *k =3D ICS_BASE_GET_CLASS(ics); - - if (k->eoi) { - k->eoi(ics, nr); - } -} +static void ics_reject(ICSState *ics, uint32_t nr); +static void ics_eoi(ICSState *ics, uint32_t nr); =20 static void icp_check_ipi(ICPState *icp) { @@ -427,7 +403,7 @@ Object *icp_create(Object *cpu, const char *type, XICSF= abric *xi, Error **errp) /* * ICS: Source layer */ -static void ics_simple_resend_msi(ICSState *ics, int srcno) +static void ics_resend_msi(ICSState *ics, int srcno) { ICSIRQState *irq =3D ics->irqs + srcno; =20 @@ -440,7 +416,7 @@ static void ics_simple_resend_msi(ICSState *ics, int sr= cno) } } =20 -static void ics_simple_resend_lsi(ICSState *ics, int srcno) +static void ics_resend_lsi(ICSState *ics, int srcno) { ICSIRQState *irq =3D ics->irqs + srcno; =20 @@ -478,7 +454,7 @@ static void ics_simple_set_irq_lsi(ICSState *ics, int s= rcno, int val) } else { irq->status &=3D ~XICS_STATUS_ASSERTED; } - ics_simple_resend_lsi(ics, srcno); + ics_resend_lsi(ics, srcno); } =20 void ics_simple_set_irq(void *opaque, int srcno, int val) @@ -512,7 +488,7 @@ static void ics_simple_write_xive_msi(ICSState *ics, in= t srcno) =20 static void ics_simple_write_xive_lsi(ICSState *ics, int srcno) { - ics_simple_resend_lsi(ics, srcno); + ics_resend_lsi(ics, srcno); } =20 void ics_simple_write_xive(ICSState *ics, int srcno, int server, @@ -534,11 +510,11 @@ void ics_simple_write_xive(ICSState *ics, int srcno, = int server, } } =20 -static void ics_simple_reject(ICSState *ics, uint32_t nr) +static void ics_reject(ICSState *ics, uint32_t nr) { ICSIRQState *irq =3D ics->irqs + nr - ics->offset; =20 - trace_xics_ics_simple_reject(nr, nr - ics->offset); + trace_xics_ics_reject(nr, nr - ics->offset); if (irq->flags & XICS_FLAGS_IRQ_MSI) { irq->status |=3D XICS_STATUS_REJECTED; } else if (irq->flags & XICS_FLAGS_IRQ_LSI) { @@ -546,26 +522,26 @@ static void ics_simple_reject(ICSState *ics, uint32_t= nr) } } =20 -static void ics_simple_resend(ICSState *ics) +void ics_resend(ICSState *ics) { int i; =20 for (i =3D 0; i < ics->nr_irqs; i++) { /* FIXME: filter by server#? */ if (ics->irqs[i].flags & XICS_FLAGS_IRQ_LSI) { - ics_simple_resend_lsi(ics, i); + ics_resend_lsi(ics, i); } else { - ics_simple_resend_msi(ics, i); + ics_resend_msi(ics, i); } } } =20 -static void ics_simple_eoi(ICSState *ics, uint32_t nr) +static void ics_eoi(ICSState *ics, uint32_t nr) { int srcno =3D nr - ics->offset; ICSIRQState *irq =3D ics->irqs + srcno; =20 - trace_xics_ics_simple_eoi(nr); + trace_xics_ics_eoi(nr); =20 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { irq->status &=3D ~XICS_STATUS_SENT; @@ -617,10 +593,6 @@ static void ics_simple_class_init(ObjectClass *klass, = void *data) &isc->parent_realize); device_class_set_parent_reset(dc, ics_simple_reset, &isc->parent_reset); - - isc->reject =3D ics_simple_reject; - isc->resend =3D ics_simple_resend; - isc->eoi =3D ics_simple_eoi; } =20 static const TypeInfo ics_simple_info =3D { diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index faa33ae943..ecca17695d 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -106,10 +106,6 @@ struct ICSStateClass { =20 DeviceRealize parent_realize; DeviceReset parent_reset; - - void (*reject)(ICSState *s, uint32_t irq); - void (*resend)(ICSState *s); - void (*eoi)(ICSState *s, uint32_t irq); }; =20 struct ICSState { --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985168; cv=none; d=zoho.com; s=zohoarc; b=XxkZDNUeqQQryUFLmjlHfXx5fVqu7xHUt8RjHhG0jyIUhnwUZYF6Jm3EVjHRs31H4dVJ3z7zSCdMHlRFEywBZf053eZnOcuS+fkkJkNobV+jwIxXHt1hlQZo8NMmw8JEE01mzwqsx0WAIDfzur9F9dwNw9iIRjsas3S0OG8CcgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985168; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=uPeDhkgSqWu38tOd5W/927J0WDjsJLeLmv1CjrXKzjs=; b=FRwc7Wj8HpQFGv5eWDW4yoH2FQPZOCzSPJi6FpTxPEjFCNyug9kcvIQR0QEkFFwiD0NBxUwHluknT2QK8RjMWDR7UpfRteaOuJlf8b74BJrCgJEEBBvyb3cJ6rf59QODRIxEWBxp75DBplTlIQR7D13HaISH6NwB2jip0ygaPI0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998516809567.66527322013485; Tue, 1 Oct 2019 19:59:28 -0700 (PDT) Received: from localhost ([::1]:50862 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUrO-0008RE-9H for importer@patchew.org; Tue, 01 Oct 2019 22:59:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59582) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkg-0001a0-U4 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkf-0002lu-5l for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:30 -0400 Received: from ozlabs.org ([203.11.71.1]:45425) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkb-0002an-NE; Tue, 01 Oct 2019 22:52:28 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf65JtZz9sPv; Wed, 2 Oct 2019 12:52:14 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984734; bh=dy0eCMf0ExtyBpk5jkb+cwA1hBC4dof112IhP+OCoBg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KInguydRFkfgGB/be3Rzngk3G59G2c+ccUeL/GA/Ac+AGGVMKzzBgB54mW+Qcsy9S OzI0UP5ok09rRo8v68Amg5ynCiP+bW+QXW+Rel1aDxpE4w7MVk1Gr8NEgWOKpHKGQY buEFqtOYx0neeDkXQxhGqWFQo52HDvnNoFBNiqO8= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 03/34] xics: Rename misleading ics_simple_*() functions Date: Wed, 2 Oct 2019 12:51:37 +1000 Message-Id: <20191002025208.3487-4-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" There are a number of ics_simple_*() functions that aren't actually specific to TYPE_XICS_SIMPLE at all, and are equally valid on TYPE_XICS_BASE. Rename them to ics_*() accordingly. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/trace-events | 6 +++--- hw/intc/xics.c | 29 ++++++++++++++--------------- hw/intc/xics_spapr.c | 12 ++++++------ hw/ppc/pnv_psi.c | 4 ++-- hw/ppc/spapr_irq.c | 2 +- include/hw/ppc/xics.h | 6 +++--- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/hw/intc/trace-events b/hw/intc/trace-events index fdc716c2cc..527c3f76ca 100644 --- a/hw/intc/trace-events +++ b/hw/intc/trace-events @@ -66,10 +66,10 @@ xics_icp_accept(uint32_t old_xirr, uint32_t new_xirr) "= icp_accept: XIRR 0x%"PRIx xics_icp_eoi(int server, uint32_t xirr, uint32_t new_xirr) "icp_eoi: serve= r %d given XIRR 0x%"PRIx32" new XIRR 0x%"PRIx32 xics_icp_irq(int server, int nr, uint8_t priority) "cpu %d trying to deliv= er irq 0x%"PRIx32" priority 0x%x" xics_icp_raise(uint32_t xirr, uint8_t pending_priority) "raising IRQ new X= IRR=3D0x%x new pending priority=3D0x%x" -xics_ics_simple_set_irq_msi(int srcno, int nr) "set_irq_msi: srcno %d [irq= 0x%x]" +xics_ics_set_irq_msi(int srcno, int nr) "set_irq_msi: srcno %d [irq 0x%x]" xics_masked_pending(void) "set_irq_msi: masked pending" -xics_ics_simple_set_irq_lsi(int srcno, int nr) "set_irq_lsi: srcno %d [irq= 0x%x]" -xics_ics_simple_write_xive(int nr, int srcno, int server, uint8_t priority= ) "ics_write_xive: irq 0x%x [src %d] server 0x%x prio 0x%x" +xics_ics_set_irq_lsi(int srcno, int nr) "set_irq_lsi: srcno %d [irq 0x%x]" +xics_ics_write_xive(int nr, int srcno, int server, uint8_t priority) "ics_= write_xive: irq 0x%x [src %d] server 0x%x prio 0x%x" xics_ics_reject(int nr, int srcno) "reject irq 0x%x [src %d]" xics_ics_eoi(int nr) "ics_eoi: irq 0x%x" =20 diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 93139b0189..310dc72b46 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -428,11 +428,11 @@ static void ics_resend_lsi(ICSState *ics, int srcno) } } =20 -static void ics_simple_set_irq_msi(ICSState *ics, int srcno, int val) +static void ics_set_irq_msi(ICSState *ics, int srcno, int val) { ICSIRQState *irq =3D ics->irqs + srcno; =20 - trace_xics_ics_simple_set_irq_msi(srcno, srcno + ics->offset); + trace_xics_ics_set_irq_msi(srcno, srcno + ics->offset); =20 if (val) { if (irq->priority =3D=3D 0xff) { @@ -444,11 +444,11 @@ static void ics_simple_set_irq_msi(ICSState *ics, int= srcno, int val) } } =20 -static void ics_simple_set_irq_lsi(ICSState *ics, int srcno, int val) +static void ics_set_irq_lsi(ICSState *ics, int srcno, int val) { ICSIRQState *irq =3D ics->irqs + srcno; =20 - trace_xics_ics_simple_set_irq_lsi(srcno, srcno + ics->offset); + trace_xics_ics_set_irq_lsi(srcno, srcno + ics->offset); if (val) { irq->status |=3D XICS_STATUS_ASSERTED; } else { @@ -457,7 +457,7 @@ static void ics_simple_set_irq_lsi(ICSState *ics, int s= rcno, int val) ics_resend_lsi(ics, srcno); } =20 -void ics_simple_set_irq(void *opaque, int srcno, int val) +void ics_set_irq(void *opaque, int srcno, int val) { ICSState *ics =3D (ICSState *)opaque; =20 @@ -467,13 +467,13 @@ void ics_simple_set_irq(void *opaque, int srcno, int = val) } =20 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { - ics_simple_set_irq_lsi(ics, srcno, val); + ics_set_irq_lsi(ics, srcno, val); } else { - ics_simple_set_irq_msi(ics, srcno, val); + ics_set_irq_msi(ics, srcno, val); } } =20 -static void ics_simple_write_xive_msi(ICSState *ics, int srcno) +static void ics_write_xive_msi(ICSState *ics, int srcno) { ICSIRQState *irq =3D ics->irqs + srcno; =20 @@ -486,13 +486,13 @@ static void ics_simple_write_xive_msi(ICSState *ics, = int srcno) icp_irq(ics, irq->server, srcno + ics->offset, irq->priority); } =20 -static void ics_simple_write_xive_lsi(ICSState *ics, int srcno) +static void ics_write_xive_lsi(ICSState *ics, int srcno) { ics_resend_lsi(ics, srcno); } =20 -void ics_simple_write_xive(ICSState *ics, int srcno, int server, - uint8_t priority, uint8_t saved_priority) +void ics_write_xive(ICSState *ics, int srcno, int server, + uint8_t priority, uint8_t saved_priority) { ICSIRQState *irq =3D ics->irqs + srcno; =20 @@ -500,13 +500,12 @@ void ics_simple_write_xive(ICSState *ics, int srcno, = int server, irq->priority =3D priority; irq->saved_priority =3D saved_priority; =20 - trace_xics_ics_simple_write_xive(ics->offset + srcno, srcno, server, - priority); + trace_xics_ics_write_xive(ics->offset + srcno, srcno, server, priority= ); =20 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { - ics_simple_write_xive_lsi(ics, srcno); + ics_write_xive_lsi(ics, srcno); } else { - ics_simple_write_xive_msi(ics, srcno); + ics_write_xive_msi(ics, srcno); } } =20 diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 6577be0d92..3e9444813a 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -179,7 +179,7 @@ static void rtas_set_xive(PowerPCCPU *cpu, SpaprMachine= State *spapr, } =20 srcno =3D nr - ics->offset; - ics_simple_write_xive(ics, srcno, server, priority, priority); + ics_write_xive(ics, srcno, server, priority, priority); =20 rtas_st(rets, 0, RTAS_OUT_SUCCESS); } @@ -243,8 +243,8 @@ static void rtas_int_off(PowerPCCPU *cpu, SpaprMachineS= tate *spapr, } =20 srcno =3D nr - ics->offset; - ics_simple_write_xive(ics, srcno, ics->irqs[srcno].server, 0xff, - ics->irqs[srcno].priority); + ics_write_xive(ics, srcno, ics->irqs[srcno].server, 0xff, + ics->irqs[srcno].priority); =20 rtas_st(rets, 0, RTAS_OUT_SUCCESS); } @@ -276,9 +276,9 @@ static void rtas_int_on(PowerPCCPU *cpu, SpaprMachineSt= ate *spapr, } =20 srcno =3D nr - ics->offset; - ics_simple_write_xive(ics, srcno, ics->irqs[srcno].server, - ics->irqs[srcno].saved_priority, - ics->irqs[srcno].saved_priority); + ics_write_xive(ics, srcno, ics->irqs[srcno].server, + ics->irqs[srcno].saved_priority, + ics->irqs[srcno].saved_priority); =20 rtas_st(rets, 0, RTAS_OUT_SUCCESS); } diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c index 88ba8e7b9b..8ea81e9d8e 100644 --- a/hw/ppc/pnv_psi.c +++ b/hw/ppc/pnv_psi.c @@ -311,7 +311,7 @@ static void pnv_psi_set_xivr(PnvPsi *psi, uint32_t reg,= uint64_t val) * do for now but a more accurate implementation would instead * use a fixed server/prio and a remapper of the generated irq. */ - ics_simple_write_xive(ics, src, server, prio, prio); + ics_write_xive(ics, src, server, prio, prio); } =20 static uint64_t pnv_psi_reg_read(PnvPsi *psi, uint32_t offset, bool mmio) @@ -514,7 +514,7 @@ static void pnv_psi_power8_realize(DeviceState *dev, Er= ror **errp) ics_set_irq_type(ics, i, true); } =20 - psi->qirqs =3D qemu_allocate_irqs(ics_simple_set_irq, ics, ics->nr_irq= s); + psi->qirqs =3D qemu_allocate_irqs(ics_set_irq, ics, ics->nr_irqs); =20 /* XSCOM region for PSI registers */ pnv_xscom_region_init(&psi->xscom_regs, OBJECT(dev), &pnv_psi_xscom_op= s, diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index d8f46b6797..ac189c5796 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -210,7 +210,7 @@ static void spapr_irq_set_irq_xics(void *opaque, int sr= cno, int val) { SpaprMachineState *spapr =3D opaque; =20 - ics_simple_set_irq(spapr->ics, srcno, val); + ics_set_irq(spapr->ics, srcno, val); } =20 static void spapr_irq_reset_xics(SpaprMachineState *spapr, Error **errp) diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index ecca17695d..8874bad328 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -167,9 +167,9 @@ uint32_t icp_accept(ICPState *ss); uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr); void icp_eoi(ICPState *icp, uint32_t xirr); =20 -void ics_simple_write_xive(ICSState *ics, int nr, int server, - uint8_t priority, uint8_t saved_priority); -void ics_simple_set_irq(void *opaque, int srcno, int val); +void ics_write_xive(ICSState *ics, int nr, int server, + uint8_t priority, uint8_t saved_priority); +void ics_set_irq(void *opaque, int srcno, int val); =20 static inline bool ics_irq_free(ICSState *ics, uint32_t srcno) { --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569984955; cv=none; d=zoho.com; s=zohoarc; b=kXozcsCYTvIo/JYv/hem94A0Q8bJA/0O29b0hPWyR0ekkJ8PbyYxOEkzSV40n0Ardu+kgyyxcjtB28mNTOIGGLjaShTgddyT3kYXokOqpJeqOyjbB6GMJUBp42kPFD/LmeMZtvFPhuGzhVrwmCRR2jRddcTasr48RCYZ5wg7l78= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569984955; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=rioOHMoUIribzr08Q5tAAZDFJyeV+2+vhSkEEgwuAuQ=; b=bgNjrGe7X6cDnm5jF6JcaoWYClUT7MC691Ium5mPgaOaEbsLc7wyvr1M6cABQdF+20vvy3d+vbt7QKaoaJWz7Q4qQewOP3yLZZ61zyFL+l8inJiTSyFOKAf5obhroGQ0EWU1PTzt1hBw0TwErmBpqh3r6dfb9UuFB49gkj1ARx0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998495410527.86922944610285; Tue, 1 Oct 2019 19:55:54 -0700 (PDT) Received: from localhost ([::1]:50830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUns-0004D3-7U for importer@patchew.org; Tue, 01 Oct 2019 22:55:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59579) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkg-0001Zy-PX for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkf-0002m3-5d for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:30 -0400 Received: from bilbo.ozlabs.org ([2401:3900:2:1::2]:46561 helo=ozlabs.org) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkb-0002bp-NJ; Tue, 01 Oct 2019 22:52:28 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf65zvCz9sPl; Wed, 2 Oct 2019 12:52:14 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984734; bh=3lGo6u1YBpdB7r7VFgQdTpds75/CX6FaUcYmjM8Ssa4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZO7yOGRogG66ScZVNHt0EUq4XCENkn/xazHJWEbot8czdRXOLCj8mWzFXd+kIR/Az XmVZswjBJLprky2SwO5yJYiP1DGhjApooG0SpFPHjPPJxOTvUtw9BvLPWCQaWaEmMc V0nNDc8jwHBC6QMR6pD/dWlScruHoxmCFHgpP7rA= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 04/34] xics: Eliminate reset hook Date: Wed, 2 Oct 2019 12:51:38 +1000 Message-Id: <20191002025208.3487-5-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Currently TYPE_XICS_BASE and TYPE_XICS_SIMPLE have their own reset methods, using the standard technique for having the subtype call the supertype's methods before doing its own thing. But TYPE_XICS_SIMPLE is the only subtype of TYPE_XICS_BASE ever instantiated, so there's no point having the split here. Merge them together into just an ics_reset() function. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/xics.c | 57 ++++++++++++++++++------------------------- include/hw/ppc/xics.h | 1 - 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 310dc72b46..82e6f09259 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -547,11 +547,28 @@ static void ics_eoi(ICSState *ics, uint32_t nr) } } =20 -static void ics_simple_reset(DeviceState *dev) +static void ics_reset_irq(ICSIRQState *irq) { - ICSStateClass *icsc =3D ICS_BASE_GET_CLASS(dev); + irq->priority =3D 0xff; + irq->saved_priority =3D 0xff; +} =20 - icsc->parent_reset(dev); +static void ics_reset(DeviceState *dev) +{ + ICSState *ics =3D ICS_BASE(dev); + int i; + uint8_t flags[ics->nr_irqs]; + + for (i =3D 0; i < ics->nr_irqs; i++) { + flags[i] =3D ics->irqs[i].flags; + } + + memset(ics->irqs, 0, sizeof(ICSIRQState) * ics->nr_irqs); + + for (i =3D 0; i < ics->nr_irqs; i++) { + ics_reset_irq(ics->irqs + i); + ics->irqs[i].flags =3D flags[i]; + } =20 if (kvm_irqchip_in_kernel()) { Error *local_err =3D NULL; @@ -563,9 +580,9 @@ static void ics_simple_reset(DeviceState *dev) } } =20 -static void ics_simple_reset_handler(void *dev) +static void ics_reset_handler(void *dev) { - ics_simple_reset(dev); + ics_reset(dev); } =20 static void ics_simple_realize(DeviceState *dev, Error **errp) @@ -580,7 +597,7 @@ static void ics_simple_realize(DeviceState *dev, Error = **errp) return; } =20 - qemu_register_reset(ics_simple_reset_handler, ics); + qemu_register_reset(ics_reset_handler, ics); } =20 static void ics_simple_class_init(ObjectClass *klass, void *data) @@ -590,8 +607,6 @@ static void ics_simple_class_init(ObjectClass *klass, v= oid *data) =20 device_class_set_parent_realize(dc, ics_simple_realize, &isc->parent_realize); - device_class_set_parent_reset(dc, ics_simple_reset, - &isc->parent_reset); } =20 static const TypeInfo ics_simple_info =3D { @@ -602,30 +617,6 @@ static const TypeInfo ics_simple_info =3D { .class_size =3D sizeof(ICSStateClass), }; =20 -static void ics_reset_irq(ICSIRQState *irq) -{ - irq->priority =3D 0xff; - irq->saved_priority =3D 0xff; -} - -static void ics_base_reset(DeviceState *dev) -{ - ICSState *ics =3D ICS_BASE(dev); - int i; - uint8_t flags[ics->nr_irqs]; - - for (i =3D 0; i < ics->nr_irqs; i++) { - flags[i] =3D ics->irqs[i].flags; - } - - memset(ics->irqs, 0, sizeof(ICSIRQState) * ics->nr_irqs); - - for (i =3D 0; i < ics->nr_irqs; i++) { - ics_reset_irq(ics->irqs + i); - ics->irqs[i].flags =3D flags[i]; - } -} - static void ics_base_realize(DeviceState *dev, Error **errp) { ICSState *ics =3D ICS_BASE(dev); @@ -726,7 +717,7 @@ static void ics_base_class_init(ObjectClass *klass, voi= d *data) =20 dc->realize =3D ics_base_realize; dc->props =3D ics_base_properties; - dc->reset =3D ics_base_reset; + dc->reset =3D ics_reset; dc->vmsd =3D &vmstate_ics_base; } =20 diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 8874bad328..7efd49c02c 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -105,7 +105,6 @@ struct ICSStateClass { DeviceClass parent_class; =20 DeviceRealize parent_realize; - DeviceReset parent_reset; }; =20 struct ICSState { --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985183; cv=none; d=zoho.com; s=zohoarc; b=PgdYZw0EqF0bzIGMleamijxVIbpuEBQE08nxHi25gceVQ0Fu4Oz+x6cquhsmf92Indi0ROEFwKLVlUUIdxKXYHSy2Tg5vhhr0RsXthWUnbmcoAknrs72jt6eTY3G36VTTpchc3VpTfVXGLObzMSLAoHAtc7E7tm626hcsnf9Uuw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985183; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=R/OMU6h0p1ErOUCPyWZhCZ87qPQoDKoMZjZmVQkbKF8=; b=TqUrPzpAgllrF467GXZo6U4calvLw37SnJMRnVWOwCBkT++XMurLMpQBxnFCHVvwXOtUrOUYPhgUIs36rsv5lv/sivbL3nYNgMWFb8HugyOT0SaJ/mLxe9abPmtSz6HpwE4gJGrsgRdhwElQHY6M8Vwa1wy2Tx0rsPxssYiTONQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985183611841.2990547316534; Tue, 1 Oct 2019 19:59:43 -0700 (PDT) Received: from localhost ([::1]:50866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUrd-0000NN-TD for importer@patchew.org; Tue, 01 Oct 2019 22:59:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59726) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkk-0001ag-TM for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkh-0002oR-Ri for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:34 -0400 Received: from ozlabs.org ([203.11.71.1]:41969) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mT-Ay; Tue, 01 Oct 2019 22:52:31 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf66hDzz9sPx; Wed, 2 Oct 2019 12:52:14 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984734; bh=uJH95fv8zdCK834D504Ee3NB5qBHe2oNm3GGUw9V7Ao=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kQaLrslpHnREZNHogoMxBUTHlw/HCWoCtcL+72FPuPFfRYKL1+JvioMxg837OGpQC CUal2BfSAIyo4PosQQXVoOag/O4VrxYszj3EpgK7wTxHxIjh9ufgnseWg5CSwhAa5f Jzn86pv50QYiqU5GEelxansWFscMOdQby0/pVLQQ= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 05/34] xics: Merge TYPE_ICS_BASE and TYPE_ICS_SIMPLE classes Date: Wed, 2 Oct 2019 12:51:39 +1000 Message-Id: <20191002025208.3487-6-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" TYPE_ICS_SIMPLE is the only subtype of TYPE_ICS_BASE that's ever instantiated. The existence of different classes is mostly a hang over from when we (misguidedly) had separate subtypes for the KVM and non-KVM version of the device. There could be some call for an abstract base type for ICS variants that use a different representation of their state (PowerNV PHB3 might want this). The current split isn't really in the right place for that though. If we need this in future, we can re-implement it more in line with what we actually need. So, collapse the two classes together into just TYPE_ICS. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/xics.c | 86 ++++++++++++++----------------------------- hw/ppc/pnv_psi.c | 2 +- hw/ppc/spapr_irq.c | 4 +- include/hw/ppc/xics.h | 16 +++----- 4 files changed, 36 insertions(+), 72 deletions(-) diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 82e6f09259..dfe7dbd254 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -555,7 +555,7 @@ static void ics_reset_irq(ICSIRQState *irq) =20 static void ics_reset(DeviceState *dev) { - ICSState *ics =3D ICS_BASE(dev); + ICSState *ics =3D ICS(dev); int i; uint8_t flags[ics->nr_irqs]; =20 @@ -573,7 +573,7 @@ static void ics_reset(DeviceState *dev) if (kvm_irqchip_in_kernel()) { Error *local_err =3D NULL; =20 - ics_set_kvm_state(ICS_BASE(dev), &local_err); + ics_set_kvm_state(ICS(dev), &local_err); if (local_err) { error_report_err(local_err); } @@ -585,47 +585,15 @@ static void ics_reset_handler(void *dev) ics_reset(dev); } =20 -static void ics_simple_realize(DeviceState *dev, Error **errp) +static void ics_realize(DeviceState *dev, Error **errp) { - ICSState *ics =3D ICS_SIMPLE(dev); - ICSStateClass *icsc =3D ICS_BASE_GET_CLASS(ics); + ICSState *ics =3D ICS(dev); Error *local_err =3D NULL; - - icsc->parent_realize(dev, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - qemu_register_reset(ics_reset_handler, ics); -} - -static void ics_simple_class_init(ObjectClass *klass, void *data) -{ - DeviceClass *dc =3D DEVICE_CLASS(klass); - ICSStateClass *isc =3D ICS_BASE_CLASS(klass); - - device_class_set_parent_realize(dc, ics_simple_realize, - &isc->parent_realize); -} - -static const TypeInfo ics_simple_info =3D { - .name =3D TYPE_ICS_SIMPLE, - .parent =3D TYPE_ICS_BASE, - .instance_size =3D sizeof(ICSState), - .class_init =3D ics_simple_class_init, - .class_size =3D sizeof(ICSStateClass), -}; - -static void ics_base_realize(DeviceState *dev, Error **errp) -{ - ICSState *ics =3D ICS_BASE(dev); Object *obj; - Error *err =3D NULL; =20 - obj =3D object_property_get_link(OBJECT(dev), ICS_PROP_XICS, &err); + obj =3D object_property_get_link(OBJECT(dev), ICS_PROP_XICS, &local_er= r); if (!obj) { - error_propagate_prepend(errp, err, + error_propagate_prepend(errp, local_err, "required link '" ICS_PROP_XICS "' not found: "); return; @@ -637,16 +605,18 @@ static void ics_base_realize(DeviceState *dev, Error = **errp) return; } ics->irqs =3D g_malloc0(ics->nr_irqs * sizeof(ICSIRQState)); + + qemu_register_reset(ics_reset_handler, ics); } =20 -static void ics_base_instance_init(Object *obj) +static void ics_instance_init(Object *obj) { - ICSState *ics =3D ICS_BASE(obj); + ICSState *ics =3D ICS(obj); =20 ics->offset =3D XICS_IRQ_BASE; } =20 -static int ics_base_pre_save(void *opaque) +static int ics_pre_save(void *opaque) { ICSState *ics =3D opaque; =20 @@ -657,7 +627,7 @@ static int ics_base_pre_save(void *opaque) return 0; } =20 -static int ics_base_post_load(void *opaque, int version_id) +static int ics_post_load(void *opaque, int version_id) { ICSState *ics =3D opaque; =20 @@ -675,7 +645,7 @@ static int ics_base_post_load(void *opaque, int version= _id) return 0; } =20 -static const VMStateDescription vmstate_ics_base_irq =3D { +static const VMStateDescription vmstate_ics_irq =3D { .name =3D "ics/irq", .version_id =3D 2, .minimum_version_id =3D 1, @@ -689,45 +659,44 @@ static const VMStateDescription vmstate_ics_base_irq = =3D { }, }; =20 -static const VMStateDescription vmstate_ics_base =3D { +static const VMStateDescription vmstate_ics =3D { .name =3D "ics", .version_id =3D 1, .minimum_version_id =3D 1, - .pre_save =3D ics_base_pre_save, - .post_load =3D ics_base_post_load, + .pre_save =3D ics_pre_save, + .post_load =3D ics_post_load, .fields =3D (VMStateField[]) { /* Sanity check */ VMSTATE_UINT32_EQUAL(nr_irqs, ICSState, NULL), =20 VMSTATE_STRUCT_VARRAY_POINTER_UINT32(irqs, ICSState, nr_irqs, - vmstate_ics_base_irq, + vmstate_ics_irq, ICSIRQState), VMSTATE_END_OF_LIST() }, }; =20 -static Property ics_base_properties[] =3D { +static Property ics_properties[] =3D { DEFINE_PROP_UINT32("nr-irqs", ICSState, nr_irqs, 0), DEFINE_PROP_END_OF_LIST(), }; =20 -static void ics_base_class_init(ObjectClass *klass, void *data) +static void ics_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); =20 - dc->realize =3D ics_base_realize; - dc->props =3D ics_base_properties; + dc->realize =3D ics_realize; + dc->props =3D ics_properties; dc->reset =3D ics_reset; - dc->vmsd =3D &vmstate_ics_base; + dc->vmsd =3D &vmstate_ics; } =20 -static const TypeInfo ics_base_info =3D { - .name =3D TYPE_ICS_BASE, +static const TypeInfo ics_info =3D { + .name =3D TYPE_ICS, .parent =3D TYPE_DEVICE, - .abstract =3D true, .instance_size =3D sizeof(ICSState), - .instance_init =3D ics_base_instance_init, - .class_init =3D ics_base_class_init, + .instance_init =3D ics_instance_init, + .class_init =3D ics_class_init, .class_size =3D sizeof(ICSStateClass), }; =20 @@ -767,8 +736,7 @@ void ics_set_irq_type(ICSState *ics, int srcno, bool ls= i) =20 static void xics_register_types(void) { - type_register_static(&ics_simple_info); - type_register_static(&ics_base_info); + type_register_static(&ics_info); type_register_static(&icp_info); type_register_static(&xics_fabric_info); } diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c index 8ea81e9d8e..a997f16bb4 100644 --- a/hw/ppc/pnv_psi.c +++ b/hw/ppc/pnv_psi.c @@ -469,7 +469,7 @@ static void pnv_psi_power8_instance_init(Object *obj) Pnv8Psi *psi8 =3D PNV8_PSI(obj); =20 object_initialize_child(obj, "ics-psi", &psi8->ics, sizeof(psi8->ics), - TYPE_ICS_SIMPLE, &error_abort, NULL); + TYPE_ICS, &error_abort, NULL); } =20 static const uint8_t irq_to_xivr[] =3D { diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index ac189c5796..6c45d2a3c0 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -98,7 +98,7 @@ static void spapr_irq_init_xics(SpaprMachineState *spapr,= int nr_irqs, Object *obj; Error *local_err =3D NULL; =20 - obj =3D object_new(TYPE_ICS_SIMPLE); + obj =3D object_new(TYPE_ICS); object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), &error_fatal); @@ -109,7 +109,7 @@ static void spapr_irq_init_xics(SpaprMachineState *spap= r, int nr_irqs, return; } =20 - spapr->ics =3D ICS_BASE(obj); + spapr->ics =3D ICS(obj); =20 xics_spapr_init(spapr); } diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 7efd49c02c..1e6a9300eb 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -89,17 +89,13 @@ struct PnvICPState { uint32_t links[3]; }; =20 -#define TYPE_ICS_BASE "ics-base" -#define ICS_BASE(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_BASE) +#define TYPE_ICS "ics" +#define ICS(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS) =20 -/* Retain ics for sPAPR for migration from existing sPAPR guests */ -#define TYPE_ICS_SIMPLE "ics" -#define ICS_SIMPLE(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SIMPLE) - -#define ICS_BASE_CLASS(klass) \ - OBJECT_CLASS_CHECK(ICSStateClass, (klass), TYPE_ICS_BASE) -#define ICS_BASE_GET_CLASS(obj) \ - OBJECT_GET_CLASS(ICSStateClass, (obj), TYPE_ICS_BASE) +#define ICS_CLASS(klass) \ + OBJECT_CLASS_CHECK(ICSStateClass, (klass), TYPE_ICS) +#define ICS_GET_CLASS(obj) \ + OBJECT_GET_CLASS(ICSStateClass, (obj), TYPE_ICS) =20 struct ICSStateClass { DeviceClass parent_class; --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985172; cv=none; d=zoho.com; s=zohoarc; b=KRgkyx28i28toaV7H1Owt0fFZic4K0g/4tMs1cvzBRcH/rzDm12A+VrQ1iOqoZC+qVB9yfPf0lZYvHVrWu78Hkt74hWd5kcz7zE2Ido63ZyOqiT6/kRKHI9g4Z2C1DS5cGOe6gHi+M2WseBto2uXhmsYjRM47AdHLf2qOtI3Fls= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985172; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ziYVBg8nWhbx9BbWJxI2B/At8OyUh2kYrg/uUTXzS24=; b=Dw48G9VyDDk7AjT8ScQKT9nN5trcpdNaky49fUZ8BtDImjNBc69B+Y1dJTIRp1d41Gz2z/+ORxS0f5/ulHrdb/pdcu4QW+fds/wID0A5RmrJfInn9fpaoMCDJ2wqCVgUdyCoApJ8cyFhpgf157X2SXCQEhZtUk0MuyE6ugHQHCo= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985172405143.88570344100208; Tue, 1 Oct 2019 19:59:32 -0700 (PDT) Received: from localhost ([::1]:50864 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUrS-0008WF-Tl for importer@patchew.org; Tue, 01 Oct 2019 22:59:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59736) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkl-0001ai-2y for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUki-0002pA-Dh for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:34 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:45965) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mc-Od; Tue, 01 Oct 2019 22:52:32 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf70WtXz9sQp; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=1DtTW1OF6hT7tfzi6fXxKl2FRK1cUrxrcPViCs66eyw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PyJR2ESwhtdQaoJCBo1fMg8RdyF5+Rmm0lGWEDe5N3SLtMCYWPZ+S8P8u5GQpeUcr h925t6/ObMqt0ZxS3l+0zpW94NQ/lyMlrFflO4hT7kKM2N4LjAnrEPOMo2yCWOxE0T vbBKg96b79m7WG336/76KsA3QDtEJrKKoJUCDUfQ= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 06/34] xics: Create sPAPR specific ICS subtype Date: Wed, 2 Oct 2019 12:51:40 +1000 Message-Id: <20191002025208.3487-7-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" We create a subtype of TYPE_ICS specifically for sPAPR. For now all this does is move the setup of the PAPR specific hcalls and RTAS calls to the realize() function for this, rather than requiring the PAPR code to explicitly call xics_spapr_init(). In future it will have some more function. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/xics_spapr.c | 34 +++++++++++++++++++++++++++++++++- hw/ppc/spapr_irq.c | 6 ++---- include/hw/ppc/xics_spapr.h | 4 +++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 3e9444813a..e6dd004587 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -283,8 +283,18 @@ static void rtas_int_on(PowerPCCPU *cpu, SpaprMachineS= tate *spapr, rtas_st(rets, 0, RTAS_OUT_SUCCESS); } =20 -void xics_spapr_init(SpaprMachineState *spapr) +static void ics_spapr_realize(DeviceState *dev, Error **errp) { + ICSState *ics =3D ICS_SPAPR(dev); + ICSStateClass *icsc =3D ICS_GET_CLASS(ics); + Error *local_err =3D NULL; + + icsc->parent_realize(dev, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + spapr_rtas_register(RTAS_IBM_SET_XIVE, "ibm,set-xive", rtas_set_xive); spapr_rtas_register(RTAS_IBM_GET_XIVE, "ibm,get-xive", rtas_get_xive); spapr_rtas_register(RTAS_IBM_INT_OFF, "ibm,int-off", rtas_int_off); @@ -319,3 +329,25 @@ void spapr_dt_xics(SpaprMachineState *spapr, uint32_t = nr_servers, void *fdt, _FDT(fdt_setprop_cell(fdt, node, "linux,phandle", phandle)); _FDT(fdt_setprop_cell(fdt, node, "phandle", phandle)); } + +static void ics_spapr_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ICSStateClass *isc =3D ICS_CLASS(klass); + + device_class_set_parent_realize(dc, ics_spapr_realize, + &isc->parent_realize); +} + +static const TypeInfo ics_spapr_info =3D { + .name =3D TYPE_ICS_SPAPR, + .parent =3D TYPE_ICS, + .class_init =3D ics_spapr_class_init, +}; + +static void xics_spapr_register_types(void) +{ + type_register_static(&ics_spapr_info); +} + +type_init(xics_spapr_register_types) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 6c45d2a3c0..8c26fa2d1e 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -98,7 +98,7 @@ static void spapr_irq_init_xics(SpaprMachineState *spapr,= int nr_irqs, Object *obj; Error *local_err =3D NULL; =20 - obj =3D object_new(TYPE_ICS); + obj =3D object_new(TYPE_ICS_SPAPR); object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), &error_fatal); @@ -109,9 +109,7 @@ static void spapr_irq_init_xics(SpaprMachineState *spap= r, int nr_irqs, return; } =20 - spapr->ics =3D ICS(obj); - - xics_spapr_init(spapr); + spapr->ics =3D ICS_SPAPR(obj); } =20 static int spapr_irq_claim_xics(SpaprMachineState *spapr, int irq, bool ls= i, diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h index 5dabc9a138..691a6d00f7 100644 --- a/include/hw/ppc/xics_spapr.h +++ b/include/hw/ppc/xics_spapr.h @@ -31,11 +31,13 @@ =20 #define XICS_NODENAME "interrupt-controller" =20 +#define TYPE_ICS_SPAPR "ics-spapr" +#define ICS_SPAPR(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SPAPR) + void spapr_dt_xics(SpaprMachineState *spapr, uint32_t nr_servers, void *fd= t, uint32_t phandle); int xics_kvm_connect(SpaprMachineState *spapr, Error **errp); void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp); bool xics_kvm_has_broken_disconnect(SpaprMachineState *spapr); -void xics_spapr_init(SpaprMachineState *spapr); =20 #endif /* XICS_SPAPR_H */ --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569984956; cv=none; d=zoho.com; s=zohoarc; b=lc0jZajLMy1Rr7TqWAAQacnguHuMgIp/IQUY8h8e9q+vxzOC18QRYBYWZgjDd6EIUKb4/X3+GRMdThSQUngVJs/pdaJbJQeRUXnXSDKOzF/JdfnR4NsW+D8VC3v/vNncqbMvYLPrIT91sxUah7VI1IHMjLtgLdm9omGQs2xjfEQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569984956; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Nr5rIFLpfKI/iMEXXCgi8RxJ+kqGyQp//gF2jaRRB00=; b=DAg5Ok9QDi14wsb+VAZbiX4EXz3CAk7VYCztG2HpUvc9tJ5Qm/QXuuj1E7H0g0zy0Jrg7yOPREspnEHh2Y00tyrayiBeEwj+OtOjoo3uSJBM0cXSOzbUXutbb7pCprnwqtLDWcgTiwXErnKwLIxmKjPeO/6vkjlpstSapGOMyrY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569984956835888.3766966268414; Tue, 1 Oct 2019 19:55:56 -0700 (PDT) Received: from localhost ([::1]:50836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUnw-0004Hf-9N for importer@patchew.org; Tue, 01 Oct 2019 22:55:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59651) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkj-0001aW-BR for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkh-0002oG-RI for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:33 -0400 Received: from ozlabs.org ([203.11.71.1]:36381) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mU-C5; Tue, 01 Oct 2019 22:52:31 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf72BZ5z9sQw; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=94tk8hMC8mG/3jJCPrWVw2Ex0NCpGjmPmqMYz3vP9bY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j5i90ZHmghtgDE0pjJwOXCaTLgf1BvrTuMdEWKI80DPVVwd1t3gF7tNpJ9OEhkACA sJ44R9bvVbucweyPxzCFs4qWQGroTtf7nLQTSbFsVLgMxVkn6pRkyyuD6YzZgjMw3f eTG2hl3La9sdYjFec7SA4uYffJIESDNMXGf/K9BY= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 07/34] spapr: Fold spapr_phb_lsi_qirq() into its single caller Date: Wed, 2 Oct 2019 12:51:41 +1000 Message-Id: <20191002025208.3487-8-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" No point having a two-line helper that's used exactly once, and not likely to be used anywhere else in future. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ppc/spapr_pci.c | 3 ++- include/hw/pci-host/spapr.h | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index c1c9634755..01ff41d4c4 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -721,9 +721,10 @@ static void pci_spapr_set_irq(void *opaque, int irq_nu= m, int level) * corresponding qemu_irq. */ SpaprPhbState *phb =3D opaque; + SpaprMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); =20 trace_spapr_pci_lsi_set(phb->dtbusname, irq_num, phb->lsi_table[irq_nu= m].irq); - qemu_set_irq(spapr_phb_lsi_qirq(phb, irq_num), level); + qemu_set_irq(spapr_qirq(spapr, phb->lsi_table[irq_num].irq), level); } =20 static PCIINTxRoute spapr_route_intx_pin_to_irq(void *opaque, int pin) diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h index abd87605b2..23506f05d9 100644 --- a/include/hw/pci-host/spapr.h +++ b/include/hw/pci-host/spapr.h @@ -128,13 +128,6 @@ struct SpaprPhbState { #define SPAPR_PCI_NV2ATSD_WIN_SIZE (NVGPU_MAX_NUM * NVGPU_MAX_LINKS * \ 64 * KiB) =20 -static inline qemu_irq spapr_phb_lsi_qirq(struct SpaprPhbState *phb, int p= in) -{ - SpaprMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); - - return spapr_qirq(spapr, phb->lsi_table[pin].irq); -} - int spapr_dt_phb(SpaprPhbState *phb, uint32_t intc_phandle, void *fdt, uint32_t nr_msis, int *node_offset); =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985721; cv=none; d=zoho.com; s=zohoarc; b=eBK1BJy4Gk5t4UiFM/IXCXW/dcbgLGnjTAc0V8t32Fkyk53W955+jEDu26ddFFe8gTMOKUjWyqAndVeit/tPAcV5wzHLUDumDwYZ+jxxMa0LphTUzsnx9S4nkv+d7rVHq4mfeEUkLfaAiv2Es79tTIC/sLoU6J3FiagpTxoNcYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985721; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=2ZzYPCAXsQ4BRgelI0onrqcoi23N6zZfqfJz0wtZIIU=; b=VCV7TL4qdmPVaZoOcfHRTffKIiVVVH3baizkWX3QOBcHc+ngtaqeM+WspMIOjqQzMjJt8TIp47XW4fsq5UPmlOsGTueewD5ix8ap/mNwji44n3Cmn2838JCSUnsnIvpB15IG8UuR/6iAtHoAUL36Su975oZij7zQB3hIQuwE7KQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985721638313.1129375009938; Tue, 1 Oct 2019 20:08:41 -0700 (PDT) Received: from localhost ([::1]:50934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV0K-0000am-4s for importer@patchew.org; Tue, 01 Oct 2019 23:08:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59661) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkj-0001aY-Nz for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkh-0002o5-Q4 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:33 -0400 Received: from ozlabs.org ([203.11.71.1]:47371) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mZ-D3; Tue, 01 Oct 2019 22:52:31 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf71ZY3z9sQn; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=RIksUxZRIpgNgUb+BOQ1iDqTN/tyvu+NfJ2zQyVrB1Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bsjbBSI3IB1/8Pf5H5XhLPUxWYXIg7FnwPRIasgoCPNvK12+oMx+mY3p/g2rCgMSZ FBaqgtqQ725fvnAl94OkW+V3ii1yqkfeaHdi6sMnxls/4QVq2SBYCGEjG00j8WenEX 10PzGF/7rH7zy455j7m7HkDkJuSeutYkIAHJC/hg= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 08/34] spapr: Replace spapr_vio_qirq() helper with spapr_vio_irq_pulse() helper Date: Wed, 2 Oct 2019 12:51:42 +1000 Message-Id: <20191002025208.3487-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Every caller of spapr_vio_qirq() immediately calls qemu_irq_pulse() with the result, so we might as well just fold that into the helper. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/char/spapr_vty.c | 3 +-- hw/net/spapr_llan.c | 3 +-- hw/ppc/spapr_vio.c | 3 +-- include/hw/ppc/spapr_vio.h | 5 +++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index 087c93e4fa..8f4d9fe472 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -5,7 +5,6 @@ #include "cpu.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" -#include "hw/irq.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" #include "hw/qdev-properties.h" @@ -37,7 +36,7 @@ static void vty_receive(void *opaque, const uint8_t *buf,= int size) =20 if ((dev->in =3D=3D dev->out) && size) { /* toggle line to simulate edge interrupt */ - qemu_irq_pulse(spapr_vio_qirq(&dev->sdev)); + spapr_vio_irq_pulse(&dev->sdev); } for (i =3D 0; i < size; i++) { if (dev->in - dev->out >=3D VTERM_BUFSIZE) { diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c index 701e6e1514..3d96884d66 100644 --- a/hw/net/spapr_llan.c +++ b/hw/net/spapr_llan.c @@ -27,7 +27,6 @@ =20 #include "qemu/osdep.h" #include "cpu.h" -#include "hw/irq.h" #include "qemu/log.h" #include "qemu/module.h" #include "net/net.h" @@ -267,7 +266,7 @@ static ssize_t spapr_vlan_receive(NetClientState *nc, c= onst uint8_t *buf, } =20 if (sdev->signal_state & 1) { - qemu_irq_pulse(spapr_vio_qirq(sdev)); + spapr_vio_irq_pulse(sdev); } =20 return size; diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c index 0803649658..554de9930d 100644 --- a/hw/ppc/spapr_vio.c +++ b/hw/ppc/spapr_vio.c @@ -23,7 +23,6 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/irq.h" #include "qemu/log.h" #include "hw/loader.h" #include "elf.h" @@ -294,7 +293,7 @@ int spapr_vio_send_crq(SpaprVioDevice *dev, uint8_t *cr= q) dev->crq.qnext =3D (dev->crq.qnext + 16) % dev->crq.qsize; =20 if (dev->signal_state & 1) { - qemu_irq_pulse(spapr_vio_qirq(dev)); + spapr_vio_irq_pulse(dev); } =20 return 0; diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h index 875be28cdd..72762ed16b 100644 --- a/include/hw/ppc/spapr_vio.h +++ b/include/hw/ppc/spapr_vio.h @@ -24,6 +24,7 @@ =20 #include "hw/ppc/spapr.h" #include "sysemu/dma.h" +#include "hw/irq.h" =20 #define TYPE_VIO_SPAPR_DEVICE "vio-spapr-device" #define VIO_SPAPR_DEVICE(obj) \ @@ -84,11 +85,11 @@ extern SpaprVioDevice *spapr_vio_find_by_reg(SpaprVioBu= s *bus, uint32_t reg); void spapr_dt_vdevice(SpaprVioBus *bus, void *fdt); extern gchar *spapr_vio_stdout_path(SpaprVioBus *bus); =20 -static inline qemu_irq spapr_vio_qirq(SpaprVioDevice *dev) +static inline void spapr_vio_irq_pulse(SpaprVioDevice *dev) { SpaprMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); =20 - return spapr_qirq(spapr, dev->irq); + qemu_irq_pulse(spapr_qirq(spapr, dev->irq)); } =20 static inline bool spapr_vio_dma_valid(SpaprVioDevice *dev, uint64_t taddr, --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986285; cv=none; d=zoho.com; s=zohoarc; b=EN/YQQVaKpuULLwMS8uRld4B6kaXBe/iytWOOJuBJblAEM6CJU1q+BtpBOlxnLdxwUGNKo2/9CNeJOelJn+/8xba3GsBTLyEmQdJ0Ny2CqW1WSKDu0D2cXyDQ/vrFWgExLlt5+MatUuNRLLf7KI1hwMpY02SrhhF7sDekkTWvg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986285; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=6p3o/nL6V234W9CnQ6AuPaG2/jx5addmBcYnH0mwnrk=; b=iBfIfdnXRMVnhpDFUBjjzT7KU/N3fxpZ+p6J4VEy8sSrEqiMGRExMpHX2Sti8VZO3Z1OjMFpduYnz9S7w12n2iB+/HHwPXnzKhwg2dU8ifbC7tfJFjYd1erraIv2mne5ExtFLVYSaHxKDUeTfBGc0tE6ttXPltD1x1hJZ5jnlOQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986285155198.44795092227162; Tue, 1 Oct 2019 20:18:05 -0700 (PDT) Received: from localhost ([::1]:51004 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV9M-0002BF-Sm for importer@patchew.org; Tue, 01 Oct 2019 23:18:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59785) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkm-0001cB-CS for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUki-0002pw-H8 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:36 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:53283) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mf-QZ; Tue, 01 Oct 2019 22:52:32 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf734zmz9sR1; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=zR/CQAI8UvWqseTzA4ZXX6g27gKr5pokMBXq+fRvMAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pjF+5xa3H7U+T/k8/DlWTm2lURg8lirG4UBo5vztoqNPzJqFIeZ2moYJwrvgK4WQk iAVh6MGNAowH194xOUk4msMxk9CHzhKVZwAEzBJQaC2wQ8fMeiw/hh8PuZPeMb6rqY AnnVJLUHSF3oy1KDfP5a9CQGHjmWglKeJpkjcIo0= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 09/34] spapr: Clarify and fix handling of nr_irqs Date: Wed, 2 Oct 2019 12:51:43 +1000 Message-Id: <20191002025208.3487-10-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Both the XICS and XIVE interrupt backends have a "nr-irqs" property, but it means slightly different things. For XICS (or, strictly, the ICS) it indicates the number of "real" external IRQs. Those start at XICS_IRQ_BASE (0x1000) and don't include the special IPI vector. For XIVE, however, it includes the whole IRQ space, including XIVE's many IPI vectors. The spapr code currently doesn't handle this sensibly, with the nr_irqs value in SpaprIrq having different meanings depending on the backend. We fix this by renaming nr_irqs to nr_xirqs and making it always indicate just the number of external irqs, adjusting the value we pass to XIVE accordingly. We also move to using common constants in most of the irq configurations, to make it clearer that the IRQ space looks the same to the guest (and emulated devices), even if the backend is different. Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- hw/ppc/spapr_irq.c | 53 ++++++++++++++------------------------ include/hw/ppc/spapr_irq.h | 19 +++++++++----- 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 8c26fa2d1e..3207b6bd01 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -92,7 +92,7 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr, * XICS IRQ backend. */ =20 -static void spapr_irq_init_xics(SpaprMachineState *spapr, int nr_irqs, +static void spapr_irq_init_xics(SpaprMachineState *spapr, int nr_xirqs, Error **errp) { Object *obj; @@ -102,7 +102,7 @@ static void spapr_irq_init_xics(SpaprMachineState *spap= r, int nr_irqs, object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), &error_fatal); - object_property_set_int(obj, nr_irqs, "nr-irqs", &error_fatal); + object_property_set_int(obj, nr_xirqs, "nr-irqs", &error_fatal); object_property_set_bool(obj, true, "realized", &local_err); if (local_err) { error_propagate(errp, local_err); @@ -234,13 +234,9 @@ static void spapr_irq_init_kvm_xics(SpaprMachineState = *spapr, Error **errp) } } =20 -#define SPAPR_IRQ_XICS_NR_IRQS 0x1000 -#define SPAPR_IRQ_XICS_NR_MSIS \ - (XICS_IRQ_BASE + SPAPR_IRQ_XICS_NR_IRQS - SPAPR_IRQ_MSI) - SpaprIrq spapr_irq_xics =3D { - .nr_irqs =3D SPAPR_IRQ_XICS_NR_IRQS, - .nr_msis =3D SPAPR_IRQ_XICS_NR_MSIS, + .nr_xirqs =3D SPAPR_NR_XIRQS, + .nr_msis =3D SPAPR_NR_MSIS, .ov5 =3D SPAPR_OV5_XIVE_LEGACY, =20 .init =3D spapr_irq_init_xics, @@ -260,7 +256,7 @@ SpaprIrq spapr_irq_xics =3D { /* * XIVE IRQ backend. */ -static void spapr_irq_init_xive(SpaprMachineState *spapr, int nr_irqs, +static void spapr_irq_init_xive(SpaprMachineState *spapr, int nr_xirqs, Error **errp) { uint32_t nr_servers =3D spapr_max_server_number(spapr); @@ -268,7 +264,7 @@ static void spapr_irq_init_xive(SpaprMachineState *spap= r, int nr_irqs, int i; =20 dev =3D qdev_create(NULL, TYPE_SPAPR_XIVE); - qdev_prop_set_uint32(dev, "nr-irqs", nr_irqs); + qdev_prop_set_uint32(dev, "nr-irqs", nr_xirqs + SPAPR_XIRQ_BASE); /* * 8 XIVE END structures per CPU. One for each available priority */ @@ -308,7 +304,7 @@ static qemu_irq spapr_qirq_xive(SpaprMachineState *spap= r, int irq) { SpaprXive *xive =3D spapr->xive; =20 - if (irq >=3D xive->nr_irqs) { + if ((irq < SPAPR_XIRQ_BASE) || (irq >=3D xive->nr_irqs)) { return NULL; } =20 @@ -404,17 +400,9 @@ static void spapr_irq_init_kvm_xive(SpaprMachineState = *spapr, Error **errp) } } =20 -/* - * XIVE uses the full IRQ number space. Set it to 8K to be compatible - * with XICS. - */ - -#define SPAPR_IRQ_XIVE_NR_IRQS 0x2000 -#define SPAPR_IRQ_XIVE_NR_MSIS (SPAPR_IRQ_XIVE_NR_IRQS - SPAPR_IRQ_MSI) - SpaprIrq spapr_irq_xive =3D { - .nr_irqs =3D SPAPR_IRQ_XIVE_NR_IRQS, - .nr_msis =3D SPAPR_IRQ_XIVE_NR_MSIS, + .nr_xirqs =3D SPAPR_NR_XIRQS, + .nr_msis =3D SPAPR_NR_MSIS, .ov5 =3D SPAPR_OV5_XIVE_EXPLOIT, =20 .init =3D spapr_irq_init_xive, @@ -450,18 +438,18 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState = *spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static void spapr_irq_init_dual(SpaprMachineState *spapr, int nr_irqs, +static void spapr_irq_init_dual(SpaprMachineState *spapr, int nr_xirqs, Error **errp) { Error *local_err =3D NULL; =20 - spapr_irq_xics.init(spapr, spapr_irq_xics.nr_irqs, &local_err); + spapr_irq_xics.init(spapr, spapr_irq_xics.nr_xirqs, &local_err); if (local_err) { error_propagate(errp, local_err); return; } =20 - spapr_irq_xive.init(spapr, spapr_irq_xive.nr_irqs, &local_err); + spapr_irq_xive.init(spapr, spapr_irq_xive.nr_xirqs, &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -586,12 +574,9 @@ static const char *spapr_irq_get_nodename_dual(SpaprMa= chineState *spapr) /* * Define values in sync with the XIVE and XICS backend */ -#define SPAPR_IRQ_DUAL_NR_IRQS 0x2000 -#define SPAPR_IRQ_DUAL_NR_MSIS (SPAPR_IRQ_DUAL_NR_IRQS - SPAPR_IRQ_MSI) - SpaprIrq spapr_irq_dual =3D { - .nr_irqs =3D SPAPR_IRQ_DUAL_NR_IRQS, - .nr_msis =3D SPAPR_IRQ_DUAL_NR_MSIS, + .nr_xirqs =3D SPAPR_NR_XIRQS, + .nr_msis =3D SPAPR_NR_MSIS, .ov5 =3D SPAPR_OV5_XIVE_BOTH, =20 .init =3D spapr_irq_init_dual, @@ -693,10 +678,10 @@ void spapr_irq_init(SpaprMachineState *spapr, Error *= *errp) spapr_irq_msi_init(spapr, spapr->irq->nr_msis); } =20 - spapr->irq->init(spapr, spapr->irq->nr_irqs, errp); + spapr->irq->init(spapr, spapr->irq->nr_xirqs, errp); =20 spapr->qirqs =3D qemu_allocate_irqs(spapr->irq->set_irq, spapr, - spapr->irq->nr_irqs); + spapr->irq->nr_xirqs + SPAPR_XIRQ_BA= SE); } =20 int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **e= rrp) @@ -804,11 +789,11 @@ int spapr_irq_find(SpaprMachineState *spapr, int num,= bool align, Error **errp) return first + ics->offset; } =20 -#define SPAPR_IRQ_XICS_LEGACY_NR_IRQS 0x400 +#define SPAPR_IRQ_XICS_LEGACY_NR_XIRQS 0x400 =20 SpaprIrq spapr_irq_xics_legacy =3D { - .nr_irqs =3D SPAPR_IRQ_XICS_LEGACY_NR_IRQS, - .nr_msis =3D SPAPR_IRQ_XICS_LEGACY_NR_IRQS, + .nr_xirqs =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, + .nr_msis =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, .ov5 =3D SPAPR_OV5_XIVE_LEGACY, =20 .init =3D spapr_irq_init_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 5db305165c..a8f9a2ab11 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -16,13 +16,18 @@ * IRQ range offsets per device type */ #define SPAPR_IRQ_IPI 0x0 -#define SPAPR_IRQ_EPOW 0x1000 /* XICS_IRQ_BASE offset */ -#define SPAPR_IRQ_HOTPLUG 0x1001 -#define SPAPR_IRQ_VIO 0x1100 /* 256 VIO devices */ -#define SPAPR_IRQ_PCI_LSI 0x1200 /* 32+ PHBs devices */ =20 -#define SPAPR_IRQ_MSI 0x1300 /* Offset of the dynamic range covered - * by the bitmap allocator */ +#define SPAPR_XIRQ_BASE XICS_IRQ_BASE /* 0x1000 */ +#define SPAPR_IRQ_EPOW (SPAPR_XIRQ_BASE + 0x0000) +#define SPAPR_IRQ_HOTPLUG (SPAPR_XIRQ_BASE + 0x0001) +#define SPAPR_IRQ_VIO (SPAPR_XIRQ_BASE + 0x0100) /* 256 VIO device= s */ +#define SPAPR_IRQ_PCI_LSI (SPAPR_XIRQ_BASE + 0x0200) /* 32+ PHBs devic= es */ + +/* Offset of the dynamic range covered by the bitmap allocator */ +#define SPAPR_IRQ_MSI (SPAPR_XIRQ_BASE + 0x0300) + +#define SPAPR_NR_XIRQS 0x1000 +#define SPAPR_NR_MSIS (SPAPR_XIRQ_BASE + SPAPR_NR_XIRQS - SPAPR_IRQ= _MSI) =20 typedef struct SpaprMachineState SpaprMachineState; =20 @@ -32,7 +37,7 @@ int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_= t num, bool align, void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num); =20 typedef struct SpaprIrq { - uint32_t nr_irqs; + uint32_t nr_xirqs; uint32_t nr_msis; uint8_t ov5; =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986065; cv=none; d=zoho.com; s=zohoarc; b=CqishM1qKUggDZM66x+0Jia62Reu9Ez8eCvpMQES+4TqSNot0f/TQEcfL+VET0cpBUrfQ7XOAdGZtwzY4cGN6c+W4KfZw9OvJMIw3mlmqitnpSOGWKzK6l8awaQLVI0qPssPyJZmdop+yhsCR4EYcePiFzd+B5qui3IRgUvbBJg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986065; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=fCKzTN4dy6b4XK3M9VdhBmXRFw9+5Q9siLlg5mB3wQY=; b=kmkHz9C3BhB1/WCT+6+TvJF0Ld1GwP6SVKfgKQO59G27xUG6jbZoc8udBgTGZBwda4OInh10+cRfZIZ9WVPqqOw1niw1p0iJb9sQfjQKwJLihjv9AaVzwgqa3ycgubSwWtK2B+/9K9KhxKsFsmEDSNidJQ38Exj0WG9aKBdVkWc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986065698372.6222344007962; Tue, 1 Oct 2019 20:14:25 -0700 (PDT) Received: from localhost ([::1]:50968 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV5s-0005zp-3X for importer@patchew.org; Tue, 01 Oct 2019 23:14:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59727) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkk-0001ah-Te for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUki-0002ov-8N for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:34 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:41973) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002md-NJ; Tue, 01 Oct 2019 22:52:32 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf74Wczz9sR7; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=AJiJdvQQRtY3xCC+8NIaQB+q5QY2SYMofAFjSwQ8Fag=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k+PiJ7QqWIpuLV0ecI8O9nDDllFYIvSovVE3ofotHRQXFxHFW2MlNTR0YclCmCT8L LvQ8XiifIbMXnBCsKwNqK9BEcpsMcZsLAaTEgXjiH+FFwBTZUNExHY2BONJJTIIV6G BKFwFpYv/PpQFPUwS9kjQPVq0bftUAlfqOjSW8X8= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 10/34] spapr: Eliminate nr_irqs parameter to SpaprIrq::init Date: Wed, 2 Oct 2019 12:51:44 +1000 Message-Id: <20191002025208.3487-11-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The only reason this parameter was needed was to work around the inconsistent meaning of nr_irqs between xics and xive. Now that we've fixed that, we can consistently use the number directly in the SpaprIrq configuration. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 21 ++++++++++----------- include/hw/ppc/spapr_irq.h | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 3207b6bd01..cded3a0154 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -92,8 +92,7 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr, * XICS IRQ backend. */ =20 -static void spapr_irq_init_xics(SpaprMachineState *spapr, int nr_xirqs, - Error **errp) +static void spapr_irq_init_xics(SpaprMachineState *spapr, Error **errp) { Object *obj; Error *local_err =3D NULL; @@ -102,7 +101,8 @@ static void spapr_irq_init_xics(SpaprMachineState *spap= r, int nr_xirqs, object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), &error_fatal); - object_property_set_int(obj, nr_xirqs, "nr-irqs", &error_fatal); + object_property_set_int(obj, spapr->irq->nr_xirqs, + "nr-irqs", &error_fatal); object_property_set_bool(obj, true, "realized", &local_err); if (local_err) { error_propagate(errp, local_err); @@ -256,15 +256,15 @@ SpaprIrq spapr_irq_xics =3D { /* * XIVE IRQ backend. */ -static void spapr_irq_init_xive(SpaprMachineState *spapr, int nr_xirqs, - Error **errp) +static void spapr_irq_init_xive(SpaprMachineState *spapr, Error **errp) { uint32_t nr_servers =3D spapr_max_server_number(spapr); DeviceState *dev; int i; =20 dev =3D qdev_create(NULL, TYPE_SPAPR_XIVE); - qdev_prop_set_uint32(dev, "nr-irqs", nr_xirqs + SPAPR_XIRQ_BASE); + qdev_prop_set_uint32(dev, "nr-irqs", + spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE); /* * 8 XIVE END structures per CPU. One for each available priority */ @@ -438,18 +438,17 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState = *spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static void spapr_irq_init_dual(SpaprMachineState *spapr, int nr_xirqs, - Error **errp) +static void spapr_irq_init_dual(SpaprMachineState *spapr, Error **errp) { Error *local_err =3D NULL; =20 - spapr_irq_xics.init(spapr, spapr_irq_xics.nr_xirqs, &local_err); + spapr_irq_xics.init(spapr, &local_err); if (local_err) { error_propagate(errp, local_err); return; } =20 - spapr_irq_xive.init(spapr, spapr_irq_xive.nr_xirqs, &local_err); + spapr_irq_xive.init(spapr, &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -678,7 +677,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) spapr_irq_msi_init(spapr, spapr->irq->nr_msis); } =20 - spapr->irq->init(spapr, spapr->irq->nr_xirqs, errp); + spapr->irq->init(spapr, errp); =20 spapr->qirqs =3D qemu_allocate_irqs(spapr->irq->set_irq, spapr, spapr->irq->nr_xirqs + SPAPR_XIRQ_BA= SE); diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index a8f9a2ab11..7e26288fcd 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -41,7 +41,7 @@ typedef struct SpaprIrq { uint32_t nr_msis; uint8_t ov5; =20 - void (*init)(SpaprMachineState *spapr, int nr_irqs, Error **errp); + void (*init)(SpaprMachineState *spapr, Error **errp); int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); void (*free)(SpaprMachineState *spapr, int irq, int num); qemu_irq (*qirq)(SpaprMachineState *spapr, int irq); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985468; cv=none; d=zoho.com; s=zohoarc; b=bROe9Tl14GGm9BlBUZkEfYpeXgEQaZV/ycdsf1ZwxNtBtx7jA6pRwMgeQedX92nHsxMJKhuws1o1WaUBHCX3yXCTJsXARW7YY+nBX7hq6mQh/d0/tamqAXvKTGWD1Xz83jXoKQR5joO2gPj9ZgBohtDBZvt8ma6fPxce9bPl7so= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985468; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Zdpdm6t+odBA7/ZjjjI81NuCxMaDU6i9WFzG24r2tNg=; b=Mj17wZ3xA6vR28gZcvgm2xBnvDUKskFJPUqIWchZtG/WhVCZT9CsJSJ7qUPZIKyJVyZMXlsFhC/yIyu7D+dcjAx/mOzZYopHFtTKkPy2lmYttu22LV/KOlcK58v2IpEQljoFq76FmHUeO3xBCzIMDLdkKU87/tzD0TJoIFk1M3Q= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985468484435.104094282754; Tue, 1 Oct 2019 20:04:28 -0700 (PDT) Received: from localhost ([::1]:50910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUwA-0003uz-6M for importer@patchew.org; Tue, 01 Oct 2019 23:04:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59753) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkl-0001ay-FA for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUki-0002pQ-Cx for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:35 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:40771) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002me-Pz; Tue, 01 Oct 2019 22:52:32 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf73sX5z9sQr; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=KAjpXK1XJaeXMysUyEuwfLiwnpMGp2yr5NbNM5um/d4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k18XhK4KCZWSXdTFjmfkPXjASrmrQ62ZiojoXGjzL+qB68lsrqOrt9ItGLeASg1RD s4aTFW/OKQ/btb1M98WtTCYJLTMhHR+t5YUMHD2WkqmM5dVltPG6z3midGPLPl8FqE VZ1kE/Ia6nuNbfhkOaQFj+r29IM48K5vd9cqXo2E= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 11/34] spapr: Fix indexing of XICS irqs Date: Wed, 2 Oct 2019 12:51:45 +1000 Message-Id: <20191002025208.3487-12-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" spapr global irq numbers are different from the source numbers on the ICS when using XICS - they're offset by XICS_IRQ_BASE (0x1000). But spapr_irq_set_irq_xics() was passing through the global irq number to the ICS code unmodified. We only got away with this because of a counteracting bug - we were incorrectly adjusting the qemu_irq we returned for a requested global irq number. That approach mostly worked but is very confusing, incorrectly relies on the way the qemu_irq array is allocated, and undermines the intention of having the global array of qemu_irqs for spapr have a consistent meaning regardless of irq backend. So, fix both set_irq and qemu_irq indexing. We rename some parameters at the same time to make it clear that they are referring to spapr global irq numbers. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index cded3a0154..8f79aa829f 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -153,10 +153,9 @@ static void spapr_irq_free_xics(SpaprMachineState *spa= pr, int irq, int num) static qemu_irq spapr_qirq_xics(SpaprMachineState *spapr, int irq) { ICSState *ics =3D spapr->ics; - uint32_t srcno =3D irq - ics->offset; =20 if (ics_valid_irq(ics, irq)) { - return spapr->qirqs[srcno]; + return spapr->qirqs[irq]; } =20 return NULL; @@ -204,9 +203,10 @@ static int spapr_irq_post_load_xics(SpaprMachineState = *spapr, int version_id) return 0; } =20 -static void spapr_irq_set_irq_xics(void *opaque, int srcno, int val) +static void spapr_irq_set_irq_xics(void *opaque, int irq, int val) { SpaprMachineState *spapr =3D opaque; + uint32_t srcno =3D irq - spapr->ics->offset; =20 ics_set_irq(spapr->ics, srcno, val); } @@ -377,14 +377,14 @@ static void spapr_irq_reset_xive(SpaprMachineState *s= papr, Error **errp) spapr_xive_mmio_set_enabled(spapr->xive, true); } =20 -static void spapr_irq_set_irq_xive(void *opaque, int srcno, int val) +static void spapr_irq_set_irq_xive(void *opaque, int irq, int val) { SpaprMachineState *spapr =3D opaque; =20 if (kvm_irqchip_in_kernel()) { - kvmppc_xive_source_set_irq(&spapr->xive->source, srcno, val); + kvmppc_xive_source_set_irq(&spapr->xive->source, irq, val); } else { - xive_source_set_irq(&spapr->xive->source, srcno, val); + xive_source_set_irq(&spapr->xive->source, irq, val); } } =20 @@ -558,11 +558,11 @@ static void spapr_irq_reset_dual(SpaprMachineState *s= papr, Error **errp) spapr_irq_current(spapr)->reset(spapr, errp); } =20 -static void spapr_irq_set_irq_dual(void *opaque, int srcno, int val) +static void spapr_irq_set_irq_dual(void *opaque, int irq, int val) { SpaprMachineState *spapr =3D opaque; =20 - spapr_irq_current(spapr)->set_irq(spapr, srcno, val); + spapr_irq_current(spapr)->set_irq(spapr, irq, val); } =20 static const char *spapr_irq_get_nodename_dual(SpaprMachineState *spapr) --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985192; cv=none; d=zoho.com; s=zohoarc; b=edxH5rxajKIsMAuArwB50JHOEx4nqwO7mggJqPzjQJ92Ag8L50kBgI8zgLuNOepcN1le+SIT8wlZmDeONjCSRB9B6b3lgvCKta7YgTpbprXyw+Tp4lmLtlUwbGywvI9cVMXiNdS8bNzAtWfPDX4w/vrv8EgJqJ5XIauYKtR2RC8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985192; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=dJsUCYGH9jGi7ILdP8L9aY2rfZ8BNe/wNTdlKNuJPqc=; b=jQ1uEQOco24ypFtNq8bhGGEoYWog6Wi4YwTQiVjvrCqB8e/JFk21sPJSsu9ys2lvtE/32fhur/7qS0R1G+rfvyfSV2argDyhlLGGoPB32mqUInCxaLE1TtwXvO1tSghCDZFNJ3oWcZ+xfH8DrPoDTbRCA7yV9KlI7nG7+APmqT8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985192162401.2830591505227; Tue, 1 Oct 2019 19:59:52 -0700 (PDT) Received: from localhost ([::1]:50868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUrm-0000Zw-6z for importer@patchew.org; Tue, 01 Oct 2019 22:59:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59710) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkk-0001ae-JY for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkh-0002oM-S8 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:34 -0400 Received: from ozlabs.org ([203.11.71.1]:40399) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkh-0002mW-BT; Tue, 01 Oct 2019 22:52:31 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf75bGZz9sRD; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=nIuSmMjmRIP2JxH6+XRAiVaVtFEjEQi4rUDk6u8g8NA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aVw6HapXVQYUka+6kWCW91DwOWqibX5vgA9H05x3JOIDZ/1vCyaYhVzT/2aqjCI33 stnljoReR8HpPmglG2yn8K1bnhduN8a+oRlwICQfkPAoS7oGEr8m7xdwQuTxmY8GNT 1ULl4hroCPZCKx7yC6cgbcQV/8MCkdPTkBe+XbgE= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 12/34] spapr: Simplify spapr_qirq() handling Date: Wed, 2 Oct 2019 12:51:46 +1000 Message-Id: <20191002025208.3487-13-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Currently spapr_qirq(), whic is used to find the qemu_irq for an spapr global irq number, redirects through the SpaprIrq::qirq method. But the array of qemu_irqs is allocated in the PAPR layer, not the backends, and so the method implementations all return the same thing, just differing in the preliminary checks they make. So, we can remove the method, and just implement spapr_qirq() directly, including all the relevant checks in one place. We change all those checks into assert()s as well, since a failure here indicates an error in the calling code. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ppc/spapr_irq.c | 54 ++++++++++++++------------------------ include/hw/ppc/spapr_irq.h | 1 - 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 8f79aa829f..8f179076c6 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -150,17 +150,6 @@ static void spapr_irq_free_xics(SpaprMachineState *spa= pr, int irq, int num) } } =20 -static qemu_irq spapr_qirq_xics(SpaprMachineState *spapr, int irq) -{ - ICSState *ics =3D spapr->ics; - - if (ics_valid_irq(ics, irq)) { - return spapr->qirqs[irq]; - } - - return NULL; -} - static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *m= on) { CPUState *cs; @@ -242,7 +231,6 @@ SpaprIrq spapr_irq_xics =3D { .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, .free =3D spapr_irq_free_xics, - .qirq =3D spapr_qirq_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .cpu_intc_create =3D spapr_irq_cpu_intc_create_xics, @@ -300,20 +288,6 @@ static void spapr_irq_free_xive(SpaprMachineState *spa= pr, int irq, int num) } } =20 -static qemu_irq spapr_qirq_xive(SpaprMachineState *spapr, int irq) -{ - SpaprXive *xive =3D spapr->xive; - - if ((irq < SPAPR_XIRQ_BASE) || (irq >=3D xive->nr_irqs)) { - return NULL; - } - - /* The sPAPR machine/device should have claimed the IRQ before */ - assert(xive_eas_is_valid(&xive->eat[irq])); - - return spapr->qirqs[irq]; -} - static void spapr_irq_print_info_xive(SpaprMachineState *spapr, Monitor *mon) { @@ -408,7 +382,6 @@ SpaprIrq spapr_irq_xive =3D { .init =3D spapr_irq_init_xive, .claim =3D spapr_irq_claim_xive, .free =3D spapr_irq_free_xive, - .qirq =3D spapr_qirq_xive, .print_info =3D spapr_irq_print_info_xive, .dt_populate =3D spapr_dt_xive, .cpu_intc_create =3D spapr_irq_cpu_intc_create_xive, @@ -482,11 +455,6 @@ static void spapr_irq_free_dual(SpaprMachineState *spa= pr, int irq, int num) spapr_irq_xive.free(spapr, irq, num); } =20 -static qemu_irq spapr_qirq_dual(SpaprMachineState *spapr, int irq) -{ - return spapr_irq_current(spapr)->qirq(spapr, irq); -} - static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *m= on) { spapr_irq_current(spapr)->print_info(spapr, mon); @@ -581,7 +549,6 @@ SpaprIrq spapr_irq_dual =3D { .init =3D spapr_irq_init_dual, .claim =3D spapr_irq_claim_dual, .free =3D spapr_irq_free_dual, - .qirq =3D spapr_qirq_dual, .print_info =3D spapr_irq_print_info_dual, .dt_populate =3D spapr_irq_dt_populate_dual, .cpu_intc_create =3D spapr_irq_cpu_intc_create_dual, @@ -695,7 +662,25 @@ void spapr_irq_free(SpaprMachineState *spapr, int irq,= int num) =20 qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) { - return spapr->irq->qirq(spapr, irq); + /* + * This interface is basically for VIO and PHB devices to find the + * right qemu_irq to manipulate, so we only allow access to the + * external irqs for now. Currently anything which needs to + * access the IPIs most naturally gets there via the guest side + * interfaces, we can change this if we need to in future. + */ + assert(irq >=3D SPAPR_XIRQ_BASE); + assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + + if (spapr->ics) { + assert(ics_valid_irq(spapr->ics, irq)); + } + if (spapr->xive) { + assert(irq < spapr->xive->nr_irqs); + assert(xive_eas_is_valid(&spapr->xive->eat[irq])); + } + + return spapr->qirqs[irq]; } =20 int spapr_irq_post_load(SpaprMachineState *spapr, int version_id) @@ -798,7 +783,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, .free =3D spapr_irq_free_xics, - .qirq =3D spapr_qirq_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .cpu_intc_create =3D spapr_irq_cpu_intc_create_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 7e26288fcd..a4e790ef60 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -44,7 +44,6 @@ typedef struct SpaprIrq { void (*init)(SpaprMachineState *spapr, Error **errp); int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); void (*free)(SpaprMachineState *spapr, int irq, int num); - qemu_irq (*qirq)(SpaprMachineState *spapr, int irq); void (*print_info)(SpaprMachineState *spapr, Monitor *mon); void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986622; cv=none; d=zoho.com; s=zohoarc; b=csKl8EPPMtkgeC56jiKBOO/5P5wvGEACPNEd/dCfeDuHwHwLIzJFeRUaTs1nWLP42HPRcWyPZ5HrfK1mAGBknkZC01IxATcs/2G2ChY7gbxutsBcerLP3KRTdZteTWDCshUDrUtdDVNxm/2QsLl+JVHyvFKSJDbmpxl3iXPEo3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986622; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=cxI4CEeETABdgLP4mbPy03JUOMNYcsWcNRZx/2Sn07A=; b=chFOkdzt6NwWbGeH9uP4pCXjJFGswWuaAjB6jI7SY/6BOCIJ2yxzhK8+QzN0KbsrkXn5TqoAKE6AcGJ+aXp2hSkWwZHpvFnxIAEjgJZoK9w6UD3+6wwFisG6cPm5ekJNXoxd3r76i21jL8Lde0mA4V19cvzMjTMznbgOiT2Th4A= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986622598961.1591782795506; Tue, 1 Oct 2019 20:23:42 -0700 (PDT) Received: from localhost ([::1]:51069 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVEr-0008Lu-8u for importer@patchew.org; Tue, 01 Oct 2019 23:23:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59916) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkp-0001gJ-Av for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkk-0002u7-WF for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:52655) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002pF-DD; Tue, 01 Oct 2019 22:52:34 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf76FL9z9sR6; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=dRmc8C87IgfOESV6wlmWQRDExLiKHVz7EnhGNOYr28s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LyOEO9w/fbLBeumiRaPwkWoNQ9XyyPkSiEdO9m3dMT+pPpyDmWfk1dfIx+iwXHg/v zgp71vpzfPEIxb+UoSs0GyDEMT2r5b6IYS7dkPdmknfzfE75o+EFvMV1Hp6zhYd4Jk WBLwqvVg1BHgvKo3xsAF6AXxmMomMvwFSc6ewlbE= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 13/34] spapr: Eliminate SpaprIrq:get_nodename method Date: Wed, 2 Oct 2019 12:51:47 +1000 Message-Id: <20191002025208.3487-14-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method is used to determine the name of the irq backend's node in the device tree, so that we can find its phandle (after SLOF may have modified it from the phandle we initially gave it). But, in the two cases the only difference between the node name is the presence of a unit address. Searching for a node name without considering unit address is standard practice for the device tree, and fdt_subnode_offset() will do exactly that, making this method unecessary. While we're there, remove the XICS_NODENAME define. The name "interrupt-controller" is required by PAPR (and IEEE1275), and a bunch of places assume it already. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Greg Kurz --- hw/intc/xics_spapr.c | 2 +- hw/ppc/spapr_irq.c | 25 +++---------------------- include/hw/ppc/spapr_irq.h | 1 - include/hw/ppc/xics_spapr.h | 2 -- 4 files changed, 4 insertions(+), 26 deletions(-) diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index e6dd004587..6e5eb24b3c 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -316,7 +316,7 @@ void spapr_dt_xics(SpaprMachineState *spapr, uint32_t n= r_servers, void *fdt, }; int node; =20 - _FDT(node =3D fdt_add_subnode(fdt, 0, XICS_NODENAME)); + _FDT(node =3D fdt_add_subnode(fdt, 0, "interrupt-controller")); =20 _FDT(fdt_setprop_string(fdt, node, "device_type", "PowerPC-External-Interrupt-Presentation")); diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 8f179076c6..ec2229d2d1 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -211,11 +211,6 @@ static void spapr_irq_reset_xics(SpaprMachineState *sp= apr, Error **errp) } } =20 -static const char *spapr_irq_get_nodename_xics(SpaprMachineState *spapr) -{ - return XICS_NODENAME; -} - static void spapr_irq_init_kvm_xics(SpaprMachineState *spapr, Error **errp) { if (kvm_enabled()) { @@ -237,7 +232,6 @@ SpaprIrq spapr_irq_xics =3D { .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .set_irq =3D spapr_irq_set_irq_xics, - .get_nodename =3D spapr_irq_get_nodename_xics, .init_kvm =3D spapr_irq_init_kvm_xics, }; =20 @@ -362,11 +356,6 @@ static void spapr_irq_set_irq_xive(void *opaque, int i= rq, int val) } } =20 -static const char *spapr_irq_get_nodename_xive(SpaprMachineState *spapr) -{ - return spapr->xive->nodename; -} - static void spapr_irq_init_kvm_xive(SpaprMachineState *spapr, Error **errp) { if (kvm_enabled()) { @@ -388,7 +377,6 @@ SpaprIrq spapr_irq_xive =3D { .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, .set_irq =3D spapr_irq_set_irq_xive, - .get_nodename =3D spapr_irq_get_nodename_xive, .init_kvm =3D spapr_irq_init_kvm_xive, }; =20 @@ -533,11 +521,6 @@ static void spapr_irq_set_irq_dual(void *opaque, int i= rq, int val) spapr_irq_current(spapr)->set_irq(spapr, irq, val); } =20 -static const char *spapr_irq_get_nodename_dual(SpaprMachineState *spapr) -{ - return spapr_irq_current(spapr)->get_nodename(spapr); -} - /* * Define values in sync with the XIVE and XICS backend */ @@ -555,7 +538,6 @@ SpaprIrq spapr_irq_dual =3D { .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, .set_irq =3D spapr_irq_set_irq_dual, - .get_nodename =3D spapr_irq_get_nodename_dual, .init_kvm =3D NULL, /* should not be used */ }; =20 @@ -699,13 +681,13 @@ void spapr_irq_reset(SpaprMachineState *spapr, Error = **errp) =20 int spapr_irq_get_phandle(SpaprMachineState *spapr, void *fdt, Error **err= p) { - const char *nodename =3D spapr->irq->get_nodename(spapr); + const char *nodename =3D "interrupt-controller"; int offset, phandle; =20 offset =3D fdt_subnode_offset(fdt, 0, nodename); if (offset < 0) { - error_setg(errp, "Can't find node \"%s\": %s", nodename, - fdt_strerror(offset)); + error_setg(errp, "Can't find node \"%s\": %s", + nodename, fdt_strerror(offset)); return -1; } =20 @@ -789,6 +771,5 @@ SpaprIrq spapr_irq_xics_legacy =3D { .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .set_irq =3D spapr_irq_set_irq_xics, - .get_nodename =3D spapr_irq_get_nodename_xics, .init_kvm =3D spapr_irq_init_kvm_xics, }; diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index a4e790ef60..9b60378e28 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -52,7 +52,6 @@ typedef struct SpaprIrq { int (*post_load)(SpaprMachineState *spapr, int version_id); void (*reset)(SpaprMachineState *spapr, Error **errp); void (*set_irq)(void *opaque, int srcno, int val); - const char *(*get_nodename)(SpaprMachineState *spapr); void (*init_kvm)(SpaprMachineState *spapr, Error **errp); } SpaprIrq; =20 diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h index 691a6d00f7..0b35e85c26 100644 --- a/include/hw/ppc/xics_spapr.h +++ b/include/hw/ppc/xics_spapr.h @@ -29,8 +29,6 @@ =20 #include "hw/ppc/spapr.h" =20 -#define XICS_NODENAME "interrupt-controller" - #define TYPE_ICS_SPAPR "ics-spapr" #define ICS_SPAPR(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SPAPR) =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986060; cv=none; d=zoho.com; s=zohoarc; b=XGPY596LiIlXmak8ZQzMJedV95douMyHYeuJAGIWaPUODNz2bzT8dC6UN9QQz7cQf3+ANQllK/M2Pu9JeMR050RWdvKz5nP8Sum+ntWqRznHVZVio/61N+lAv+MWYl/jJHYu4SyuuIvvErS/LOw9mzdPMdv05LIyTkIJgZ6lEmY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986060; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=NP0nCdcwXr+6hwjtC1SkIeF/+RezPa95dX98Q871JeE=; b=PByuqBVcQ0XVXHXKlebwyAJCdwTfvzEAb51uzLvqJy1MqA11hHXlPpMre8JNreWUpvAlnpZuyFZAwWJgPhVVg089GpZQ/JA8il0K9Me4Deb47YCv0WLjNyxPr1P28dE+gxpZfSJvTM9Bd+uMCKWhtxPM5nXBPdf84ErTMI3Y1pY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998606076295.67170305852596; Tue, 1 Oct 2019 20:14:20 -0700 (PDT) Received: from localhost ([::1]:50966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV5n-0005m0-8C for importer@patchew.org; Tue, 01 Oct 2019 23:14:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59875) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUko-0001fY-PG for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002ux-93 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from ozlabs.org ([203.11.71.1]:59505) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002pE-HN; Tue, 01 Oct 2019 22:52:34 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf76vRfz9sRH; Wed, 2 Oct 2019 12:52:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984735; bh=DQmngEMiivkphtE6NW57+oUk3GSNufbe24fbel5QQ2E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hY4sO15wgm9UmiXo6hbGZsTEG381n4/4Mz/VDt4uHgV+n+3DWGcS/MyypjvTN1/hI TgZLSrh+Vr3pLd56jP61Y4kY8iSb+PDJSeccf876k4IiL/vIwz/md6DUlrF3VQlRZv yxDrW5amWpjoy/w2wkuqaypLijKrFpxdM5WHVjw8= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 14/34] spapr: Remove unhelpful tracepoints from spapr_irq_free_xics() Date: Wed, 2 Oct 2019 12:51:48 +1000 Message-Id: <20191002025208.3487-15-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" These traces contain some useless information (the always-0 source#) and have no equivalents for XIVE mode. For now just remove them, and we can put back something more sensible if and when we need it. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/ppc/spapr_irq.c | 4 ---- hw/ppc/trace-events | 4 ---- 2 files changed, 8 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index ec2229d2d1..9919910a86 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -140,11 +140,7 @@ static void spapr_irq_free_xics(SpaprMachineState *spa= pr, int irq, int num) int i; =20 if (ics_valid_irq(ics, irq)) { - trace_spapr_irq_free(0, irq, num); for (i =3D srcno; i < srcno + num; ++i) { - if (ics_irq_free(ics, i)) { - trace_spapr_irq_free_warn(0, i); - } memset(&ics->irqs[i], 0, sizeof(ICSIRQState)); } } diff --git a/hw/ppc/trace-events b/hw/ppc/trace-events index 96dad767a1..9ea620f23c 100644 --- a/hw/ppc/trace-events +++ b/hw/ppc/trace-events @@ -13,10 +13,6 @@ spapr_pci_msi_retry(unsigned config_addr, unsigned req_n= um, unsigned max_irqs) " spapr_cas_failed(unsigned long n) "DT diff buffer is too small: %ld bytes" spapr_cas_continue(unsigned long n) "Copy changes to the guest: %ld bytes" =20 -# spapr_irq.c -spapr_irq_free(int src, int irq, int num) "Source#%d, first irq %d, %d irq= s" -spapr_irq_free_warn(int src, int irq) "Source#%d, irq %d is already free" - # spapr_hcall.c spapr_cas_pvr(uint32_t cur_pvr, bool explicit_match, uint32_t new_pvr) "cu= rrent=3D0x%x, explicit_match=3D%u, new=3D0x%x" spapr_h_resize_hpt_prepare(uint64_t flags, uint64_t shift) "flags=3D0x%"PR= Ix64", shift=3D%"PRIu64 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985770; cv=none; d=zoho.com; s=zohoarc; b=hE6Hp8ySXcR1RXBnWWdiKXgbB4N6yiE7LLxgUGnZ4ZnqJA09eHpX+4K6rTiDQyN4i6uLphSoLOp29oPYFELocQ+FfkQ4GzaPzS8kMahsOegFHXEH0+EihKzDpGKxqGyczSt6Op7WVpVU8eGNMVH5is5OYvcppOVkkCli+OD1Bxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985770; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=yhkFbql7i8zBVUccJ80LnYCg4bITLi2G4QDCW9dnVVc=; b=hNC1X9hpNm4+K3ffgIWD9tOFGZwk4fEm5pQ9QwwzaYOVfqne6KA28bA+gApswxSuHW/34vcqJ+N8p+z8NseoKnlpFs8X2jicevmCx69bX63zsEGgRZ9vON2FZZcIRcH4OBX5gTlLgaA63YVm5pWpv4WhxI5nidNdui4yPts2CaU= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985770068824.4977622571831; Tue, 1 Oct 2019 20:09:30 -0700 (PDT) Received: from localhost ([::1]:50938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV16-0001Df-KH for importer@patchew.org; Tue, 01 Oct 2019 23:09:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59845) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUko-0001eZ-7A for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002ue-4Q for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:37 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:54387) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002pn-GF; Tue, 01 Oct 2019 22:52:34 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf80wRGz9sRR; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=Bv6Jko921HCxbyel5yjjwjhiYIts5Sy5F0DjgsOXyeo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KvXz3kOm+2kocBIbOODNr912WgOHlTX1tadPKXGXrxEcSJbUytDbnkZ5ifihQN9jI +hgeQ62wILr8UwjrIeazkm4fLhQi8FHJyr6WBTOzRKnAUArul6gA98dD1gRLS8tm6f +kPc8fBGtYPA6VQ7vc2Eufaxz9jBnZJjJQLgsxW4= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 15/34] spapr: Handle freeing of multiple irqs in frontend only Date: Wed, 2 Oct 2019 12:51:49 +1000 Message-Id: <20191002025208.3487-16-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" spapr_irq_free() can be used to free multiple irqs at once. That's useful for its callers, but there's no need to make the individual backend hooks handle this. We can loop across the irqs in spapr_irq_free() itself and have the hooks just do one at time. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 27 ++++++++++++--------------- include/hw/ppc/spapr_irq.h | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 9919910a86..d2ac35bbe1 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -133,16 +133,13 @@ static int spapr_irq_claim_xics(SpaprMachineState *sp= apr, int irq, bool lsi, return 0; } =20 -static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq, int num) +static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq) { ICSState *ics =3D spapr->ics; uint32_t srcno =3D irq - ics->offset; - int i; =20 if (ics_valid_irq(ics, irq)) { - for (i =3D srcno; i < srcno + num; ++i) { - memset(&ics->irqs[i], 0, sizeof(ICSIRQState)); - } + memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); } } =20 @@ -269,13 +266,9 @@ static int spapr_irq_claim_xive(SpaprMachineState *spa= pr, int irq, bool lsi, return 0; } =20 -static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq, int num) +static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq) { - int i; - - for (i =3D irq; i < irq + num; ++i) { - spapr_xive_irq_free(spapr->xive, i); - } + spapr_xive_irq_free(spapr->xive, irq); } =20 static void spapr_irq_print_info_xive(SpaprMachineState *spapr, @@ -433,10 +426,10 @@ static int spapr_irq_claim_dual(SpaprMachineState *sp= apr, int irq, bool lsi, return ret; } =20 -static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq, int num) +static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq) { - spapr_irq_xics.free(spapr, irq, num); - spapr_irq_xive.free(spapr, irq, num); + spapr_irq_xics.free(spapr, irq); + spapr_irq_xive.free(spapr, irq); } =20 static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *m= on) @@ -635,7 +628,11 @@ int spapr_irq_claim(SpaprMachineState *spapr, int irq,= bool lsi, Error **errp) =20 void spapr_irq_free(SpaprMachineState *spapr, int irq, int num) { - spapr->irq->free(spapr, irq, num); + int i; + + for (i =3D irq; i < (irq + num); i++) { + spapr->irq->free(spapr, i); + } } =20 qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 9b60378e28..ed88b4599a 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -43,7 +43,7 @@ typedef struct SpaprIrq { =20 void (*init)(SpaprMachineState *spapr, Error **errp); int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); - void (*free)(SpaprMachineState *spapr, int irq, int num); + void (*free)(SpaprMachineState *spapr, int irq); void (*print_info)(SpaprMachineState *spapr, Monitor *mon); void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985785; cv=none; d=zoho.com; s=zohoarc; b=RwtRHhcGmX7gGZjW1Jl+k6s1OPZpdvd61YX9+0Rl+UZli9cujapOGnF9gAKwWM6G5OG/Jx2Ezyc7APhYHp/8eu0xoAYAyh3vaD64A0rZLz5BT31ri3qXePavtELEImBOzslDSgvOSFhmpawM0i1rmqnTgdtF/apwupxtN2CezY0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985785; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=saVLmzS+j94bLlRcg+l0ZAJrmXhJYRwj2scXFIzs0nQ=; b=US5NwPrdHO4ywHZQ7jMTqN/ZAk6u/I5Duez73RJHsleG8Vd6AWvfds1TTA5m5Fut76AvvvSEDg8z4yu99y4pYzPp24ymnWag8zFFdTYj5IHoKheGfbxri2OAiIxTDpmKIhKzYdkTx5wiDYu/U9OrNHBoVrgae3FGgYGUQvaWcvc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985785807786.745342590608; Tue, 1 Oct 2019 20:09:45 -0700 (PDT) Received: from localhost ([::1]:50940 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV1M-0001Yb-Is for importer@patchew.org; Tue, 01 Oct 2019 23:09:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59907) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkp-0001g4-2L for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002uL-6G for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:39019) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002po-Da; Tue, 01 Oct 2019 22:52:34 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf826WZz9sRQ; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=Wye/qEPS8JlbxvZNXB3cl6mwul/+AF68CA7+4TAPj1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JKRgt1VBPWAToOvQttyaYjprHL+OEZ/+Q9gCdNyRaI6I6h4aQp80KyRIF7qrg/scq sJIiW15F46t4Uvw67jLjgMyAETJSr3R0es3YoGWa1LP76UHVOsQdcirVdZz1C9sHyg kFdljDHbz1vav2MpepUJsYug4ggD8060Q2Z3AaT4= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 16/34] spapr, xics, xive: Better use of assert()s on irq claim/free paths Date: Wed, 2 Oct 2019 12:51:50 +1000 Message-Id: <20191002025208.3487-17-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The irq claim and free paths for both XICS and XIVE check for some validity conditions. Some of these represent genuine runtime failures, however others - particularly checking that the basic irq number is in a sane range - could only fail in the case of bugs in the callin code. Therefore use assert()s instead of runtime failures for those. In addition the non backend-specific part of the claim/free paths should only be used for PAPR external irqs, that is in the range SPAPR_XIRQ_BASE to the maximum irq number. Put assert()s for that into the top level dispatchers as well. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 8 ++------ hw/ppc/spapr_irq.c | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index c1c97192a7..47b5ec0b56 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -532,9 +532,7 @@ bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t lis= n, bool lsi) { XiveSource *xsrc =3D &xive->source; =20 - if (lisn >=3D xive->nr_irqs) { - return false; - } + assert(lisn < xive->nr_irqs); =20 /* * Set default values when allocating an IRQ number @@ -559,9 +557,7 @@ bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t lis= n, bool lsi) =20 bool spapr_xive_irq_free(SpaprXive *xive, uint32_t lisn) { - if (lisn >=3D xive->nr_irqs) { - return false; - } + assert(lisn < xive->nr_irqs); =20 xive->eat[lisn].w &=3D cpu_to_be64(~EAS_VALID); return true; diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index d2ac35bbe1..025c802e7b 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -118,11 +118,7 @@ static int spapr_irq_claim_xics(SpaprMachineState *spa= pr, int irq, bool lsi, ICSState *ics =3D spapr->ics; =20 assert(ics); - - if (!ics_valid_irq(ics, irq)) { - error_setg(errp, "IRQ %d is invalid", irq); - return -1; - } + assert(ics_valid_irq(ics, irq)); =20 if (!ics_irq_free(ics, irq - ics->offset)) { error_setg(errp, "IRQ %d is not free", irq); @@ -138,9 +134,9 @@ static void spapr_irq_free_xics(SpaprMachineState *spap= r, int irq) ICSState *ics =3D spapr->ics; uint32_t srcno =3D irq - ics->offset; =20 - if (ics_valid_irq(ics, irq)) { - memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); - } + assert(ics_valid_irq(ics, irq)); + + memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); } =20 static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *m= on) @@ -623,6 +619,9 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) =20 int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **e= rrp) { + assert(irq >=3D SPAPR_XIRQ_BASE); + assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + return spapr->irq->claim(spapr, irq, lsi, errp); } =20 @@ -630,6 +629,9 @@ void spapr_irq_free(SpaprMachineState *spapr, int irq, = int num) { int i; =20 + assert(irq >=3D SPAPR_XIRQ_BASE); + assert((irq + num) <=3D (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + for (i =3D irq; i < (irq + num); i++) { spapr->irq->free(spapr, i); } --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986285; cv=none; d=zoho.com; s=zohoarc; b=ReFxrN0x06cUU//sGISTz99jcJkjaEFzoZIf3YU8bbbbv2v4QyXkvHbS8LAFBpoUeOlK1nOyZcD/KQ5QSQPjXcG8nT5egKRQpdTVQbhjtQE9G210JVR06FadFnMdZF69jk0ArsvrSmluvcrMWEdZFTkdZwVZD4+KKUPSFcraToE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986285; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=UIeNV8xEabeV+0+GrDV3B7rs4gafjekDzuKmNTOSm+A=; b=j7UdlNg5+gGqCGyV8D9AoCms/t+BnltiKRn8rdRDUvWYYplQl2YYIYUSUrVkd8uULyET79qXBMUV7TppVymNAkj8o+IhHsEKfRV9DPO0Iw85O8n2+F2JAXITYLoUuN5Z/US1nniLqS5esmaCe+ckM7GZ0sZwUAsOFRlfaqQ9bHA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998628576898.94749732944229; Tue, 1 Oct 2019 20:18:05 -0700 (PDT) Received: from localhost ([::1]:51006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV9Q-0002Bt-A0 for importer@patchew.org; Tue, 01 Oct 2019 23:18:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59935) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkp-0001hG-VJ for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002us-89 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from ozlabs.org ([203.11.71.1]:56683) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002qV-IV; Tue, 01 Oct 2019 22:52:35 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf83XXRz9sRV; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=cy9gyLqDPGUtk2o5RpCfwdiKF45fFSPX8h9YpV09mio=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MvqF+XjA2IB5AH8OnuhOyXXU+PfRr0JZrXyOYFx7p3cbIYlWueqIKOQkavo6n6XCn h1jBJ07vy2I9zRpYpDSGPpqrkJO6F6UUP5tywJ+BOEJwJaoqe7rw29ZxZpIzMJTWhR O6OC5WkfzzGGo5jdeY+2WkUPuSr7WfN7CkxwxU3I= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 17/34] xive: Improve irq claim/free path Date: Wed, 2 Oct 2019 12:51:51 +1000 Message-Id: <20191002025208.3487-18-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" spapr_xive_irq_claim() returns a bool to indicate if it succeeded. But most of the callers and one callee use int return values and/or an Error * with more information instead. In any case, ints are a more common idiom for success/failure states than bools (one never knows what sense they'll be in). So instead change to an int return value to indicate presence of error + an Error * to describe the details through that call chain. It also didn't actually check if the irq was already claimed, which is one of the primary purposes of the claim path, so do that. spapr_xive_irq_free() also returned a bool... which no callers checked and was always true, so just drop it. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 20 +++++++++----------- hw/intc/spapr_xive_kvm.c | 8 ++++---- hw/ppc/spapr_irq.c | 11 +++++------ include/hw/ppc/spapr_xive.h | 4 ++-- include/hw/ppc/xive.h | 2 +- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 47b5ec0b56..04879abf2e 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -528,12 +528,17 @@ static void spapr_xive_register_types(void) =20 type_init(spapr_xive_register_types) =20 -bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t lisn, bool lsi) +int spapr_xive_irq_claim(SpaprXive *xive, int lisn, bool lsi, Error **errp) { XiveSource *xsrc =3D &xive->source; =20 assert(lisn < xive->nr_irqs); =20 + if (xive_eas_is_valid(&xive->eat[lisn])) { + error_setg(errp, "IRQ %d is not free", lisn); + return -EBUSY; + } + /* * Set default values when allocating an IRQ number */ @@ -543,24 +548,17 @@ bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t l= isn, bool lsi) } =20 if (kvm_irqchip_in_kernel()) { - Error *local_err =3D NULL; - - kvmppc_xive_source_reset_one(xsrc, lisn, &local_err); - if (local_err) { - error_report_err(local_err); - return false; - } + return kvmppc_xive_source_reset_one(xsrc, lisn, errp); } =20 - return true; + return 0; } =20 -bool spapr_xive_irq_free(SpaprXive *xive, uint32_t lisn) +void spapr_xive_irq_free(SpaprXive *xive, int lisn) { assert(lisn < xive->nr_irqs); =20 xive->eat[lisn].w &=3D cpu_to_be64(~EAS_VALID); - return true; } =20 /* diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index 2006f96aec..51b334b676 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -232,14 +232,14 @@ void kvmppc_xive_sync_source(SpaprXive *xive, uint32_= t lisn, Error **errp) * only need to inform the KVM XIVE device about their type: LSI or * MSI. */ -void kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **err= p) +int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp) { SpaprXive *xive =3D SPAPR_XIVE(xsrc->xive); uint64_t state =3D 0; =20 /* The KVM XIVE device is not in use */ if (xive->fd =3D=3D -1) { - return; + return -ENODEV; } =20 if (xive_source_irq_is_lsi(xsrc, srcno)) { @@ -249,8 +249,8 @@ void kvmppc_xive_source_reset_one(XiveSource *xsrc, int= srcno, Error **errp) } } =20 - kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_SOURCE, srcno, &state, - true, errp); + return kvm_device_access(xive->fd, KVM_DEV_XIVE_GRP_SOURCE, srcno, &st= ate, + true, errp); } =20 static void kvmppc_xive_source_reset(XiveSource *xsrc, Error **errp) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 025c802e7b..516bf00a35 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -246,7 +246,10 @@ static void spapr_irq_init_xive(SpaprMachineState *spa= pr, Error **errp) =20 /* Enable the CPU IPIs */ for (i =3D 0; i < nr_servers; ++i) { - spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, false); + if (spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, + false, errp) < 0) { + return; + } } =20 spapr_xive_hcall_init(spapr); @@ -255,11 +258,7 @@ static void spapr_irq_init_xive(SpaprMachineState *spa= pr, Error **errp) static int spapr_irq_claim_xive(SpaprMachineState *spapr, int irq, bool ls= i, Error **errp) { - if (!spapr_xive_irq_claim(spapr->xive, irq, lsi)) { - error_setg(errp, "IRQ %d is invalid", irq); - return -1; - } - return 0; + return spapr_xive_irq_claim(spapr->xive, irq, lsi, errp); } =20 static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq) diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index bfd40f01d8..0df20a6590 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -54,8 +54,8 @@ typedef struct SpaprXive { */ #define SPAPR_XIVE_BLOCK_ID 0x0 =20 -bool spapr_xive_irq_claim(SpaprXive *xive, uint32_t lisn, bool lsi); -bool spapr_xive_irq_free(SpaprXive *xive, uint32_t lisn); +int spapr_xive_irq_claim(SpaprXive *xive, int lisn, bool lsi, Error **errp= ); +void spapr_xive_irq_free(SpaprXive *xive, int lisn); void spapr_xive_pic_print_info(SpaprXive *xive, Monitor *mon); int spapr_xive_post_load(SpaprXive *xive, int version_id); =20 diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 6d38755f84..fd3319bd32 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -425,7 +425,7 @@ static inline uint32_t xive_nvt_cam_line(uint8_t nvt_bl= k, uint32_t nvt_idx) * KVM XIVE device helpers */ =20 -void kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **err= p); +int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp= ); void kvmppc_xive_source_set_irq(void *opaque, int srcno, int val); void kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **errp); void kvmppc_xive_cpu_synchronize_state(XiveTCTX *tctx, Error **errp); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986753; cv=none; d=zoho.com; s=zohoarc; b=JZ3ApO2JTiUZsRWi1kiuQ/2u6+4n6T8JjX5Jv1ULMl33tNfMinOQbEKVJQVX1jGusdiBmXQT8Ya/hg387NWMMNEzqlgndL5nAdNxaAxcroT2MugdLzf1vVJmNoKjFagngjoBhtKpbLjKGRUUOMLQX4SSjim8/USNkIJyqR+E4q8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986753; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=jCOZ9/ev7GB9BC0JLQfVjGWJXjUYxPKACoOWXOjE37o=; b=U3tNoS742ZHjhejPGocVEuONNXhWBFXFlN8cfEA8CA6hbrKW2TaHBUu5uCxWEV0NYySzfvOXbt/6kg2qqpD8qtAf1h+t61wA5sf3r4yEINEW4v205G2kAZ22emily/yDq5QuyJ15FLK2TfeBctD8sYzn1cK87PQmcnfbuil67Q4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998675352972.70965000919466; Tue, 1 Oct 2019 20:25:53 -0700 (PDT) Received: from localhost ([::1]:51096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVGy-0002pV-Bd for importer@patchew.org; Tue, 01 Oct 2019 23:25:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59946) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkq-0001hQ-3K for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002vf-JS for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from ozlabs.org ([203.11.71.1]:48069) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002qf-R4; Tue, 01 Oct 2019 22:52:35 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf85BxMz9sRh; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=FwPA1UCWDxFC1kFf5rMGk2U3mKvgbSbEKO/0mZf2f+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YZUi6Dzh+gsfk/MD4zesJ0f+nLU/7q+RliQxQKfhYJ6HmHhhg+trdvCi7IopUldgP bWNwbLBl6uxdqjNSLZaXqhMhq928bn/2kZKfk9tFyRWf9eZAAbEbVpYwwuGRZfSlqH zLAvIh6HS7p1iuThZT/Wcz/WkalF115dkT8EdIJA= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 18/34] spapr: Use less cryptic representation of which irq backends are supported Date: Wed, 2 Oct 2019 12:51:52 +1000 Message-Id: <20191002025208.3487-19-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" SpaprIrq::ov5 stores the value for a particular byte in PAPR option vector 5 which indicates whether XICS, XIVE or both interrupt controllers are available. As usual for PAPR, the encoding is kind of overly complicated and confusing (though to be fair there are some backwards compat things it has to handle). But to make our internal code clearer, have SpaprIrq encode more directly which backends are available as two booleans, and derive the OV5 value from that at the point we need it. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 15 ++++++++++++--- hw/ppc/spapr_hcall.c | 6 +++--- hw/ppc/spapr_irq.c | 12 ++++++++---- include/hw/ppc/spapr_irq.h | 3 ++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 43920c140d..514a17ae74 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1066,19 +1066,28 @@ static void spapr_dt_ov5_platform_support(SpaprMach= ineState *spapr, void *fdt, PowerPCCPU *first_ppc_cpu =3D POWERPC_CPU(first_cpu); =20 char val[2 * 4] =3D { - 23, spapr->irq->ov5, /* Xive mode. */ + 23, 0x00, /* XICS / XIVE mode */ 24, 0x00, /* Hash/Radix, filled in below. */ 25, 0x00, /* Hash options: Segment Tables =3D=3D no, GTSE =3D=3D n= o. */ 26, 0x40, /* Radix options: GTSE =3D=3D yes. */ }; =20 + if (spapr->irq->xics && spapr->irq->xive) { + val[1] =3D SPAPR_OV5_XIVE_BOTH; + } else if (spapr->irq->xive) { + val[1] =3D SPAPR_OV5_XIVE_EXPLOIT; + } else { + assert(spapr->irq->xics); + val[1] =3D SPAPR_OV5_XIVE_LEGACY; + } + if (!ppc_check_compat(first_ppc_cpu, CPU_POWERPC_LOGICAL_3_00, 0, first_ppc_cpu->compat_pvr)) { /* * If we're in a pre POWER9 compat mode then the guest should * do hash and use the legacy interrupt mode */ - val[1] =3D 0x00; /* XICS */ + val[1] =3D SPAPR_OV5_XIVE_LEGACY; /* XICS */ val[3] =3D 0x00; /* Hash */ } else if (kvm_enabled()) { if (kvmppc_has_cap_mmu_radix() && kvmppc_has_cap_mmu_hash_v3()) { @@ -2767,7 +2776,7 @@ static void spapr_machine_init(MachineState *machine) spapr_ovec_set(spapr->ov5, OV5_DRMEM_V2); =20 /* advertise XIVE on POWER9 machines */ - if (spapr->irq->ov5 & (SPAPR_OV5_XIVE_EXPLOIT | SPAPR_OV5_XIVE_BOTH)) { + if (spapr->irq->xive) { spapr_ovec_set(spapr->ov5, OV5_XIVE_EXPLOIT); } =20 diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 3d3a67149a..140f05c1c6 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1784,13 +1784,13 @@ static target_ulong h_client_architecture_support(P= owerPCCPU *cpu, * terminate the boot. */ if (guest_xive) { - if (spapr->irq->ov5 =3D=3D SPAPR_OV5_XIVE_LEGACY) { + if (!spapr->irq->xive) { error_report( "Guest requested unavailable interrupt mode (XIVE), try the ic-mode=3Dxive= or ic-mode=3Ddual machine property"); exit(EXIT_FAILURE); } } else { - if (spapr->irq->ov5 =3D=3D SPAPR_OV5_XIVE_EXPLOIT) { + if (!spapr->irq->xics) { error_report( "Guest requested unavailable interrupt mode (XICS), either don't set the i= c-mode machine property or try ic-mode=3Dxics or ic-mode=3Ddual"); exit(EXIT_FAILURE); @@ -1804,7 +1804,7 @@ static target_ulong h_client_architecture_support(Pow= erPCCPU *cpu, */ if (!spapr->cas_reboot) { spapr->cas_reboot =3D spapr_ovec_test(ov5_updates, OV5_XIVE_EXPLOI= T) - && spapr->irq->ov5 & SPAPR_OV5_XIVE_BOTH; + && spapr->irq->xics && spapr->irq->xive; } =20 spapr_ovec_cleanup(ov5_updates); diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 516bf00a35..3ac67ba0c7 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -210,7 +210,8 @@ static void spapr_irq_init_kvm_xics(SpaprMachineState *= spapr, Error **errp) SpaprIrq spapr_irq_xics =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, - .ov5 =3D SPAPR_OV5_XIVE_LEGACY, + .xics =3D true, + .xive =3D false, =20 .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, @@ -350,7 +351,8 @@ static void spapr_irq_init_kvm_xive(SpaprMachineState *= spapr, Error **errp) SpaprIrq spapr_irq_xive =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, - .ov5 =3D SPAPR_OV5_XIVE_EXPLOIT, + .xics =3D false, + .xive =3D true, =20 .init =3D spapr_irq_init_xive, .claim =3D spapr_irq_claim_xive, @@ -511,7 +513,8 @@ static void spapr_irq_set_irq_dual(void *opaque, int ir= q, int val) SpaprIrq spapr_irq_dual =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, - .ov5 =3D SPAPR_OV5_XIVE_BOTH, + .xics =3D true, + .xive =3D true, =20 .init =3D spapr_irq_init_dual, .claim =3D spapr_irq_claim_dual, @@ -754,7 +757,8 @@ int spapr_irq_find(SpaprMachineState *spapr, int num, b= ool align, Error **errp) SpaprIrq spapr_irq_xics_legacy =3D { .nr_xirqs =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, .nr_msis =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, - .ov5 =3D SPAPR_OV5_XIVE_LEGACY, + .xics =3D true, + .xive =3D false, =20 .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index ed88b4599a..d3f3b85eb9 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -39,7 +39,8 @@ void spapr_irq_msi_free(SpaprMachineState *spapr, int irq= , uint32_t num); typedef struct SpaprIrq { uint32_t nr_xirqs; uint32_t nr_msis; - uint8_t ov5; + bool xics; + bool xive; =20 void (*init)(SpaprMachineState *spapr, Error **errp); int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986434; cv=none; d=zoho.com; s=zohoarc; b=Uo/g4KgeJYwIu1vjF7q1vxFPT18IXHXUODMXWLUGVrHBxBQ6e98ckJB17Y4c93MIap9HfUH5D9muZcyK7ZvyICab9jR/khHhlXTzuTDzDz0QZfMDa/9JeB8kdSuA61+h5Ia1tjWrw6rqIoLUqW1voieeM5Hpl6BAlrdjRZe8WA4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986434; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=jOhzTHdhfNwax+af/G0rtLbP42yTkCl/TVVE12jUcTk=; b=F2P5ISD4CmBMgne1Fok3YAFe7syioTEe+SwKWkeBUSsmoH0lozNf1ru50YlQVlc3/+oKwALB/Q+sOQm6tbTn4fFz54MtaQymEolorVASeFT3UhGtozNE630/qRakhl/M9T0CHViTkkxHmU0AXH1MDPrXeEtwb2r3AuP/v1CCkV8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986434072264.10398318425905; Tue, 1 Oct 2019 20:20:34 -0700 (PDT) Received: from localhost ([::1]:51036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVBk-0005VL-GM for importer@patchew.org; Tue, 01 Oct 2019 23:20:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59873) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUko-0001fR-OR for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002v8-Dl for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:38 -0400 Received: from ozlabs.org ([203.11.71.1]:48503) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002qe-KE; Tue, 01 Oct 2019 22:52:35 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf85sygz9sRX; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=ET03O7NV0B342KhddhNyJoe1JCAACjXCRRmULjrrXw0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oVs11NJJErkDQdZdoJjCHg/vpM8N9Sqtu8efmdRaV4NjfgICoMltJhTW80Z74JnMP x7ivJxUYzf6nmwWLEBcITVOtbOJy3YiAbszeazxg3SNs7FzlzYEf7Pjfw6wuu9SwHy zf1Qyzr2QAQFFOoTu0RzaFT8R7j8jhJdjMep3QEE= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 19/34] spapr: Add return value to spapr_irq_check() Date: Wed, 2 Oct 2019 12:51:53 +1000 Message-Id: <20191002025208.3487-20-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Explicitly return success or failure, rather than just relying on the Error ** parameter. This makes handling it less verbose in the caller. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 3ac67ba0c7..0413fbd0a3 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -529,7 +529,7 @@ SpaprIrq spapr_irq_dual =3D { }; =20 =20 -static void spapr_irq_check(SpaprMachineState *spapr, Error **errp) +static int spapr_irq_check(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); =20 @@ -545,7 +545,7 @@ static void spapr_irq_check(SpaprMachineState *spapr, E= rror **errp) */ if (spapr->irq =3D=3D &spapr_irq_dual) { spapr->irq =3D &spapr_irq_xics; - return; + return 0; } =20 /* @@ -565,7 +565,7 @@ static void spapr_irq_check(SpaprMachineState *spapr, E= rror **errp) */ if (spapr->irq =3D=3D &spapr_irq_xive) { error_setg(errp, "XIVE-only machines require a POWER9 CPU"); - return; + return -1; } } =20 @@ -579,8 +579,10 @@ static void spapr_irq_check(SpaprMachineState *spapr, = Error **errp) machine_kernel_irqchip_required(machine) && xics_kvm_has_broken_disconnect(spapr)) { error_setg(errp, "KVM is too old to support ic-mode=3Ddual,kernel-= irqchip=3Don"); - return; + return -1; } + + return 0; } =20 /* @@ -589,7 +591,6 @@ static void spapr_irq_check(SpaprMachineState *spapr, E= rror **errp) void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); - Error *local_err =3D NULL; =20 if (machine_kernel_irqchip_split(machine)) { error_setg(errp, "kernel_irqchip split mode not supported on pseri= es"); @@ -602,9 +603,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) return; } =20 - spapr_irq_check(spapr, &local_err); - if (local_err) { - error_propagate(errp, local_err); + if (spapr_irq_check(spapr, errp) < 0) { return; } =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985516; cv=none; d=zoho.com; s=zohoarc; b=aDSYp68KdHM6fdehgmqtA5RwabfmYxNacf5hXgwCfJ8kF/6UZWbbRMf29NxidOd+Gm/dppp338hHeLaqGbSuLsHfq0ABnJsN+lj1YMItOLFCknIXBzm7ellCkZnEuLWoSh/q8DXg+6QhwTCtJyt6E0HIc7+X+CYiH96SO4l3nUM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985516; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=+BvYN5ChWFgqwBM0iJLmk45ueBXRNGItlGst5QNUB3g=; b=SKE3UBDPMFReTFw+od0HFbIJ1jUhlbF00uQtbPxcwrKj8dFEnEUq5CD0waUzvdn/nVHiBqce8UZMd+gH1ekW3XxkyTQt9HqcA5jDhdA1yNMaJa/ZdW1QIb0BxXQrPzMBqBjhuKz1bJpFQSvpjD7CzmtQJDTleyWtQ8PnCNXsYXc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985516746325.6480901484954; Tue, 1 Oct 2019 20:05:16 -0700 (PDT) Received: from localhost ([::1]:50912 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUx1-00054A-Cm for importer@patchew.org; Tue, 01 Oct 2019 23:05:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59932) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkp-0001h6-Sy for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkl-0002w4-Mw for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:39 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:47843) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkk-0002qo-Nx; Tue, 01 Oct 2019 22:52:35 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf86pl1z9sRk; Wed, 2 Oct 2019 12:52:16 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984736; bh=C5o+5j2lY/c6Dtuq+8PtKvrbepJXSlhW+IzR13Xojbs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Uulfq0Ur2vAXy5gOpabzt4p4RwCJOgXnAvLFrhOZqWR1FFB69iykL7cJ6nlA8im7w hKWFVgmxbMgso3zqJwsvGmhkA3D7SflIphdMqLGRL71ocJtNBkjtGr29N+HDQM6Aum 07W5dhqUeY8SVYdd6Z52sUAVioaSrgccT6OOHBf4= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 20/34] spapr: Eliminate SpaprIrq::init hook Date: Wed, 2 Oct 2019 12:51:54 +1000 Message-Id: <20191002025208.3487-21-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method is used to set up the interrupt backends for the current configuration. However, this means some confusing redirection between the "dual" mode init and the init hooks for xics only and xive only modes. Since we now have simple flags indicating whether XICS and/or XIVE are supported, it's easier to just open code each initialization directly in spapr_irq_init(). This will also make some future cleanups simpler. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 130 +++++++++++++++++-------------------- include/hw/ppc/spapr_irq.h | 1 - 2 files changed, 61 insertions(+), 70 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 0413fbd0a3..457eabe24c 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -92,26 +92,6 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr, * XICS IRQ backend. */ =20 -static void spapr_irq_init_xics(SpaprMachineState *spapr, Error **errp) -{ - Object *obj; - Error *local_err =3D NULL; - - obj =3D object_new(TYPE_ICS_SPAPR); - object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); - object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), - &error_fatal); - object_property_set_int(obj, spapr->irq->nr_xirqs, - "nr-irqs", &error_fatal); - object_property_set_bool(obj, true, "realized", &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - spapr->ics =3D ICS_SPAPR(obj); -} - static int spapr_irq_claim_xics(SpaprMachineState *spapr, int irq, bool ls= i, Error **errp) { @@ -213,7 +193,6 @@ SpaprIrq spapr_irq_xics =3D { .xics =3D true, .xive =3D false, =20 - .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, @@ -228,33 +207,6 @@ SpaprIrq spapr_irq_xics =3D { /* * XIVE IRQ backend. */ -static void spapr_irq_init_xive(SpaprMachineState *spapr, Error **errp) -{ - uint32_t nr_servers =3D spapr_max_server_number(spapr); - DeviceState *dev; - int i; - - dev =3D qdev_create(NULL, TYPE_SPAPR_XIVE); - qdev_prop_set_uint32(dev, "nr-irqs", - spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE); - /* - * 8 XIVE END structures per CPU. One for each available priority - */ - qdev_prop_set_uint32(dev, "nr-ends", nr_servers << 3); - qdev_init_nofail(dev); - - spapr->xive =3D SPAPR_XIVE(dev); - - /* Enable the CPU IPIs */ - for (i =3D 0; i < nr_servers; ++i) { - if (spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, - false, errp) < 0) { - return; - } - } - - spapr_xive_hcall_init(spapr); -} =20 static int spapr_irq_claim_xive(SpaprMachineState *spapr, int irq, bool ls= i, Error **errp) @@ -354,7 +306,6 @@ SpaprIrq spapr_irq_xive =3D { .xics =3D false, .xive =3D true, =20 - .init =3D spapr_irq_init_xive, .claim =3D spapr_irq_claim_xive, .free =3D spapr_irq_free_xive, .print_info =3D spapr_irq_print_info_xive, @@ -385,23 +336,6 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *= spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static void spapr_irq_init_dual(SpaprMachineState *spapr, Error **errp) -{ - Error *local_err =3D NULL; - - spapr_irq_xics.init(spapr, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - spapr_irq_xive.init(spapr, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } -} - static int spapr_irq_claim_dual(SpaprMachineState *spapr, int irq, bool ls= i, Error **errp) { @@ -516,7 +450,6 @@ SpaprIrq spapr_irq_dual =3D { .xics =3D true, .xive =3D true, =20 - .init =3D spapr_irq_init_dual, .claim =3D spapr_irq_claim_dual, .free =3D spapr_irq_free_dual, .print_info =3D spapr_irq_print_info_dual, @@ -612,7 +545,67 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **= errp) spapr_irq_msi_init(spapr, spapr->irq->nr_msis); } =20 - spapr->irq->init(spapr, errp); + if (spapr->irq->xics) { + Error *local_err =3D NULL; + Object *obj; + + obj =3D object_new(TYPE_ICS_SPAPR); + object_property_add_child(OBJECT(spapr), "ics", obj, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + object_property_add_const_link(obj, ICS_PROP_XICS, OBJECT(spapr), + &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + object_property_set_int(obj, spapr->irq->nr_xirqs, "nr-irqs", + &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + object_property_set_bool(obj, true, "realized", &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + spapr->ics =3D ICS_SPAPR(obj); + } + + if (spapr->irq->xive) { + uint32_t nr_servers =3D spapr_max_server_number(spapr); + DeviceState *dev; + int i; + + dev =3D qdev_create(NULL, TYPE_SPAPR_XIVE); + qdev_prop_set_uint32(dev, "nr-irqs", + spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE); + /* + * 8 XIVE END structures per CPU. One for each available + * priority + */ + qdev_prop_set_uint32(dev, "nr-ends", nr_servers << 3); + qdev_init_nofail(dev); + + spapr->xive =3D SPAPR_XIVE(dev); + + /* Enable the CPU IPIs */ + for (i =3D 0; i < nr_servers; ++i) { + if (spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, + false, errp) < 0) { + return; + } + } + + spapr_xive_hcall_init(spapr); + } =20 spapr->qirqs =3D qemu_allocate_irqs(spapr->irq->set_irq, spapr, spapr->irq->nr_xirqs + SPAPR_XIRQ_BA= SE); @@ -759,7 +752,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .xics =3D true, .xive =3D false, =20 - .init =3D spapr_irq_init_xics, .claim =3D spapr_irq_claim_xics, .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index d3f3b85eb9..69a37f608e 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -42,7 +42,6 @@ typedef struct SpaprIrq { bool xics; bool xive; =20 - void (*init)(SpaprMachineState *spapr, Error **errp); int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); void (*free)(SpaprMachineState *spapr, int irq); void (*print_info)(SpaprMachineState *spapr, Monitor *mon); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986059; cv=none; d=zoho.com; s=zohoarc; b=MwE9X3PtnHKXAxmDy2CDtjw7v2mjoj7xOZzKxDzFR/g9KkZW5lhBCscgFAwU1lTWpWNveNQCa75oqkFIPmnqH0ll07cW2AtPJh8CoVNrWOzKpzIluBAIiB+Zn/eEIhbNRRHCQFJF+0HDvwvBdgN4GwPe9yM6eopc1JSZn9d1YP0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986059; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=5wbWRkq/3prB1nGLSG3g1iXg2jMJGl8zDUkD5BTzpnM=; b=V03+ruXNl5E5+8ANwin4JJZxprnBUK9GQdUkw4qaIomCCsb9dmk7o1lTob8Xp1X2SXhUqiVCdTpHqEpCxRiioIk9i7pbIrH7CfOxIkcODqlUlYrfeoT2y+ssChypAbxkTXmAITtDWxH1sQMqMGnJs/D3a0kqxzi8U/fjZys0+No= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15699860585968.72735262819981; Tue, 1 Oct 2019 20:14:18 -0700 (PDT) Received: from localhost ([::1]:50964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV5i-0005dx-UO for importer@patchew.org; Tue, 01 Oct 2019 23:14:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59965) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkq-0001hw-I3 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUkn-0002zg-VY for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:40 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:58857) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkn-0002va-Fy; Tue, 01 Oct 2019 22:52:37 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf90XDDz9sRp; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=QE+VjKlHW32sv6S8hNVKI2dRx7I/EdLEKnK8b1S4tII=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bG2r2QK7g3WSi4P7+wGOisxb9EGx8uGVh58bv7tQsi7KocRuqs97t0Hv+UUJi3H8c UOd35/AmdO2ImNyzuuxkDZKl9wRfSZUgWqOjjPTiVHF94uVIPCHpMgk35cppBOcS0w hJ6JI/4vpS7JbqunFsouNREjhQuKkeSh9OUpGYTA= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 21/34] spapr, xics, xive: Introduce SpaprInterruptController QOM interface Date: Wed, 2 Oct 2019 12:51:55 +1000 Message-Id: <20191002025208.3487-22-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The SpaprIrq structure is used to represent ths spapr machine's irq backend. Except that it kind of conflates two concepts: one is the backend proper - a specific interrupt controller that we might or might not be using, the other is the irq configuration which covers the layout of irq space and which interrupt controllers are allowed. This leads to some pretty confusing code paths for the "dual" configuration where its hooks redirect to other SpaprIrq structures depending on the currently active irq controller. To clean this up, we start by introducing a new SpaprInterruptController QOM interface to represent strictly an interrupt controller backend, not counting anything configuration related. We implement this interface in the XICs and XIVE interrupt controllers, and in future we'll move relevant methods from SpaprIrq into it. Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- hw/intc/spapr_xive.c | 4 ++++ hw/intc/xics_spapr.c | 4 ++++ hw/ppc/spapr_irq.c | 13 +++++++++++++ include/hw/ppc/spapr_irq.h | 14 ++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 04879abf2e..b67e9c3245 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -519,6 +519,10 @@ static const TypeInfo spapr_xive_info =3D { .instance_init =3D spapr_xive_instance_init, .instance_size =3D sizeof(SpaprXive), .class_init =3D spapr_xive_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_SPAPR_INTC }, + { } + }, }; =20 static void spapr_xive_register_types(void) diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 6e5eb24b3c..4874e6be55 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -343,6 +343,10 @@ static const TypeInfo ics_spapr_info =3D { .name =3D TYPE_ICS_SPAPR, .parent =3D TYPE_ICS, .class_init =3D ics_spapr_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_SPAPR_INTC }, + { } + }, }; =20 static void xics_spapr_register_types(void) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 457eabe24c..8791dec1ba 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -23,6 +23,12 @@ =20 #include "trace.h" =20 +static const TypeInfo spapr_intc_info =3D { + .name =3D TYPE_SPAPR_INTC, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(SpaprInterruptControllerClass), +}; + void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis) { spapr->irq_map_nr =3D nr_msis; @@ -762,3 +768,10 @@ SpaprIrq spapr_irq_xics_legacy =3D { .set_irq =3D spapr_irq_set_irq_xics, .init_kvm =3D spapr_irq_init_kvm_xics, }; + +static void spapr_irq_register_types(void) +{ + type_register_static(&spapr_intc_info); +} + +type_init(spapr_irq_register_types) diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 69a37f608e..b9398e0be3 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -31,6 +31,20 @@ =20 typedef struct SpaprMachineState SpaprMachineState; =20 +typedef struct SpaprInterruptController SpaprInterruptController; + +#define TYPE_SPAPR_INTC "spapr-interrupt-controller" +#define SPAPR_INTC(obj) \ + INTERFACE_CHECK(SpaprInterruptController, (obj), TYPE_SPAPR_INTC) +#define SPAPR_INTC_CLASS(klass) \ + OBJECT_CLASS_CHECK(SpaprInterruptControllerClass, (klass), TYPE_SPAPR_= INTC) +#define SPAPR_INTC_GET_CLASS(obj) \ + OBJECT_GET_CLASS(SpaprInterruptControllerClass, (obj), TYPE_SPAPR_INTC) + +typedef struct SpaprInterruptControllerClass { + InterfaceClass parent; +} SpaprInterruptControllerClass; + void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis); int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, Error **errp); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986932; cv=none; d=zoho.com; s=zohoarc; b=aoRqbQ8ctFrmvlaRvNjSHsgtVUurWctusfrZH0XahwoikYO8pM2S9XFRNMXDSxqzhShhCSpmBQNcluodhPURX0OPtJvidUlUdaBxSuwV6r/T3dZVf0VdK5pT3sNniTrfwW7hZ4lkzKde5Mj4jIkSy+3vebjk42ZZPNunjKSGYlQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986932; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=040N6xwkSoMOwDETTsIc4yC7stFhUlxMKRpNWysKz6s=; b=XaglryqinD4LFxuOc/cYAbS7ga8zAdG5/w9StMbDwnRUTV8MR8p/FGOj6xrBOxezU9UzKvI8F2pSjKxm2IN/jN6b2qv7hMkpivOJ1sEUT8WD9faTI7rWs5yoksOa5nAjKb5Ii+G/cnKlEuTzoEuBEtSgLDLTLrlYqPiYgIYu9fw= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986932484492.9549748943572; Tue, 1 Oct 2019 20:28:52 -0700 (PDT) Received: from localhost ([::1]:51124 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVJq-0005H3-Tw for importer@patchew.org; Tue, 01 Oct 2019 23:28:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60591) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlC-00024z-MP for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUl9-0003Sv-Ao for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:02 -0400 Received: from ozlabs.org ([203.11.71.1]:55341) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUl8-0002vl-TX; Tue, 01 Oct 2019 22:52:59 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf92zddz9sRt; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=FclpKTxoEO3jFrC7YiMWIFQ0nYLJ6Nkpx5shXUL/wU0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E8W8f+BSFezoh2vrN0Y7bruKWl1sVNyYJDDs+1xnBtmHR2DuMgKhV17vimNUmCNFy lWIkxmqmE1kABT720VJVlSvzHOB+bCiPFfzsrFUspeejUbFUgdkX9khSFu5yFKCrUG O2LXOcnsg/+hZLQ/39lhcNn1TyXwc0j3ecyPEogk= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 22/34] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController Date: Wed, 2 Oct 2019 12:51:56 +1000 Message-Id: <20191002025208.3487-23-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method essentially represents code which belongs to the interrupt controller, but needs to be called on all possible intcs, rather than just the currently active one. The "dual" version therefore calls into the xics and xive versions confusingly. Handle this more directly, by making it instead a method on the intc backend, and always calling it on every backend that exists. While we're there, streamline the error reporting a bit. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 25 ++++++++++++ hw/intc/xics_spapr.c | 18 +++++++++ hw/ppc/spapr_cpu_core.c | 3 +- hw/ppc/spapr_irq.c | 81 +++++++++++--------------------------- include/hw/ppc/spapr_irq.h | 13 +++++- 5 files changed, 79 insertions(+), 61 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index b67e9c3245..9338daba3d 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -495,10 +495,33 @@ static Property spapr_xive_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static int spapr_xive_cpu_intc_create(SpaprInterruptController *intc, + PowerPCCPU *cpu, Error **errp) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + Object *obj; + SpaprCpuState *spapr_cpu =3D spapr_cpu_state(cpu); + + obj =3D xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(xive), errp); + if (!obj) { + return -1; + } + + spapr_cpu->tctx =3D XIVE_TCTX(obj); + + /* + * (TCG) Early setting the OS CAM line for hotplugged CPUs as they + * don't beneficiate from the reset of the XIVE IRQ backend + */ + spapr_xive_set_tctx_os_cam(spapr_cpu->tctx); + return 0; +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); XiveRouterClass *xrc =3D XIVE_ROUTER_CLASS(klass); + SpaprInterruptControllerClass *sicc =3D SPAPR_INTC_CLASS(klass); =20 dc->desc =3D "sPAPR XIVE Interrupt Controller"; dc->props =3D spapr_xive_properties; @@ -511,6 +534,8 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) xrc->get_nvt =3D spapr_xive_get_nvt; xrc->write_nvt =3D spapr_xive_write_nvt; xrc->get_tctx =3D spapr_xive_get_tctx; + + sicc->cpu_intc_create =3D spapr_xive_cpu_intc_create; } =20 static const TypeInfo spapr_xive_info =3D { diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 4874e6be55..946311b858 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -330,13 +330,31 @@ void spapr_dt_xics(SpaprMachineState *spapr, uint32_t= nr_servers, void *fdt, _FDT(fdt_setprop_cell(fdt, node, "phandle", phandle)); } =20 +static int xics_spapr_cpu_intc_create(SpaprInterruptController *intc, + PowerPCCPU *cpu, Error **errp) +{ + ICSState *ics =3D ICS_SPAPR(intc); + Object *obj; + SpaprCpuState *spapr_cpu =3D spapr_cpu_state(cpu); + + obj =3D icp_create(OBJECT(cpu), TYPE_ICP, ics->xics, errp); + if (!obj) { + return -1; + } + + spapr_cpu->icp =3D ICP(obj); + return 0; +} + static void ics_spapr_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); ICSStateClass *isc =3D ICS_CLASS(klass); + SpaprInterruptControllerClass *sicc =3D SPAPR_INTC_CLASS(klass); =20 device_class_set_parent_realize(dc, ics_spapr_realize, &isc->parent_realize); + sicc->cpu_intc_create =3D xics_spapr_cpu_intc_create; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 1d93de8161..3e4302c7d5 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -237,8 +237,7 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMa= chineState *spapr, qemu_register_reset(spapr_cpu_reset, cpu); spapr_cpu_reset(cpu); =20 - spapr->irq->cpu_intc_create(spapr, cpu, &local_err); - if (local_err) { + if (spapr_irq_cpu_intc_create(spapr, cpu, &local_err) < 0) { goto error_unregister; } =20 diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 8791dec1ba..9cb2fc71ca 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -138,23 +138,6 @@ static void spapr_irq_print_info_xics(SpaprMachineStat= e *spapr, Monitor *mon) ics_pic_print_info(spapr->ics, mon); } =20 -static void spapr_irq_cpu_intc_create_xics(SpaprMachineState *spapr, - PowerPCCPU *cpu, Error **errp) -{ - Error *local_err =3D NULL; - Object *obj; - SpaprCpuState *spapr_cpu =3D spapr_cpu_state(cpu); - - obj =3D icp_create(OBJECT(cpu), TYPE_ICP, XICS_FABRIC(spapr), - &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - spapr_cpu->icp =3D ICP(obj); -} - static int spapr_irq_post_load_xics(SpaprMachineState *spapr, int version_= id) { if (!kvm_irqchip_in_kernel()) { @@ -203,7 +186,6 @@ SpaprIrq spapr_irq_xics =3D { .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, - .cpu_intc_create =3D spapr_irq_cpu_intc_create_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .set_irq =3D spapr_irq_set_irq_xics, @@ -239,28 +221,6 @@ static void spapr_irq_print_info_xive(SpaprMachineStat= e *spapr, spapr_xive_pic_print_info(spapr->xive, mon); } =20 -static void spapr_irq_cpu_intc_create_xive(SpaprMachineState *spapr, - PowerPCCPU *cpu, Error **errp) -{ - Error *local_err =3D NULL; - Object *obj; - SpaprCpuState *spapr_cpu =3D spapr_cpu_state(cpu); - - obj =3D xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(spapr->xive), &local= _err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - spapr_cpu->tctx =3D XIVE_TCTX(obj); - - /* - * (TCG) Early setting the OS CAM line for hotplugged CPUs as they - * don't beneficiate from the reset of the XIVE IRQ backend - */ - spapr_xive_set_tctx_os_cam(spapr_cpu->tctx); -} - static int spapr_irq_post_load_xive(SpaprMachineState *spapr, int version_= id) { return spapr_xive_post_load(spapr->xive, version_id); @@ -316,7 +276,6 @@ SpaprIrq spapr_irq_xive =3D { .free =3D spapr_irq_free_xive, .print_info =3D spapr_irq_print_info_xive, .dt_populate =3D spapr_dt_xive, - .cpu_intc_create =3D spapr_irq_cpu_intc_create_xive, .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, .set_irq =3D spapr_irq_set_irq_xive, @@ -381,20 +340,6 @@ static void spapr_irq_dt_populate_dual(SpaprMachineSta= te *spapr, spapr_irq_current(spapr)->dt_populate(spapr, nr_servers, fdt, phandle); } =20 -static void spapr_irq_cpu_intc_create_dual(SpaprMachineState *spapr, - PowerPCCPU *cpu, Error **errp) -{ - Error *local_err =3D NULL; - - spapr_irq_xive.cpu_intc_create(spapr, cpu, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } - - spapr_irq_xics.cpu_intc_create(spapr, cpu, errp); -} - static int spapr_irq_post_load_dual(SpaprMachineState *spapr, int version_= id) { /* @@ -460,7 +405,6 @@ SpaprIrq spapr_irq_dual =3D { .free =3D spapr_irq_free_dual, .print_info =3D spapr_irq_print_info_dual, .dt_populate =3D spapr_irq_dt_populate_dual, - .cpu_intc_create =3D spapr_irq_cpu_intc_create_dual, .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, .set_irq =3D spapr_irq_set_irq_dual, @@ -527,6 +471,30 @@ static int spapr_irq_check(SpaprMachineState *spapr, E= rror **errp) /* * sPAPR IRQ frontend routines for devices */ +#define ALL_INTCS(spapr_) \ + { SPAPR_INTC((spapr_)->ics), SPAPR_INTC((spapr_)->xive), } + +int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, + PowerPCCPU *cpu, Error **errp) +{ + SpaprInterruptController *intcs[] =3D ALL_INTCS(spapr); + int i; + int rc; + + for (i =3D 0; i < ARRAY_SIZE(intcs); i++) { + SpaprInterruptController *intc =3D intcs[i]; + if (intc) { + SpaprInterruptControllerClass *sicc =3D SPAPR_INTC_GET_CLASS(i= ntc); + rc =3D sicc->cpu_intc_create(intc, cpu, errp); + if (rc < 0) { + return rc; + } + } + } + + return 0; +} + void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); @@ -762,7 +730,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, - .cpu_intc_create =3D spapr_irq_cpu_intc_create_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .set_irq =3D spapr_irq_set_irq_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index b9398e0be3..5e641e23c1 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -43,8 +43,19 @@ typedef struct SpaprInterruptController SpaprInterruptCo= ntroller; =20 typedef struct SpaprInterruptControllerClass { InterfaceClass parent; + + /* + * These methods will typically be called on all intcs, active and + * inactive + */ + int (*cpu_intc_create)(SpaprInterruptController *intc, + PowerPCCPU *cpu, Error **errp); } SpaprInterruptControllerClass; =20 +int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, + PowerPCCPU *cpu, Error **errp); + + void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis); int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, Error **errp); @@ -61,8 +72,6 @@ typedef struct SpaprIrq { void (*print_info)(SpaprMachineState *spapr, Monitor *mon); void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); - void (*cpu_intc_create)(SpaprMachineState *spapr, PowerPCCPU *cpu, - Error **errp); int (*post_load)(SpaprMachineState *spapr, int version_id); void (*reset)(SpaprMachineState *spapr, Error **errp); void (*set_irq)(void *opaque, int srcno, int val); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986466; cv=none; d=zoho.com; s=zohoarc; b=m54HKJT4BVhpZSiY9wgU0OAYGuLyFDPLVkOVQ1F6q+13OWEYiFbroSGhtBFRTZZusJuvWY5HcElvUCrR9k7mDTT8cVNvE6XmeUOS3qr6aZdYOaGBldUDrOKw3gjXUuQk1MkzeawDft81pYXioZr/6I0cF450a6MqpY8nB1OgvZk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986466; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=YPi1VwWKLLKSGlVAcPIKdQLgEIZvfMfLtiSnL0eAm+w=; b=ktoOtCGQLTkt4tVnBKwP1te3Y7ffNx97fglF02F8dTMaRkfyTUEZBU1dZc3PSImsdhR3EI0qu/WietHPPQCcBu0mM9pwgxXHW0QN0i5/dj+0QL2fRYqztS20n9UbJBqs5ECgtN2j/kQ46zfMBdOpG9h6Hh8qfMDWsriVbPchCz4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998646662379.78289601710583; Tue, 1 Oct 2019 20:21:06 -0700 (PDT) Received: from localhost ([::1]:51040 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVCK-0005vn-Cg for importer@patchew.org; Tue, 01 Oct 2019 23:21:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60126) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUku-0001mD-0r for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUko-00030k-KQ for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from ozlabs.org ([203.11.71.1]:60023) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkn-0002vb-V0; Tue, 01 Oct 2019 22:52:38 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf929Rrz9sRm; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=cn59O0B9SxJw9ScfBREFOCKbremoNoH+fzsXloxMrqo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i4AkeJT3xJ0X5C8D/fbH+B1bq3DhlvAI7U+FS+lKE6NDiOym2fxwD4Z74IrRg6h2v MQKzzzFOV5HREoqUvOvsedBso59OpKFYtjRuhxn+nH2i0t/DkgU4ienSbOUXndIuBL HGYmKWwAL9EXqXHc58yzhuW7XimKOErBRvjmjYF0= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 23/34] spapr, xics, xive: Move irq claim and free from SpaprIrq to SpaprInterruptController Date: Wed, 2 Oct 2019 12:51:57 +1000 Message-Id: <20191002025208.3487-24-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" These methods, like cpu_intc_create, really belong to the interrupt controller, but need to be called on all possible intcs. Like cpu_intc_create, therefore, make them methods on the intc and always call it for all existing intcs. Signed-off-by: David Gibson Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 71 ++++++++++++----------- hw/intc/xics_spapr.c | 29 ++++++++++ hw/ppc/spapr_irq.c | 110 +++++++++++------------------------- include/hw/ppc/spapr_irq.h | 5 +- include/hw/ppc/spapr_xive.h | 2 - 5 files changed, 102 insertions(+), 115 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 9338daba3d..ff1a175b44 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -487,6 +487,42 @@ static const VMStateDescription vmstate_spapr_xive =3D= { }, }; =20 +static int spapr_xive_claim_irq(SpaprInterruptController *intc, int lisn, + bool lsi, Error **errp) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + XiveSource *xsrc =3D &xive->source; + + assert(lisn < xive->nr_irqs); + + if (xive_eas_is_valid(&xive->eat[lisn])) { + error_setg(errp, "IRQ %d is not free", lisn); + return -EBUSY; + } + + /* + * Set default values when allocating an IRQ number + */ + xive->eat[lisn].w |=3D cpu_to_be64(EAS_VALID | EAS_MASKED); + if (lsi) { + xive_source_irq_set_lsi(xsrc, lisn); + } + + if (kvm_irqchip_in_kernel()) { + return kvmppc_xive_source_reset_one(xsrc, lisn, errp); + } + + return 0; +} + +static void spapr_xive_free_irq(SpaprInterruptController *intc, int lisn) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + assert(lisn < xive->nr_irqs); + + xive->eat[lisn].w &=3D cpu_to_be64(~EAS_VALID); +} + static Property spapr_xive_properties[] =3D { DEFINE_PROP_UINT32("nr-irqs", SpaprXive, nr_irqs, 0), DEFINE_PROP_UINT32("nr-ends", SpaprXive, nr_ends, 0), @@ -536,6 +572,8 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) xrc->get_tctx =3D spapr_xive_get_tctx; =20 sicc->cpu_intc_create =3D spapr_xive_cpu_intc_create; + sicc->claim_irq =3D spapr_xive_claim_irq; + sicc->free_irq =3D spapr_xive_free_irq; } =20 static const TypeInfo spapr_xive_info =3D { @@ -557,39 +595,6 @@ static void spapr_xive_register_types(void) =20 type_init(spapr_xive_register_types) =20 -int spapr_xive_irq_claim(SpaprXive *xive, int lisn, bool lsi, Error **errp) -{ - XiveSource *xsrc =3D &xive->source; - - assert(lisn < xive->nr_irqs); - - if (xive_eas_is_valid(&xive->eat[lisn])) { - error_setg(errp, "IRQ %d is not free", lisn); - return -EBUSY; - } - - /* - * Set default values when allocating an IRQ number - */ - xive->eat[lisn].w |=3D cpu_to_be64(EAS_VALID | EAS_MASKED); - if (lsi) { - xive_source_irq_set_lsi(xsrc, lisn); - } - - if (kvm_irqchip_in_kernel()) { - return kvmppc_xive_source_reset_one(xsrc, lisn, errp); - } - - return 0; -} - -void spapr_xive_irq_free(SpaprXive *xive, int lisn) -{ - assert(lisn < xive->nr_irqs); - - xive->eat[lisn].w &=3D cpu_to_be64(~EAS_VALID); -} - /* * XIVE hcalls * diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 946311b858..224fe1efcd 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -346,6 +346,33 @@ static int xics_spapr_cpu_intc_create(SpaprInterruptCo= ntroller *intc, return 0; } =20 +static int xics_spapr_claim_irq(SpaprInterruptController *intc, int irq, + bool lsi, Error **errp) +{ + ICSState *ics =3D ICS_SPAPR(intc); + + assert(ics); + assert(ics_valid_irq(ics, irq)); + + if (!ics_irq_free(ics, irq - ics->offset)) { + error_setg(errp, "IRQ %d is not free", irq); + return -EBUSY; + } + + ics_set_irq_type(ics, irq - ics->offset, lsi); + return 0; +} + +static void xics_spapr_free_irq(SpaprInterruptController *intc, int irq) +{ + ICSState *ics =3D ICS_SPAPR(intc); + uint32_t srcno =3D irq - ics->offset; + + assert(ics_valid_irq(ics, irq)); + + memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); +} + static void ics_spapr_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -355,6 +382,8 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) device_class_set_parent_realize(dc, ics_spapr_realize, &isc->parent_realize); sicc->cpu_intc_create =3D xics_spapr_cpu_intc_create; + sicc->claim_irq =3D xics_spapr_claim_irq; + sicc->free_irq =3D xics_spapr_free_irq; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 9cb2fc71ca..83882cfad3 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -98,33 +98,6 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr, * XICS IRQ backend. */ =20 -static int spapr_irq_claim_xics(SpaprMachineState *spapr, int irq, bool ls= i, - Error **errp) -{ - ICSState *ics =3D spapr->ics; - - assert(ics); - assert(ics_valid_irq(ics, irq)); - - if (!ics_irq_free(ics, irq - ics->offset)) { - error_setg(errp, "IRQ %d is not free", irq); - return -1; - } - - ics_set_irq_type(ics, irq - ics->offset, lsi); - return 0; -} - -static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq) -{ - ICSState *ics =3D spapr->ics; - uint32_t srcno =3D irq - ics->offset; - - assert(ics_valid_irq(ics, irq)); - - memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); -} - static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *m= on) { CPUState *cs; @@ -182,8 +155,6 @@ SpaprIrq spapr_irq_xics =3D { .xics =3D true, .xive =3D false, =20 - .claim =3D spapr_irq_claim_xics, - .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, @@ -196,17 +167,6 @@ SpaprIrq spapr_irq_xics =3D { * XIVE IRQ backend. */ =20 -static int spapr_irq_claim_xive(SpaprMachineState *spapr, int irq, bool ls= i, - Error **errp) -{ - return spapr_xive_irq_claim(spapr->xive, irq, lsi, errp); -} - -static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq) -{ - spapr_xive_irq_free(spapr->xive, irq); -} - static void spapr_irq_print_info_xive(SpaprMachineState *spapr, Monitor *mon) { @@ -272,8 +232,6 @@ SpaprIrq spapr_irq_xive =3D { .xics =3D false, .xive =3D true, =20 - .claim =3D spapr_irq_claim_xive, - .free =3D spapr_irq_free_xive, .print_info =3D spapr_irq_print_info_xive, .dt_populate =3D spapr_dt_xive, .post_load =3D spapr_irq_post_load_xive, @@ -301,33 +259,6 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *= spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static int spapr_irq_claim_dual(SpaprMachineState *spapr, int irq, bool ls= i, - Error **errp) -{ - Error *local_err =3D NULL; - int ret; - - ret =3D spapr_irq_xics.claim(spapr, irq, lsi, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return ret; - } - - ret =3D spapr_irq_xive.claim(spapr, irq, lsi, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return ret; - } - - return ret; -} - -static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq) -{ - spapr_irq_xics.free(spapr, irq); - spapr_irq_xive.free(spapr, irq); -} - static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *m= on) { spapr_irq_current(spapr)->print_info(spapr, mon); @@ -401,8 +332,6 @@ SpaprIrq spapr_irq_dual =3D { .xics =3D true, .xive =3D true, =20 - .claim =3D spapr_irq_claim_dual, - .free =3D spapr_irq_free_dual, .print_info =3D spapr_irq_print_info_dual, .dt_populate =3D spapr_irq_dt_populate_dual, .post_load =3D spapr_irq_post_load_dual, @@ -572,8 +501,11 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **= errp) =20 /* Enable the CPU IPIs */ for (i =3D 0; i < nr_servers; ++i) { - if (spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, - false, errp) < 0) { + SpaprInterruptControllerClass *sicc + =3D SPAPR_INTC_GET_CLASS(spapr->xive); + + if (sicc->claim_irq(SPAPR_INTC(spapr->xive), SPAPR_IRQ_IPI + i, + false, errp) < 0) { return; } } @@ -587,21 +519,45 @@ void spapr_irq_init(SpaprMachineState *spapr, Error *= *errp) =20 int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **e= rrp) { + SpaprInterruptController *intcs[] =3D ALL_INTCS(spapr); + int i; + int rc; + assert(irq >=3D SPAPR_XIRQ_BASE); assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); =20 - return spapr->irq->claim(spapr, irq, lsi, errp); + for (i =3D 0; i < ARRAY_SIZE(intcs); i++) { + SpaprInterruptController *intc =3D intcs[i]; + if (intc) { + SpaprInterruptControllerClass *sicc =3D SPAPR_INTC_GET_CLASS(i= ntc); + rc =3D sicc->claim_irq(intc, irq, lsi, errp); + if (rc < 0) { + return rc; + } + } + } + + return 0; } =20 void spapr_irq_free(SpaprMachineState *spapr, int irq, int num) { - int i; + SpaprInterruptController *intcs[] =3D ALL_INTCS(spapr); + int i, j; =20 assert(irq >=3D SPAPR_XIRQ_BASE); assert((irq + num) <=3D (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); =20 for (i =3D irq; i < (irq + num); i++) { - spapr->irq->free(spapr, i); + for (j =3D 0; j < ARRAY_SIZE(intcs); j++) { + SpaprInterruptController *intc =3D intcs[j]; + + if (intc) { + SpaprInterruptControllerClass *sicc + =3D SPAPR_INTC_GET_CLASS(intc); + sicc->free_irq(intc, i); + } + } } } =20 @@ -726,8 +682,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .xics =3D true, .xive =3D false, =20 - .claim =3D spapr_irq_claim_xics, - .free =3D spapr_irq_free_xics, .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 5e641e23c1..adfef0fcbe 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -50,6 +50,9 @@ typedef struct SpaprInterruptControllerClass { */ int (*cpu_intc_create)(SpaprInterruptController *intc, PowerPCCPU *cpu, Error **errp); + int (*claim_irq)(SpaprInterruptController *intc, int irq, bool lsi, + Error **errp); + void (*free_irq)(SpaprInterruptController *intc, int irq); } SpaprInterruptControllerClass; =20 int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, @@ -67,8 +70,6 @@ typedef struct SpaprIrq { bool xics; bool xive; =20 - int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp= ); - void (*free)(SpaprMachineState *spapr, int irq); void (*print_info)(SpaprMachineState *spapr, Monitor *mon); void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index 0df20a6590..8f875673f5 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -54,8 +54,6 @@ typedef struct SpaprXive { */ #define SPAPR_XIVE_BLOCK_ID 0x0 =20 -int spapr_xive_irq_claim(SpaprXive *xive, int lisn, bool lsi, Error **errp= ); -void spapr_xive_irq_free(SpaprXive *xive, int lisn); void spapr_xive_pic_print_info(SpaprXive *xive, Monitor *mon); int spapr_xive_post_load(SpaprXive *xive, int version_id); =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986277; cv=none; d=zoho.com; s=zohoarc; b=aat0zkXiEIIFJqkw8aba/+NeUv8Uh8DmX7dP3CnytGq2Az2KFOrF44/f54IW5UVNOtTPqlY8LdzVMv7ctpnJmBgYQP1Ip6qd0pcrjuEqxMkrOFNSys+vC7w6luOBHlyA9gdFZnmQx+hrPhebo2pwZTg5XpYA8tnDjxzMN5bfHtI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986277; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=WaJuELyQf555k9Wp9ijnrw9PR/tzywBOKMR/ToN6s+E=; b=D3jxekfGvl8AALcZ6eCDXCg0pKbS0S7dnD7PMrP5wICxsJ/w/kQxAh9Tj7Tn94z974lw5JK+JlJUGE9/+PUQXvdoXCQ9uxSiCaENfUELVtl7rtfwPSJ34dPy9CEqP8uodlSDi/U5bjQjkzwVcpm1612R5x/UBjlA9GCBbPM1x4M= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986277791190.81394208545078; Tue, 1 Oct 2019 20:17:57 -0700 (PDT) Received: from localhost ([::1]:51002 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV9I-0001qX-If for importer@patchew.org; Tue, 01 Oct 2019 23:17:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60108) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUkt-0001lP-Fq for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUko-00030Z-Jw for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:52:43 -0400 Received: from ozlabs.org ([203.11.71.1]:38539) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUkn-0002vs-U3; Tue, 01 Oct 2019 22:52:38 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf94H0Pz9sRv; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=bQDNsvoOjTPlQffNWH0Bx48K0h0FtFl52VIh+MRjbRo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ad+k01ARs28l8Yz2ceUmWBg8HCHmaMA0pVGnrT5eD9Xkr7o+mLs26noWlW6yFgbZm WM84NEZRM61ix0rbmYklROKCNNKt2mh7yrkqt9RdririRU2yALnqpZAvMAqL2Rei8D wOsyDUld9+kVFo31ej/D4qflEJ7BqRhBM4+zqhh4= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 24/34] spapr: Formalize notion of active interrupt controller Date: Wed, 2 Oct 2019 12:51:58 +1000 Message-Id: <20191002025208.3487-25-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" spapr now has the mechanism of constructing both XICS and XIVE instances of the SpaprInterruptController interface. However, only one of the interrupt controllers will actually be active at any given time, depending on feature negotiation with the guest. This is handled in the current code via spapr_irq_current() which checks the OV5 vector from feature negotiation to determine the current backend. Determining the active controller at the point we need it like this can be pretty confusing, because it makes it very non obvious at what points the active controller can change. This can make it difficult to reason about the code and where a change of active controller could appear in sequence with other events. Make this mechanism more explicit by adding an 'active_intc' pointer and an explicit spapr_irq_update_active_intc() function to update it from the CAS state. We also add hooks on the intc backend which will get called when it is activated or deactivated. For now we just introduce the switch and hooks, later patches will actually start using them. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/ppc/spapr_irq.c | 51 ++++++++++++++++++++++++++++++++++++++ include/hw/ppc/spapr.h | 5 ++-- include/hw/ppc/spapr_irq.h | 5 ++++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 83882cfad3..249a2688ac 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -586,6 +586,7 @@ qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) =20 int spapr_irq_post_load(SpaprMachineState *spapr, int version_id) { + spapr_irq_update_active_intc(spapr); return spapr->irq->post_load(spapr, version_id); } =20 @@ -593,6 +594,8 @@ void spapr_irq_reset(SpaprMachineState *spapr, Error **= errp) { assert(!spapr->irq_map || bitmap_empty(spapr->irq_map, spapr->irq_map_= nr)); =20 + spapr_irq_update_active_intc(spapr); + if (spapr->irq->reset) { spapr->irq->reset(spapr, errp); } @@ -619,6 +622,54 @@ int spapr_irq_get_phandle(SpaprMachineState *spapr, vo= id *fdt, Error **errp) return phandle; } =20 +static void set_active_intc(SpaprMachineState *spapr, + SpaprInterruptController *new_intc) +{ + SpaprInterruptControllerClass *sicc; + + assert(new_intc); + + if (new_intc =3D=3D spapr->active_intc) { + /* Nothing to do */ + return; + } + + if (spapr->active_intc) { + sicc =3D SPAPR_INTC_GET_CLASS(spapr->active_intc); + if (sicc->deactivate) { + sicc->deactivate(spapr->active_intc); + } + } + + sicc =3D SPAPR_INTC_GET_CLASS(new_intc); + if (sicc->activate) { + sicc->activate(new_intc, &error_fatal); + } + + spapr->active_intc =3D new_intc; +} + +void spapr_irq_update_active_intc(SpaprMachineState *spapr) +{ + SpaprInterruptController *new_intc; + + if (!spapr->ics) { + /* + * XXX before we run CAS, ov5_cas is initialized empty, which + * indicates XICS, even if we have ic-mode=3Dxive. TODO: clean + * up the CAS path so that we have a clearer way of handling + * this. + */ + new_intc =3D SPAPR_INTC(spapr->xive); + } else if (spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { + new_intc =3D SPAPR_INTC(spapr->xive); + } else { + new_intc =3D SPAPR_INTC(spapr->ics); + } + + set_active_intc(spapr, new_intc); +} + /* * XICS legacy routines - to deprecate one day */ diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index cbd1a4c9f3..763da757f0 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -143,7 +143,6 @@ struct SpaprMachineState { struct SpaprVioBus *vio_bus; QLIST_HEAD(, SpaprPhbState) phbs; struct SpaprNvram *nvram; - ICSState *ics; SpaprRtcState rtc; =20 SpaprResizeHpt resize_hpt; @@ -195,9 +194,11 @@ struct SpaprMachineState { =20 int32_t irq_map_nr; unsigned long *irq_map; - SpaprXive *xive; SpaprIrq *irq; qemu_irq *qirqs; + SpaprInterruptController *active_intc; + ICSState *ics; + SpaprXive *xive; =20 bool cmd_line_caps[SPAPR_CAP_NUM]; SpaprCapabilities def, eff, mig; diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index adfef0fcbe..18660a29db 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -44,6 +44,9 @@ typedef struct SpaprInterruptController SpaprInterruptCon= troller; typedef struct SpaprInterruptControllerClass { InterfaceClass parent; =20 + void (*activate)(SpaprInterruptController *intc, Error **errp); + void (*deactivate)(SpaprInterruptController *intc); + /* * These methods will typically be called on all intcs, active and * inactive @@ -55,6 +58,8 @@ typedef struct SpaprInterruptControllerClass { void (*free_irq)(SpaprInterruptController *intc, int irq); } SpaprInterruptControllerClass; =20 +void spapr_irq_update_active_intc(SpaprMachineState *spapr); + int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, PowerPCCPU *cpu, Error **errp); =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986653; cv=none; d=zoho.com; s=zohoarc; b=EH0AvGU5nvaDrdohtE+Ps77DfsD47a2csWZpShAh+pfkFDvaPnAgvFBWwiiTztfqUf+EH0orpEGVu10gf5PcZPl0z2jB41SxPGVxcMZP/H7V8XumvkdfIXKb4FcSGip0bio9E6F7LWgjlLFGjaLJ6ATGJ0FeZkZYlMirWyhqajc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986653; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=tN+l9mUQXrItBRjNvrfDwF4+huOb2qzHD9coHpWKico=; b=i3o3HO9Nx6r0wVt+Ayy1Yl7/lvGkl0pGNrJMyGdxs/uURbrdvngmd/YBh9xr5z3ADESg08st9CGxSHo+9kDecbZH+qwbjM8E3Zqaq6H93rp8jACpG4c+/p8QsN9aWpQqTZKcQg+L+c2x/aJd8JA9Nac7aGQWMzzLhuFkBJeQZX8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986653935644.1612090310105; Tue, 1 Oct 2019 20:24:13 -0700 (PDT) Received: from localhost ([::1]:51076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVFM-0000fh-LO for importer@patchew.org; Tue, 01 Oct 2019 23:24:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60520) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlA-00022y-KQ for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUl8-0003S3-Ov for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:00 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:56395) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUl8-0002wM-4J; Tue, 01 Oct 2019 22:52:58 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf96TrRz9sS3; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=OM9XyoHBq0fqN5ZKwxWSazA6oGw3uI8WPxlrG8oc0Gw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CPpJfOsl8yRtLvZkxWRaElCg7fXVJoNRblTLf0sSMYcamiCW/E7pafn2NVGgl+Jo4 nWMeTQbCgR9eIiFHQQknwXb/Muv9saeaJDpEsMMcGQBCOs+4MeOSYdO+trASEUfWgR ujGWhRml1fFgTJhl81g1wwhB3fLsHB+9g/2AbZ28= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 25/34] spapr, xics, xive: Move set_irq from SpaprIrq to SpaprInterruptController Date: Wed, 2 Oct 2019 12:51:59 +1000 Message-Id: <20191002025208.3487-26-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method depends only on the active irq controller. Now that we've formalized the notion of active controller we can dispatch directly through that, rather than dispatching via SpaprIrq with the dual version having to do a second conditional dispatch. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 12 +++++++++++ hw/intc/xics_spapr.c | 9 +++++++++ hw/ppc/spapr_irq.c | 41 ++++++++++---------------------------- include/hw/ppc/spapr_irq.h | 4 +++- 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index ff1a175b44..52d5e71793 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -553,6 +553,17 @@ static int spapr_xive_cpu_intc_create(SpaprInterruptCo= ntroller *intc, return 0; } =20 +static void spapr_xive_set_irq(SpaprInterruptController *intc, int irq, in= t val) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + + if (kvm_irqchip_in_kernel()) { + kvmppc_xive_source_set_irq(&xive->source, irq, val); + } else { + xive_source_set_irq(&xive->source, irq, val); + } +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -574,6 +585,7 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) sicc->cpu_intc_create =3D spapr_xive_cpu_intc_create; sicc->claim_irq =3D spapr_xive_claim_irq; sicc->free_irq =3D spapr_xive_free_irq; + sicc->set_irq =3D spapr_xive_set_irq; } =20 static const TypeInfo spapr_xive_info =3D { diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 224fe1efcd..02372697f6 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -373,6 +373,14 @@ static void xics_spapr_free_irq(SpaprInterruptControll= er *intc, int irq) memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState)); } =20 +static void xics_spapr_set_irq(SpaprInterruptController *intc, int irq, in= t val) +{ + ICSState *ics =3D ICS_SPAPR(intc); + uint32_t srcno =3D irq - ics->offset; + + ics_set_irq(ics, srcno, val); +} + static void ics_spapr_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -384,6 +392,7 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) sicc->cpu_intc_create =3D xics_spapr_cpu_intc_create; sicc->claim_irq =3D xics_spapr_claim_irq; sicc->free_irq =3D xics_spapr_free_irq; + sicc->set_irq =3D xics_spapr_set_irq; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 249a2688ac..bfccb815ed 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -123,14 +123,6 @@ static int spapr_irq_post_load_xics(SpaprMachineState = *spapr, int version_id) return 0; } =20 -static void spapr_irq_set_irq_xics(void *opaque, int irq, int val) -{ - SpaprMachineState *spapr =3D opaque; - uint32_t srcno =3D irq - spapr->ics->offset; - - ics_set_irq(spapr->ics, srcno, val); -} - static void spapr_irq_reset_xics(SpaprMachineState *spapr, Error **errp) { Error *local_err =3D NULL; @@ -159,7 +151,6 @@ SpaprIrq spapr_irq_xics =3D { .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, - .set_irq =3D spapr_irq_set_irq_xics, .init_kvm =3D spapr_irq_init_kvm_xics, }; =20 @@ -208,17 +199,6 @@ static void spapr_irq_reset_xive(SpaprMachineState *sp= apr, Error **errp) spapr_xive_mmio_set_enabled(spapr->xive, true); } =20 -static void spapr_irq_set_irq_xive(void *opaque, int irq, int val) -{ - SpaprMachineState *spapr =3D opaque; - - if (kvm_irqchip_in_kernel()) { - kvmppc_xive_source_set_irq(&spapr->xive->source, irq, val); - } else { - xive_source_set_irq(&spapr->xive->source, irq, val); - } -} - static void spapr_irq_init_kvm_xive(SpaprMachineState *spapr, Error **errp) { if (kvm_enabled()) { @@ -236,7 +216,6 @@ SpaprIrq spapr_irq_xive =3D { .dt_populate =3D spapr_dt_xive, .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, - .set_irq =3D spapr_irq_set_irq_xive, .init_kvm =3D spapr_irq_init_kvm_xive, }; =20 @@ -316,13 +295,6 @@ static void spapr_irq_reset_dual(SpaprMachineState *sp= apr, Error **errp) spapr_irq_current(spapr)->reset(spapr, errp); } =20 -static void spapr_irq_set_irq_dual(void *opaque, int irq, int val) -{ - SpaprMachineState *spapr =3D opaque; - - spapr_irq_current(spapr)->set_irq(spapr, irq, val); -} - /* * Define values in sync with the XIVE and XICS backend */ @@ -336,7 +308,6 @@ SpaprIrq spapr_irq_dual =3D { .dt_populate =3D spapr_irq_dt_populate_dual, .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, - .set_irq =3D spapr_irq_set_irq_dual, .init_kvm =3D NULL, /* should not be used */ }; =20 @@ -424,6 +395,15 @@ int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, return 0; } =20 +static void spapr_set_irq(void *opaque, int irq, int level) +{ + SpaprMachineState *spapr =3D SPAPR_MACHINE(opaque); + SpaprInterruptControllerClass *sicc + =3D SPAPR_INTC_GET_CLASS(spapr->active_intc); + + sicc->set_irq(spapr->active_intc, irq, level); +} + void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); @@ -513,7 +493,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) spapr_xive_hcall_init(spapr); } =20 - spapr->qirqs =3D qemu_allocate_irqs(spapr->irq->set_irq, spapr, + spapr->qirqs =3D qemu_allocate_irqs(spapr_set_irq, spapr, spapr->irq->nr_xirqs + SPAPR_XIRQ_BA= SE); } =20 @@ -737,7 +717,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, - .set_irq =3D spapr_irq_set_irq_xics, .init_kvm =3D spapr_irq_init_kvm_xics, }; =20 diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 18660a29db..73af1ed27a 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -56,6 +56,9 @@ typedef struct SpaprInterruptControllerClass { int (*claim_irq)(SpaprInterruptController *intc, int irq, bool lsi, Error **errp); void (*free_irq)(SpaprInterruptController *intc, int irq); + + /* These methods should only be called on the active intc */ + void (*set_irq)(SpaprInterruptController *intc, int irq, int val); } SpaprInterruptControllerClass; =20 void spapr_irq_update_active_intc(SpaprMachineState *spapr); @@ -80,7 +83,6 @@ typedef struct SpaprIrq { void *fdt, uint32_t phandle); int (*post_load)(SpaprMachineState *spapr, int version_id); void (*reset)(SpaprMachineState *spapr, Error **errp); - void (*set_irq)(void *opaque, int srcno, int val); void (*init_kvm)(SpaprMachineState *spapr, Error **errp); } SpaprIrq; =20 --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986778; cv=none; d=zoho.com; s=zohoarc; b=MvtRH8ZhfRnH0eakK5Rcrvm2tDSNBQQ0BYGE8IEi0ln3RCncBHUEnD8MBGq5H8jvI2mYU4R50JnqXCOOVXil7XH0jU/FeTa5+qpVmXGlr2FCEimwji9/SFm+BUkPkWRPqBGFLdLerN0ZV9Ukj8gG2r/jltIWc6dYQvksJSRklpY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986778; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=mBo880gOlzs5qAhYakxyVHc5rQH6Sk/lT49BVqIgwt0=; b=O6Qt1FXjXNhd+YoKdS05q5U7l3iqtIWjrJTcK2ZJCZWBhPjQChqdnlLXb6EqsRYE+TdXx+7jkh5Z8Z56/ztXnFoa8jkP4p0HnQICmCIkx9oYwyn3ut5MXUTQUUkTP1iemE9jXhC65P9z3zTHYLUhHagPqcbmbkOcLBD5RZbakAw= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986778540388.1772905508428; Tue, 1 Oct 2019 20:26:18 -0700 (PDT) Received: from localhost ([::1]:51100 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVHL-0003Mn-JP for importer@patchew.org; Tue, 01 Oct 2019 23:26:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60544) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlB-00023o-7P for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUl9-0003T4-Br for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:01 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:57543) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUl8-0002w9-Va; Tue, 01 Oct 2019 22:52:59 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgf95hwFz9sRs; Wed, 2 Oct 2019 12:52:17 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984737; bh=tcR4kprpkweAgv2EIwIYsJj96slEGWKmW6G2y+XikSk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PN+g1WzbQMWN72UVvzoMeLrH5ulMqU62zMzFPqCsyV8rmISsfR2JbIn1jb4Q3VpH7 OHeNCfEQnOppEp7ij8XSQujP7ZeMyNPNtLFROENz3muxXcyh/a19kK9/RLfaYFQ9bJ w/Jeo5+ZMqJcPWqyjJDOCA9G7LaEJ1kyXjsi/wtk= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 26/34] spapr, xics, xive: Move print_info from SpaprIrq to SpaprInterruptController Date: Wed, 2 Oct 2019 12:52:00 +1000 Message-Id: <20191002025208.3487-27-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method depends only on the active irq controller. Now that we've formalized the notion of active controller we can dispatch directly through that, rather than dispatching via SpaprIrq with the dual version having to do a second conditional dispatch. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 15 +++++++++++++ hw/intc/xics_spapr.c | 15 +++++++++++++ hw/ppc/spapr.c | 2 +- hw/ppc/spapr_irq.c | 44 +++++++------------------------------- include/hw/ppc/spapr_irq.h | 4 ++-- 5 files changed, 41 insertions(+), 39 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 52d5e71793..700ec5c9c1 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -564,6 +564,20 @@ static void spapr_xive_set_irq(SpaprInterruptControlle= r *intc, int irq, int val) } } =20 +static void spapr_xive_print_info(SpaprInterruptController *intc, Monitor = *mon) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + CPUState *cs; + + CPU_FOREACH(cs) { + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + + xive_tctx_pic_print_info(spapr_cpu_state(cpu)->tctx, mon); + } + + spapr_xive_pic_print_info(xive, mon); +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -586,6 +600,7 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) sicc->claim_irq =3D spapr_xive_claim_irq; sicc->free_irq =3D spapr_xive_free_irq; sicc->set_irq =3D spapr_xive_set_irq; + sicc->print_info =3D spapr_xive_print_info; } =20 static const TypeInfo spapr_xive_info =3D { diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 02372697f6..415defe394 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -381,6 +381,20 @@ static void xics_spapr_set_irq(SpaprInterruptControlle= r *intc, int irq, int val) ics_set_irq(ics, srcno, val); } =20 +static void xics_spapr_print_info(SpaprInterruptController *intc, Monitor = *mon) +{ + ICSState *ics =3D ICS_SPAPR(intc); + CPUState *cs; + + CPU_FOREACH(cs) { + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + + icp_pic_print_info(spapr_cpu_state(cpu)->icp, mon); + } + + ics_pic_print_info(ics, mon); +} + static void ics_spapr_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -393,6 +407,7 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) sicc->claim_irq =3D xics_spapr_claim_irq; sicc->free_irq =3D xics_spapr_free_irq; sicc->set_irq =3D xics_spapr_set_irq; + sicc->print_info =3D xics_spapr_print_info; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 514a17ae74..6c38de5927 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -4271,7 +4271,7 @@ static void spapr_pic_print_info(InterruptStatsProvid= er *obj, { SpaprMachineState *spapr =3D SPAPR_MACHINE(obj); =20 - spapr->irq->print_info(spapr, mon); + spapr_irq_print_info(spapr, mon); monitor_printf(mon, "irqchip: %s\n", kvm_irqchip_in_kernel() ? "in-kernel" : "emulated"); } diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index bfccb815ed..a29b527232 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -98,19 +98,6 @@ static void spapr_irq_init_kvm(SpaprMachineState *spapr, * XICS IRQ backend. */ =20 -static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *m= on) -{ - CPUState *cs; - - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - - icp_pic_print_info(spapr_cpu_state(cpu)->icp, mon); - } - - ics_pic_print_info(spapr->ics, mon); -} - static int spapr_irq_post_load_xics(SpaprMachineState *spapr, int version_= id) { if (!kvm_irqchip_in_kernel()) { @@ -147,7 +134,6 @@ SpaprIrq spapr_irq_xics =3D { .xics =3D true, .xive =3D false, =20 - .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, @@ -158,20 +144,6 @@ SpaprIrq spapr_irq_xics =3D { * XIVE IRQ backend. */ =20 -static void spapr_irq_print_info_xive(SpaprMachineState *spapr, - Monitor *mon) -{ - CPUState *cs; - - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - - xive_tctx_pic_print_info(spapr_cpu_state(cpu)->tctx, mon); - } - - spapr_xive_pic_print_info(spapr->xive, mon); -} - static int spapr_irq_post_load_xive(SpaprMachineState *spapr, int version_= id) { return spapr_xive_post_load(spapr->xive, version_id); @@ -212,7 +184,6 @@ SpaprIrq spapr_irq_xive =3D { .xics =3D false, .xive =3D true, =20 - .print_info =3D spapr_irq_print_info_xive, .dt_populate =3D spapr_dt_xive, .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, @@ -238,11 +209,6 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *= spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *m= on) -{ - spapr_irq_current(spapr)->print_info(spapr, mon); -} - static void spapr_irq_dt_populate_dual(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle) @@ -304,7 +270,6 @@ SpaprIrq spapr_irq_dual =3D { .xics =3D true, .xive =3D true, =20 - .print_info =3D spapr_irq_print_info_dual, .dt_populate =3D spapr_irq_dt_populate_dual, .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, @@ -404,6 +369,14 @@ static void spapr_set_irq(void *opaque, int irq, int l= evel) sicc->set_irq(spapr->active_intc, irq, level); } =20 +void spapr_irq_print_info(SpaprMachineState *spapr, Monitor *mon) +{ + SpaprInterruptControllerClass *sicc + =3D SPAPR_INTC_GET_CLASS(spapr->active_intc); + + sicc->print_info(spapr->active_intc, mon); +} + void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); @@ -713,7 +686,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .xics =3D true, .xive =3D false, =20 - .print_info =3D spapr_irq_print_info_xics, .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 73af1ed27a..c5081e81d9 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -59,13 +59,14 @@ typedef struct SpaprInterruptControllerClass { =20 /* These methods should only be called on the active intc */ void (*set_irq)(SpaprInterruptController *intc, int irq, int val); + void (*print_info)(SpaprInterruptController *intc, Monitor *mon); } SpaprInterruptControllerClass; =20 void spapr_irq_update_active_intc(SpaprMachineState *spapr); =20 int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, PowerPCCPU *cpu, Error **errp); - +void spapr_irq_print_info(SpaprMachineState *spapr, Monitor *mon); =20 void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis); int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, @@ -78,7 +79,6 @@ typedef struct SpaprIrq { bool xics; bool xive; =20 - void (*print_info)(SpaprMachineState *spapr, Monitor *mon); void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); int (*post_load)(SpaprMachineState *spapr, int version_id); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569987108; cv=none; d=zoho.com; s=zohoarc; b=jOw43xVikkUZLz/N4ILUqEAGDAhHtYMgxqi7stEph/QeGj5jI9VfoOssyhBAvL861gAAe3f80HI7lmSPNflYGcujUyCy2RGbYcknp9clOm8fzIdRFy3dTffLk9Vu/UR+6Ybyt7bhVNgnwfoGp0VVm5BNur7HbO86txUP4iiXZTE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569987108; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=y3eR0f8wnAq7tkhtLE8EHt/eXr49fJYKK0WOB8TSE6o=; b=V5WtLg3D8hn96xJxxD1bFME7WNwncsyewfBlXzEdNmzmxkcdvNuTui5AD7DnA9JOSpPM2ksrgFnUvHtE2tqlwzXiujfXEVCIJAsf3L0Mpht+W+UbBc3Sfn9XBaEyWfjsgL+7dBRbSoJE6dYfXE7g+EoyW+rDgse/ua5Nvv2VBjA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569987106927846.9674322993069; Tue, 1 Oct 2019 20:31:46 -0700 (PDT) Received: from localhost ([::1]:51154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVMd-0000CM-J1 for importer@patchew.org; Tue, 01 Oct 2019 23:31:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60592) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlC-000250-N9 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUl9-0003Sd-4n for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:02 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:55291) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUl8-0002wZ-GP; Tue, 01 Oct 2019 22:52:59 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfB0GVQz9sS6; Wed, 2 Oct 2019 12:52:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984738; bh=aFDpdHQJZ6jjurUYUMol1mybZg+itYOgIwMa5QJvJHM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YXHHleuUdxVJogd4Dynt7JRlaswHrGPYjQznyYGlwdXT2nbt1do/DUNV5t4xXvyUt TWOAO2XtUUjX4zf5FNkpfHzXMPJ39xwgCaBJQCaljUawNHz20AACn4VlSOClCl4joa krq6v276I4V8jHLQh+IU2u4iz0ZNwXjYye9v1Dk4= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 27/34] spapr, xics, xive: Move dt_populate from SpaprIrq to SpaprInterruptController Date: Wed, 2 Oct 2019 12:52:01 +1000 Message-Id: <20191002025208.3487-28-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This method depends only on the active irq controller. Now that we've formalized the notion of active controller we can dispatch directly through that, rather than dispatching via SpaprIrq with the dual version having to do a second conditional dispatch. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 125 ++++++++++++++++++------------------ hw/intc/xics_spapr.c | 5 +- hw/ppc/spapr.c | 3 +- hw/ppc/spapr_irq.c | 20 +++--- include/hw/ppc/spapr_irq.h | 6 +- include/hw/ppc/spapr_xive.h | 2 - include/hw/ppc/xics_spapr.h | 2 - 7 files changed, 80 insertions(+), 83 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 700ec5c9c1..37ffb74ca5 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -578,6 +578,68 @@ static void spapr_xive_print_info(SpaprInterruptContro= ller *intc, Monitor *mon) spapr_xive_pic_print_info(xive, mon); } =20 +static void spapr_xive_dt(SpaprInterruptController *intc, uint32_t nr_serv= ers, + void *fdt, uint32_t phandle) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + int node; + uint64_t timas[2 * 2]; + /* Interrupt number ranges for the IPIs */ + uint32_t lisn_ranges[] =3D { + cpu_to_be32(0), + cpu_to_be32(nr_servers), + }; + /* + * EQ size - the sizes of pages supported by the system 4K, 64K, + * 2M, 16M. We only advertise 64K for the moment. + */ + uint32_t eq_sizes[] =3D { + cpu_to_be32(16), /* 64K */ + }; + /* + * The following array is in sync with the reserved priorities + * defined by the 'spapr_xive_priority_is_reserved' routine. + */ + uint32_t plat_res_int_priorities[] =3D { + cpu_to_be32(7), /* start */ + cpu_to_be32(0xf8), /* count */ + }; + + /* Thread Interrupt Management Area : User (ring 3) and OS (ring 2) */ + timas[0] =3D cpu_to_be64(xive->tm_base + + XIVE_TM_USER_PAGE * (1ull << TM_SHIFT)); + timas[1] =3D cpu_to_be64(1ull << TM_SHIFT); + timas[2] =3D cpu_to_be64(xive->tm_base + + XIVE_TM_OS_PAGE * (1ull << TM_SHIFT)); + timas[3] =3D cpu_to_be64(1ull << TM_SHIFT); + + _FDT(node =3D fdt_add_subnode(fdt, 0, xive->nodename)); + + _FDT(fdt_setprop_string(fdt, node, "device_type", "power-ivpe")); + _FDT(fdt_setprop(fdt, node, "reg", timas, sizeof(timas))); + + _FDT(fdt_setprop_string(fdt, node, "compatible", "ibm,power-ivpe")); + _FDT(fdt_setprop(fdt, node, "ibm,xive-eq-sizes", eq_sizes, + sizeof(eq_sizes))); + _FDT(fdt_setprop(fdt, node, "ibm,xive-lisn-ranges", lisn_ranges, + sizeof(lisn_ranges))); + + /* For Linux to link the LSIs to the interrupt controller. */ + _FDT(fdt_setprop(fdt, node, "interrupt-controller", NULL, 0)); + _FDT(fdt_setprop_cell(fdt, node, "#interrupt-cells", 2)); + + /* For SLOF */ + _FDT(fdt_setprop_cell(fdt, node, "linux,phandle", phandle)); + _FDT(fdt_setprop_cell(fdt, node, "phandle", phandle)); + + /* + * The "ibm,plat-res-int-priorities" property defines the priority + * ranges reserved by the hypervisor + */ + _FDT(fdt_setprop(fdt, 0, "ibm,plat-res-int-priorities", + plat_res_int_priorities, sizeof(plat_res_int_prioriti= es))); +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -601,6 +663,7 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) sicc->free_irq =3D spapr_xive_free_irq; sicc->set_irq =3D spapr_xive_set_irq; sicc->print_info =3D spapr_xive_print_info; + sicc->dt =3D spapr_xive_dt; } =20 static const TypeInfo spapr_xive_info =3D { @@ -1601,65 +1664,3 @@ void spapr_xive_hcall_init(SpaprMachineState *spapr) spapr_register_hypercall(H_INT_SYNC, h_int_sync); spapr_register_hypercall(H_INT_RESET, h_int_reset); } - -void spapr_dt_xive(SpaprMachineState *spapr, uint32_t nr_servers, void *fd= t, - uint32_t phandle) -{ - SpaprXive *xive =3D spapr->xive; - int node; - uint64_t timas[2 * 2]; - /* Interrupt number ranges for the IPIs */ - uint32_t lisn_ranges[] =3D { - cpu_to_be32(0), - cpu_to_be32(nr_servers), - }; - /* - * EQ size - the sizes of pages supported by the system 4K, 64K, - * 2M, 16M. We only advertise 64K for the moment. - */ - uint32_t eq_sizes[] =3D { - cpu_to_be32(16), /* 64K */ - }; - /* - * The following array is in sync with the reserved priorities - * defined by the 'spapr_xive_priority_is_reserved' routine. - */ - uint32_t plat_res_int_priorities[] =3D { - cpu_to_be32(7), /* start */ - cpu_to_be32(0xf8), /* count */ - }; - - /* Thread Interrupt Management Area : User (ring 3) and OS (ring 2) */ - timas[0] =3D cpu_to_be64(xive->tm_base + - XIVE_TM_USER_PAGE * (1ull << TM_SHIFT)); - timas[1] =3D cpu_to_be64(1ull << TM_SHIFT); - timas[2] =3D cpu_to_be64(xive->tm_base + - XIVE_TM_OS_PAGE * (1ull << TM_SHIFT)); - timas[3] =3D cpu_to_be64(1ull << TM_SHIFT); - - _FDT(node =3D fdt_add_subnode(fdt, 0, xive->nodename)); - - _FDT(fdt_setprop_string(fdt, node, "device_type", "power-ivpe")); - _FDT(fdt_setprop(fdt, node, "reg", timas, sizeof(timas))); - - _FDT(fdt_setprop_string(fdt, node, "compatible", "ibm,power-ivpe")); - _FDT(fdt_setprop(fdt, node, "ibm,xive-eq-sizes", eq_sizes, - sizeof(eq_sizes))); - _FDT(fdt_setprop(fdt, node, "ibm,xive-lisn-ranges", lisn_ranges, - sizeof(lisn_ranges))); - - /* For Linux to link the LSIs to the interrupt controller. */ - _FDT(fdt_setprop(fdt, node, "interrupt-controller", NULL, 0)); - _FDT(fdt_setprop_cell(fdt, node, "#interrupt-cells", 2)); - - /* For SLOF */ - _FDT(fdt_setprop_cell(fdt, node, "linux,phandle", phandle)); - _FDT(fdt_setprop_cell(fdt, node, "phandle", phandle)); - - /* - * The "ibm,plat-res-int-priorities" property defines the priority - * ranges reserved by the hypervisor - */ - _FDT(fdt_setprop(fdt, 0, "ibm,plat-res-int-priorities", - plat_res_int_priorities, sizeof(plat_res_int_prioriti= es))); -} diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 415defe394..4eabafc7e1 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -308,8 +308,8 @@ static void ics_spapr_realize(DeviceState *dev, Error *= *errp) spapr_register_hypercall(H_IPOLL, h_ipoll); } =20 -void spapr_dt_xics(SpaprMachineState *spapr, uint32_t nr_servers, void *fd= t, - uint32_t phandle) +static void xics_spapr_dt(SpaprInterruptController *intc, uint32_t nr_serv= ers, + void *fdt, uint32_t phandle) { uint32_t interrupt_server_ranges_prop[] =3D { 0, cpu_to_be32(nr_servers), @@ -408,6 +408,7 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) sicc->free_irq =3D xics_spapr_free_irq; sicc->set_irq =3D xics_spapr_set_irq; sicc->print_info =3D xics_spapr_print_info; + sicc->dt =3D xics_spapr_dt; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 6c38de5927..e880db5d38 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1255,8 +1255,7 @@ static void *spapr_build_fdt(SpaprMachineState *spapr) _FDT(fdt_setprop_cell(fdt, 0, "#size-cells", 2)); =20 /* /interrupt controller */ - spapr->irq->dt_populate(spapr, spapr_max_server_number(spapr), fdt, - PHANDLE_INTC); + spapr_irq_dt(spapr, spapr_max_server_number(spapr), fdt, PHANDLE_INTC); =20 ret =3D spapr_populate_memory(spapr, fdt); if (ret < 0) { diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index a29b527232..a8005072e6 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -134,7 +134,6 @@ SpaprIrq spapr_irq_xics =3D { .xics =3D true, .xive =3D false, =20 - .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .init_kvm =3D spapr_irq_init_kvm_xics, @@ -184,7 +183,6 @@ SpaprIrq spapr_irq_xive =3D { .xics =3D false, .xive =3D true, =20 - .dt_populate =3D spapr_dt_xive, .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, .init_kvm =3D spapr_irq_init_kvm_xive, @@ -209,13 +207,6 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *= spapr) &spapr_irq_xive : &spapr_irq_xics; } =20 -static void spapr_irq_dt_populate_dual(SpaprMachineState *spapr, - uint32_t nr_servers, void *fdt, - uint32_t phandle) -{ - spapr_irq_current(spapr)->dt_populate(spapr, nr_servers, fdt, phandle); -} - static int spapr_irq_post_load_dual(SpaprMachineState *spapr, int version_= id) { /* @@ -270,7 +261,6 @@ SpaprIrq spapr_irq_dual =3D { .xics =3D true, .xive =3D true, =20 - .dt_populate =3D spapr_irq_dt_populate_dual, .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, .init_kvm =3D NULL, /* should not be used */ @@ -377,6 +367,15 @@ void spapr_irq_print_info(SpaprMachineState *spapr, Mo= nitor *mon) sicc->print_info(spapr->active_intc, mon); } =20 +void spapr_irq_dt(SpaprMachineState *spapr, uint32_t nr_servers, + void *fdt, uint32_t phandle) +{ + SpaprInterruptControllerClass *sicc + =3D SPAPR_INTC_GET_CLASS(spapr->active_intc); + + sicc->dt(spapr->active_intc, nr_servers, fdt, phandle); +} + void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); @@ -686,7 +685,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .xics =3D true, .xive =3D false, =20 - .dt_populate =3D spapr_dt_xics, .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, .init_kvm =3D spapr_irq_init_kvm_xics, diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index c5081e81d9..1be53a01bb 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -60,6 +60,8 @@ typedef struct SpaprInterruptControllerClass { /* These methods should only be called on the active intc */ void (*set_irq)(SpaprInterruptController *intc, int irq, int val); void (*print_info)(SpaprInterruptController *intc, Monitor *mon); + void (*dt)(SpaprInterruptController *intc, uint32_t nr_servers, + void *fdt, uint32_t phandle); } SpaprInterruptControllerClass; =20 void spapr_irq_update_active_intc(SpaprMachineState *spapr); @@ -67,6 +69,8 @@ void spapr_irq_update_active_intc(SpaprMachineState *spap= r); int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, PowerPCCPU *cpu, Error **errp); void spapr_irq_print_info(SpaprMachineState *spapr, Monitor *mon); +void spapr_irq_dt(SpaprMachineState *spapr, uint32_t nr_servers, + void *fdt, uint32_t phandle); =20 void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis); int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, @@ -79,8 +83,6 @@ typedef struct SpaprIrq { bool xics; bool xive; =20 - void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers, - void *fdt, uint32_t phandle); int (*post_load)(SpaprMachineState *spapr, int version_id); void (*reset)(SpaprMachineState *spapr, Error **errp); void (*init_kvm)(SpaprMachineState *spapr, Error **errp); diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index 8f875673f5..ebe156eb30 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -58,8 +58,6 @@ void spapr_xive_pic_print_info(SpaprXive *xive, Monitor *= mon); int spapr_xive_post_load(SpaprXive *xive, int version_id); =20 void spapr_xive_hcall_init(SpaprMachineState *spapr); -void spapr_dt_xive(SpaprMachineState *spapr, uint32_t nr_servers, void *fd= t, - uint32_t phandle); void spapr_xive_set_tctx_os_cam(XiveTCTX *tctx); void spapr_xive_mmio_set_enabled(SpaprXive *xive, bool enable); void spapr_xive_map_mmio(SpaprXive *xive); diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h index 0b35e85c26..8e4fb6adce 100644 --- a/include/hw/ppc/xics_spapr.h +++ b/include/hw/ppc/xics_spapr.h @@ -32,8 +32,6 @@ #define TYPE_ICS_SPAPR "ics-spapr" #define ICS_SPAPR(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SPAPR) =20 -void spapr_dt_xics(SpaprMachineState *spapr, uint32_t nr_servers, void *fd= t, - uint32_t phandle); int xics_kvm_connect(SpaprMachineState *spapr, Error **errp); void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp); bool xics_kvm_has_broken_disconnect(SpaprMachineState *spapr); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569987202; cv=none; d=zoho.com; s=zohoarc; b=nWinDfAdsPcIKKAJ+xz19k7I0Tf31EoIdVcm12raNKxamkh8jTbqUZh7zrzvJ/fL07nrK6Hhx10GRhBGMbWiWdlfiobx9XqWGscYdgjTmmU5rrDq71R+tBoCc3FSIdhUSIVrr5DqywOyNL0lELPTlrlK+pX/Ygr2do/5mOv8a8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569987202; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=ebR0I3FkWiwwqlURpSUx20uwXaGy2YJzqzR5wO/6eHc=; b=RbrZ1+XL8kC8RLI2E1PC/t306L/tQmltLss30mr1WxLoMlPQt3u0xHrDkvbVZy/V3J8XSz599iHN+X497w0deKAzbLGqE/ZywCfmMNMyOnfb41iZNlrNLfS7UixVvuvIRpZmaky3G0WlGMJ6MZ26Adh56hY2tm8ysL6FpugT6Yk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569987202186258.4850950125548; Tue, 1 Oct 2019 20:33:22 -0700 (PDT) Received: from localhost ([::1]:51186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVOD-0001hk-77 for importer@patchew.org; Tue, 01 Oct 2019 23:33:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60584) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlC-00024Y-D6 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUl9-0003TK-Gb for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:01 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:42095) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUl9-0002x9-2U; Tue, 01 Oct 2019 22:52:59 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfB1V1Dz9sRw; Wed, 2 Oct 2019 12:52:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984738; bh=14lr9JEGz77/t8EG1ZaezP7gMjFaSymG2CgVirQ0kyg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NhT/QmWUQ0qm+5ku1d2ViZUXWAG6KQNFct9nzrgpnYNcG6LOCEEMTv1xkR2JzG8ak h56F18F5WiUTciJB5UzsgLHTEccXu4JBSrUwd3jUbusDT+aX4C/F6CxNuTXMLzzMR5 OiOAV8iijzRvyhZDmINISK7101Wrz4eA9iXwuKik= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 28/34] spapr, xics, xive: Match signatures for XICS and XIVE KVM connect routines Date: Wed, 2 Oct 2019 12:52:02 +1000 Message-Id: <20191002025208.3487-29-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" Both XICS and XIVE have routines to connect and disconnect KVM with similar but not identical signatures. This adjusts them to match exactly, which will be useful for further cleanups later. While we're there, we add an explicit return value to the connect path to streamline error reporting in the callers. We remove error reporting the disconnect path. In the XICS case this wasn't used at all. In the XIVE case the only error case was if the KVM device was set up, but KVM didn't have the capability to do so which is pretty obviously impossible. Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- hw/intc/spapr_xive_kvm.c | 22 ++++++++++------------ hw/intc/xics_kvm.c | 9 +++++---- hw/ppc/spapr_irq.c | 22 +++++----------------- include/hw/ppc/spapr_xive.h | 4 ++-- include/hw/ppc/xics_spapr.h | 4 ++-- 5 files changed, 24 insertions(+), 37 deletions(-) diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index 51b334b676..08012ac7cd 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -740,8 +740,9 @@ static void *kvmppc_xive_mmap(SpaprXive *xive, int pgof= f, size_t len, * All the XIVE memory regions are now backed by mappings from the KVM * XIVE device. */ -void kvmppc_xive_connect(SpaprXive *xive, Error **errp) +int kvmppc_xive_connect(SpaprInterruptController *intc, Error **errp) { + SpaprXive *xive =3D SPAPR_XIVE(intc); XiveSource *xsrc =3D &xive->source; Error *local_err =3D NULL; size_t esb_len =3D (1ull << xsrc->esb_shift) * xsrc->nr_irqs; @@ -753,19 +754,19 @@ void kvmppc_xive_connect(SpaprXive *xive, Error **err= p) * rebooting under the XIVE-only interrupt mode. */ if (xive->fd !=3D -1) { - return; + return 0; } =20 if (!kvmppc_has_cap_xive()) { error_setg(errp, "IRQ_XIVE capability must be present for KVM"); - return; + return -1; } =20 /* First, create the KVM XIVE device */ xive->fd =3D kvm_create_device(kvm_state, KVM_DEV_TYPE_XIVE, false); if (xive->fd < 0) { error_setg_errno(errp, -xive->fd, "XIVE: error creating KVM device= "); - return; + return -1; } =20 /* @@ -821,15 +822,17 @@ void kvmppc_xive_connect(SpaprXive *xive, Error **err= p) kvm_kernel_irqchip =3D true; kvm_msi_via_irqfd_allowed =3D true; kvm_gsi_direct_mapping =3D true; - return; + return 0; =20 fail: error_propagate(errp, local_err); - kvmppc_xive_disconnect(xive, NULL); + kvmppc_xive_disconnect(intc); + return -1; } =20 -void kvmppc_xive_disconnect(SpaprXive *xive, Error **errp) +void kvmppc_xive_disconnect(SpaprInterruptController *intc) { + SpaprXive *xive =3D SPAPR_XIVE(intc); XiveSource *xsrc; size_t esb_len; =20 @@ -838,11 +841,6 @@ void kvmppc_xive_disconnect(SpaprXive *xive, Error **e= rrp) return; } =20 - if (!kvmppc_has_cap_xive()) { - error_setg(errp, "IRQ_XIVE capability must be present for KVM"); - return; - } - /* Clear the KVM mapping */ xsrc =3D &xive->source; esb_len =3D (1ull << xsrc->esb_shift) * xsrc->nr_irqs; diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c index ba90d6dc96..954c424b36 100644 --- a/hw/intc/xics_kvm.c +++ b/hw/intc/xics_kvm.c @@ -342,8 +342,9 @@ void ics_kvm_set_irq(ICSState *ics, int srcno, int val) } } =20 -int xics_kvm_connect(SpaprMachineState *spapr, Error **errp) +int xics_kvm_connect(SpaprInterruptController *intc, Error **errp) { + ICSState *ics =3D ICS_SPAPR(intc); int rc; CPUState *cs; Error *local_err =3D NULL; @@ -413,7 +414,7 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error **= errp) } =20 /* Update the KVM sources */ - ics_set_kvm_state(spapr->ics, &local_err); + ics_set_kvm_state(ics, &local_err); if (local_err) { goto fail; } @@ -431,11 +432,11 @@ int xics_kvm_connect(SpaprMachineState *spapr, Error = **errp) =20 fail: error_propagate(errp, local_err); - xics_kvm_disconnect(spapr, NULL); + xics_kvm_disconnect(intc); return -1; } =20 -void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp) +void xics_kvm_disconnect(SpaprInterruptController *intc) { /* * Only on P9 using the XICS-on XIVE KVM device: diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index a8005072e6..5c8ffb27da 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -124,7 +124,7 @@ static void spapr_irq_reset_xics(SpaprMachineState *spa= pr, Error **errp) static void spapr_irq_init_kvm_xics(SpaprMachineState *spapr, Error **errp) { if (kvm_enabled()) { - xics_kvm_connect(spapr, errp); + xics_kvm_connect(SPAPR_INTC(spapr->ics), errp); } } =20 @@ -173,7 +173,7 @@ static void spapr_irq_reset_xive(SpaprMachineState *spa= pr, Error **errp) static void spapr_irq_init_kvm_xive(SpaprMachineState *spapr, Error **errp) { if (kvm_enabled()) { - kvmppc_xive_connect(spapr->xive, errp); + kvmppc_xive_connect(SPAPR_INTC(spapr->xive), errp); } } =20 @@ -215,7 +215,7 @@ static int spapr_irq_post_load_dual(SpaprMachineState *= spapr, int version_id) */ if (spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { if (kvm_irqchip_in_kernel()) { - xics_kvm_disconnect(spapr, &error_fatal); + xics_kvm_disconnect(SPAPR_INTC(spapr->ics)); } spapr_irq_xive.reset(spapr, &error_fatal); } @@ -225,8 +225,6 @@ static int spapr_irq_post_load_dual(SpaprMachineState *= spapr, int version_id) =20 static void spapr_irq_reset_dual(SpaprMachineState *spapr, Error **errp) { - Error *local_err =3D NULL; - /* * Deactivate the XIVE MMIOs. The XIVE backend will reenable them * if selected. @@ -235,18 +233,8 @@ static void spapr_irq_reset_dual(SpaprMachineState *sp= apr, Error **errp) =20 /* Destroy all KVM devices */ if (kvm_irqchip_in_kernel()) { - xics_kvm_disconnect(spapr, &local_err); - if (local_err) { - error_propagate(errp, local_err); - error_prepend(errp, "KVM XICS disconnect failed: "); - return; - } - kvmppc_xive_disconnect(spapr->xive, &local_err); - if (local_err) { - error_propagate(errp, local_err); - error_prepend(errp, "KVM XIVE disconnect failed: "); - return; - } + xics_kvm_disconnect(SPAPR_INTC(spapr->ics)); + kvmppc_xive_disconnect(SPAPR_INTC(spapr->xive)); } =20 spapr_irq_current(spapr)->reset(spapr, errp); diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index ebe156eb30..64972754f9 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -68,8 +68,8 @@ int spapr_xive_end_to_target(uint8_t end_blk, uint32_t en= d_idx, /* * KVM XIVE device helpers */ -void kvmppc_xive_connect(SpaprXive *xive, Error **errp); -void kvmppc_xive_disconnect(SpaprXive *xive, Error **errp); +int kvmppc_xive_connect(SpaprInterruptController *intc, Error **errp); +void kvmppc_xive_disconnect(SpaprInterruptController *intc); void kvmppc_xive_reset(SpaprXive *xive, Error **errp); void kvmppc_xive_set_source_config(SpaprXive *xive, uint32_t lisn, XiveEAS= *eas, Error **errp); diff --git a/include/hw/ppc/xics_spapr.h b/include/hw/ppc/xics_spapr.h index 8e4fb6adce..28b87038c8 100644 --- a/include/hw/ppc/xics_spapr.h +++ b/include/hw/ppc/xics_spapr.h @@ -32,8 +32,8 @@ #define TYPE_ICS_SPAPR "ics-spapr" #define ICS_SPAPR(obj) OBJECT_CHECK(ICSState, (obj), TYPE_ICS_SPAPR) =20 -int xics_kvm_connect(SpaprMachineState *spapr, Error **errp); -void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp); +int xics_kvm_connect(SpaprInterruptController *intc, Error **errp); +void xics_kvm_disconnect(SpaprInterruptController *intc); bool xics_kvm_has_broken_disconnect(SpaprMachineState *spapr); =20 #endif /* XICS_SPAPR_H */ --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569987308; cv=none; d=zoho.com; s=zohoarc; b=Z88YZ6k6c70e/W51JGAzbGLpkiJqnrK3ZyKZb0A4RMrAaBd1J/olEXaB+ZAeWtbbF/0eL2gXLPU6c0mNEeGXTzzOxbuUHGUQI/idLK4jqVy+8evv397y4TXW0J7M1tW8JxEgeiNmDB7vuXV+nP2G/iaDXokngMn0FAey3N7//Cg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569987308; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=mXiAFvXWe9oXkPLVo3RRx8B4uAsXuTcEZjpk92W5D4U=; b=kksaoS8UPoKx3Xba2GIQCUw1DcxrwAggZgj+u8M8kVK06TdlwU+9ol1HTiZO22xrQenXUz6w0VbL8idbI/ziEHHhqYZ0IK5LdpqqkOPMOCVuTKC6tTy4rQVknEyysLNaXClobVYitLdDvgot8VgzeU0bGC3jrXeZwz1TXlg60K0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156998730839345.5552508292966; Tue, 1 Oct 2019 20:35:08 -0700 (PDT) Received: from localhost ([::1]:51200 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVPs-00034U-6P for importer@patchew.org; Tue, 01 Oct 2019 23:35:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60715) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlF-00028V-FF for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlD-0003Zg-6w for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:05 -0400 Received: from ozlabs.org ([203.11.71.1]:60201) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlC-00030I-QH; Tue, 01 Oct 2019 22:53:03 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfB3XWYz9sS8; Wed, 2 Oct 2019 12:52:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984738; bh=E6qkxJWansAqQI+vsJg0EQSMxfj2M7lcVKCtmPfEoj8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pFptSH8RBdmELcMa12tjUK9wZ+0EESam7dAeLvVQH5cbq19/4HBFsuao8u9299q/C iDKKiFOUR8CriIMmbB/vCdg0+nyI+6YkyWXAhY3U/VTC8SUmiinffqV5hfANI5GFs+ O9iGR4QvnedOVO1bmACfTXbu+dfHzVFaHfhXBHBQ= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 29/34] spapr: Remove SpaprIrq::init_kvm hook Date: Wed, 2 Oct 2019 12:52:03 +1000 Message-Id: <20191002025208.3487-30-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" This hook is a bit odd. The only caller is spapr_irq_init_kvm(), but it explicitly takes an SpaprIrq *, so it's never really called through the current SpaprIrq. Essentially this is just a way of passing through a function pointer so that spapr_irq_init_kvm() can handle some configuration and error handling logic without duplicating it between the xics and xive reset paths. So, make it just take that function pointer. Because of earlier reworks to the KVM connect/disconnect code in the xics and xive backends we can also eliminate some wrapper functions and streamline error handling a bit. Signed-off-by: David Gibson Reviewed-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater --- hw/ppc/spapr_irq.c | 74 +++++++++++++------------------------- include/hw/ppc/spapr_irq.h | 1 - 2 files changed, 25 insertions(+), 50 deletions(-) diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 5c8ffb27da..7cd18e5b15 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -65,33 +65,35 @@ void spapr_irq_msi_free(SpaprMachineState *spapr, int i= rq, uint32_t num) bitmap_clear(spapr->irq_map, irq - SPAPR_IRQ_MSI, num); } =20 -static void spapr_irq_init_kvm(SpaprMachineState *spapr, - SpaprIrq *irq, Error **errp) +static int spapr_irq_init_kvm(int (*fn)(SpaprInterruptController *, Error = **), + SpaprInterruptController *intc, + Error **errp) { - MachineState *machine =3D MACHINE(spapr); + MachineState *machine =3D MACHINE(qdev_get_machine()); Error *local_err =3D NULL; =20 if (kvm_enabled() && machine_kernel_irqchip_allowed(machine)) { - irq->init_kvm(spapr, &local_err); - if (local_err && machine_kernel_irqchip_required(machine)) { - error_prepend(&local_err, - "kernel_irqchip requested but unavailable: "); - error_propagate(errp, local_err); - return; - } + if (fn(intc, &local_err) < 0) { + if (machine_kernel_irqchip_required(machine)) { + error_prepend(&local_err, + "kernel_irqchip requested but unavailable: "= ); + error_propagate(errp, local_err); + return -1; + } =20 - if (!local_err) { - return; + /* + * We failed to initialize the KVM device, fallback to + * emulated mode + */ + error_prepend(&local_err, + "kernel_irqchip allowed but unavailable: "); + error_append_hint(&local_err, + "Falling back to kernel-irqchip=3Doff\n"); + warn_report_err(local_err); } - - /* - * We failed to initialize the KVM device, fallback to - * emulated mode - */ - error_prepend(&local_err, "kernel_irqchip allowed but unavailable:= "); - error_append_hint(&local_err, "Falling back to kernel-irqchip=3Dof= f\n"); - warn_report_err(local_err); } + + return 0; } =20 /* @@ -112,20 +114,7 @@ static int spapr_irq_post_load_xics(SpaprMachineState = *spapr, int version_id) =20 static void spapr_irq_reset_xics(SpaprMachineState *spapr, Error **errp) { - Error *local_err =3D NULL; - - spapr_irq_init_kvm(spapr, &spapr_irq_xics, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } -} - -static void spapr_irq_init_kvm_xics(SpaprMachineState *spapr, Error **errp) -{ - if (kvm_enabled()) { - xics_kvm_connect(SPAPR_INTC(spapr->ics), errp); - } + spapr_irq_init_kvm(xics_kvm_connect, SPAPR_INTC(spapr->ics), errp); } =20 SpaprIrq spapr_irq_xics =3D { @@ -136,7 +125,6 @@ SpaprIrq spapr_irq_xics =3D { =20 .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, - .init_kvm =3D spapr_irq_init_kvm_xics, }; =20 /* @@ -151,7 +139,6 @@ static int spapr_irq_post_load_xive(SpaprMachineState *= spapr, int version_id) static void spapr_irq_reset_xive(SpaprMachineState *spapr, Error **errp) { CPUState *cs; - Error *local_err =3D NULL; =20 CPU_FOREACH(cs) { PowerPCCPU *cpu =3D POWERPC_CPU(cs); @@ -160,9 +147,8 @@ static void spapr_irq_reset_xive(SpaprMachineState *spa= pr, Error **errp) spapr_xive_set_tctx_os_cam(spapr_cpu_state(cpu)->tctx); } =20 - spapr_irq_init_kvm(spapr, &spapr_irq_xive, &local_err); - if (local_err) { - error_propagate(errp, local_err); + if (spapr_irq_init_kvm(kvmppc_xive_connect, + SPAPR_INTC(spapr->xive), errp) < 0) { return; } =20 @@ -170,13 +156,6 @@ static void spapr_irq_reset_xive(SpaprMachineState *sp= apr, Error **errp) spapr_xive_mmio_set_enabled(spapr->xive, true); } =20 -static void spapr_irq_init_kvm_xive(SpaprMachineState *spapr, Error **errp) -{ - if (kvm_enabled()) { - kvmppc_xive_connect(SPAPR_INTC(spapr->xive), errp); - } -} - SpaprIrq spapr_irq_xive =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, @@ -185,7 +164,6 @@ SpaprIrq spapr_irq_xive =3D { =20 .post_load =3D spapr_irq_post_load_xive, .reset =3D spapr_irq_reset_xive, - .init_kvm =3D spapr_irq_init_kvm_xive, }; =20 /* @@ -251,7 +229,6 @@ SpaprIrq spapr_irq_dual =3D { =20 .post_load =3D spapr_irq_post_load_dual, .reset =3D spapr_irq_reset_dual, - .init_kvm =3D NULL, /* should not be used */ }; =20 =20 @@ -675,7 +652,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { =20 .post_load =3D spapr_irq_post_load_xics, .reset =3D spapr_irq_reset_xics, - .init_kvm =3D spapr_irq_init_kvm_xics, }; =20 static void spapr_irq_register_types(void) diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 1be53a01bb..a5fdb963a8 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -85,7 +85,6 @@ typedef struct SpaprIrq { =20 int (*post_load)(SpaprMachineState *spapr, int version_id); void (*reset)(SpaprMachineState *spapr, Error **errp); - void (*init_kvm)(SpaprMachineState *spapr, Error **errp); } SpaprIrq; =20 extern SpaprIrq spapr_irq_xics; --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569987413; cv=none; d=zoho.com; s=zohoarc; b=KsskbjKtDzDNpfFibQgjO/rut6KimFmz02qWonRMxbo65Ljgl97cK8zUyjcDKAejxwXnaOCAPYypMK1Rzneld4eXlvTNCkECyTg6cFBLTBVFxTE0Yncb5guobKDkNnkbSqN1TWPxyHMx/VWftcxLLz6LaV1nZcEODbl1mx8wCmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569987413; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=W5kV73FIwyWGPjLbWFeJaCGogEsfgiXnwdU666EwOrI=; b=QE+/FNsQZv/3JSrzTzEgpcTQXwbnGbgAeKis1RcB7xSEUCvWH6rnzXI11HmwQEmvqYnmn75uWRejEe+h2bGFyAay0TAO1HyG7LGJXtOR+f4Lomn6iHJyruxYhrMGcW2e39xY7xAu+mWVxa9eRtcAbESMNzW4/COvmS16h6bi/U0= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569987413391917.2121423528; Tue, 1 Oct 2019 20:36:53 -0700 (PDT) Received: from localhost ([::1]:51206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVRX-0004kE-3A for importer@patchew.org; Tue, 01 Oct 2019 23:36:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60700) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlF-00028I-8K for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlB-0003Wu-SS for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:03 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:59571) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlB-00031l-DT; Tue, 01 Oct 2019 22:53:01 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfB6w4Nz9sSC; Wed, 2 Oct 2019 12:52:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984738; bh=8NIoM3HEHPwMWuOVyT8iaiM/yLh6LSJbwRRlZVX2WHs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DCp9qzSTJeuu7dFtJvkIFdoehU5x1v48U7a43SI97zxzSbbbagSpWmze+HQjLxqX8 9WjqMh6oXsngBuL+EaJQTAI56wdkbCJP8IqsfRjPKg8q1BI9i0hv3FhUVL/9NSUOgw ZFzGpdcXE0aJevXJQLgEuY+3Yuqzhth5aAmwqhaw= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 30/34] spapr, xics, xive: Move SpaprIrq::reset hook logic into activate/deactivate Date: Wed, 2 Oct 2019 12:52:04 +1000 Message-Id: <20191002025208.3487-31-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" It turns out that all the logic in the SpaprIrq::reset hooks (and some in the SpaprIrq::post_load hooks) isn't really related to resetting the irq backend (that's handled by the backends' own reset routines). Rather its about getting the backend ready to be the active interrupt controller or stopping being the active interrupt controller - reset (and post_load) is just the only time that changes at present. To make this flow clearer, move the logic into the explicit backend activate and deactivate hooks. Signed-off-by: David Gibson --- hw/intc/spapr_xive.c | 35 ++++++++++++++++++++ hw/intc/xics_spapr.c | 16 +++++++++ hw/ppc/spapr_irq.c | 67 ++------------------------------------ include/hw/ppc/spapr_irq.h | 4 ++- 4 files changed, 57 insertions(+), 65 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 37ffb74ca5..e8b946982c 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -640,6 +640,39 @@ static void spapr_xive_dt(SpaprInterruptController *in= tc, uint32_t nr_servers, plat_res_int_priorities, sizeof(plat_res_int_prioriti= es))); } =20 +static void spapr_xive_activate(SpaprInterruptController *intc, Error **er= rp) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + CPUState *cs; + + CPU_FOREACH(cs) { + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + + /* (TCG) Set the OS CAM line of the thread interrupt context. */ + spapr_xive_set_tctx_os_cam(spapr_cpu_state(cpu)->tctx); + } + + if (kvm_enabled()) { + if (spapr_irq_init_kvm(kvmppc_xive_connect, intc, errp) < 0) { + return; + } + } + + /* Activate the XIVE MMIOs */ + spapr_xive_mmio_set_enabled(xive, true); +} + +static void spapr_xive_deactivate(SpaprInterruptController *intc) +{ + SpaprXive *xive =3D SPAPR_XIVE(intc); + + spapr_xive_mmio_set_enabled(xive, false); + + if (kvm_irqchip_in_kernel()) { + kvmppc_xive_disconnect(intc); + } +} + static void spapr_xive_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -658,6 +691,8 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) xrc->write_nvt =3D spapr_xive_write_nvt; xrc->get_tctx =3D spapr_xive_get_tctx; =20 + sicc->activate =3D spapr_xive_activate; + sicc->deactivate =3D spapr_xive_deactivate; sicc->cpu_intc_create =3D spapr_xive_cpu_intc_create; sicc->claim_irq =3D spapr_xive_claim_irq; sicc->free_irq =3D spapr_xive_free_irq; diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 4eabafc7e1..8abbc799ba 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -395,6 +395,20 @@ static void xics_spapr_print_info(SpaprInterruptContro= ller *intc, Monitor *mon) ics_pic_print_info(ics, mon); } =20 +static void xics_spapr_activate(SpaprInterruptController *intc, Error **er= rp) +{ + if (kvm_enabled()) { + spapr_irq_init_kvm(xics_kvm_connect, intc, errp); + } +} + +static void xics_spapr_deactivate(SpaprInterruptController *intc) +{ + if (kvm_irqchip_in_kernel()) { + xics_kvm_disconnect(intc); + } +} + static void ics_spapr_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -403,6 +417,8 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) =20 device_class_set_parent_realize(dc, ics_spapr_realize, &isc->parent_realize); + sicc->activate =3D xics_spapr_activate; + sicc->deactivate =3D xics_spapr_deactivate; sicc->cpu_intc_create =3D xics_spapr_cpu_intc_create; sicc->claim_irq =3D xics_spapr_claim_irq; sicc->free_irq =3D xics_spapr_free_irq; diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 7cd18e5b15..f70b331f44 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -65,9 +65,9 @@ void spapr_irq_msi_free(SpaprMachineState *spapr, int irq= , uint32_t num) bitmap_clear(spapr->irq_map, irq - SPAPR_IRQ_MSI, num); } =20 -static int spapr_irq_init_kvm(int (*fn)(SpaprInterruptController *, Error = **), - SpaprInterruptController *intc, - Error **errp) +int spapr_irq_init_kvm(int (*fn)(SpaprInterruptController *, Error **), + SpaprInterruptController *intc, + Error **errp) { MachineState *machine =3D MACHINE(qdev_get_machine()); Error *local_err =3D NULL; @@ -112,11 +112,6 @@ static int spapr_irq_post_load_xics(SpaprMachineState = *spapr, int version_id) return 0; } =20 -static void spapr_irq_reset_xics(SpaprMachineState *spapr, Error **errp) -{ - spapr_irq_init_kvm(xics_kvm_connect, SPAPR_INTC(spapr->ics), errp); -} - SpaprIrq spapr_irq_xics =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, @@ -124,7 +119,6 @@ SpaprIrq spapr_irq_xics =3D { .xive =3D false, =20 .post_load =3D spapr_irq_post_load_xics, - .reset =3D spapr_irq_reset_xics, }; =20 /* @@ -136,26 +130,6 @@ static int spapr_irq_post_load_xive(SpaprMachineState = *spapr, int version_id) return spapr_xive_post_load(spapr->xive, version_id); } =20 -static void spapr_irq_reset_xive(SpaprMachineState *spapr, Error **errp) -{ - CPUState *cs; - - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - - /* (TCG) Set the OS CAM line of the thread interrupt context. */ - spapr_xive_set_tctx_os_cam(spapr_cpu_state(cpu)->tctx); - } - - if (spapr_irq_init_kvm(kvmppc_xive_connect, - SPAPR_INTC(spapr->xive), errp) < 0) { - return; - } - - /* Activate the XIVE MMIOs */ - spapr_xive_mmio_set_enabled(spapr->xive, true); -} - SpaprIrq spapr_irq_xive =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, @@ -163,7 +137,6 @@ SpaprIrq spapr_irq_xive =3D { .xive =3D true, =20 .post_load =3D spapr_irq_post_load_xive, - .reset =3D spapr_irq_reset_xive, }; =20 /* @@ -187,37 +160,9 @@ static SpaprIrq *spapr_irq_current(SpaprMachineState *= spapr) =20 static int spapr_irq_post_load_dual(SpaprMachineState *spapr, int version_= id) { - /* - * Force a reset of the XIVE backend after migration. The machine - * defaults to XICS at startup. - */ - if (spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { - if (kvm_irqchip_in_kernel()) { - xics_kvm_disconnect(SPAPR_INTC(spapr->ics)); - } - spapr_irq_xive.reset(spapr, &error_fatal); - } - return spapr_irq_current(spapr)->post_load(spapr, version_id); } =20 -static void spapr_irq_reset_dual(SpaprMachineState *spapr, Error **errp) -{ - /* - * Deactivate the XIVE MMIOs. The XIVE backend will reenable them - * if selected. - */ - spapr_xive_mmio_set_enabled(spapr->xive, false); - - /* Destroy all KVM devices */ - if (kvm_irqchip_in_kernel()) { - xics_kvm_disconnect(SPAPR_INTC(spapr->ics)); - kvmppc_xive_disconnect(SPAPR_INTC(spapr->xive)); - } - - spapr_irq_current(spapr)->reset(spapr, errp); -} - /* * Define values in sync with the XIVE and XICS backend */ @@ -228,7 +173,6 @@ SpaprIrq spapr_irq_dual =3D { .xive =3D true, =20 .post_load =3D spapr_irq_post_load_dual, - .reset =3D spapr_irq_reset_dual, }; =20 =20 @@ -512,10 +456,6 @@ void spapr_irq_reset(SpaprMachineState *spapr, Error *= *errp) assert(!spapr->irq_map || bitmap_empty(spapr->irq_map, spapr->irq_map_= nr)); =20 spapr_irq_update_active_intc(spapr); - - if (spapr->irq->reset) { - spapr->irq->reset(spapr, errp); - } } =20 int spapr_irq_get_phandle(SpaprMachineState *spapr, void *fdt, Error **err= p) @@ -651,7 +591,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .xive =3D false, =20 .post_load =3D spapr_irq_post_load_xics, - .reset =3D spapr_irq_reset_xics, }; =20 static void spapr_irq_register_types(void) diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index a5fdb963a8..1aff1c2eb7 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -84,7 +84,6 @@ typedef struct SpaprIrq { bool xive; =20 int (*post_load)(SpaprMachineState *spapr, int version_id); - void (*reset)(SpaprMachineState *spapr, Error **errp); } SpaprIrq; =20 extern SpaprIrq spapr_irq_xics; @@ -99,6 +98,9 @@ qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq); int spapr_irq_post_load(SpaprMachineState *spapr, int version_id); void spapr_irq_reset(SpaprMachineState *spapr, Error **errp); int spapr_irq_get_phandle(SpaprMachineState *spapr, void *fdt, Error **err= p); +int spapr_irq_init_kvm(int (*fn)(SpaprInterruptController *, Error **), + SpaprInterruptController *intc, + Error **errp); =20 /* * XICS legacy routines --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569985754; cv=none; d=zoho.com; s=zohoarc; b=bor0MjjGh5swdZjPj6zV+86/9Y7GHa3cyb/m3oQxnj/rDIa1pMYIQu0iBTOYnq/J6H0T6etomccjLDXGbP3d6C6FqfxxSbpJZnl2VHKy7UlgUMz7vdImYyAVQfFnbKfqolNHrp6tQ6N0hp/U3FvN52iljhlkvscR1f1xdedzLi8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569985754; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=dV+Q0mWgyXDaXFzieTx6OEDn21a4aUlrT12sAIXLgOc=; b=EiuplZTMzvjIK3KIv8qxnWy6cNXPtDg5kcsFEUXWZEZ/iGf1ziZOjMv5fWjPp9M11c893jPE1oDndIUfuCHMk+CgN7uRjXM+CxavdpNfnuiK47mR59SgssIDZiIvDsT5PNrVrdGmGrfdIM28iss0/ZkOnQu0r4q2fhWj7mee7Wo= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569985754510729.7243215070537; Tue, 1 Oct 2019 20:09:14 -0700 (PDT) Received: from localhost ([::1]:50936 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV0n-0000tm-3P for importer@patchew.org; Tue, 01 Oct 2019 23:09:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32875) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlW-0002aW-SK for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlV-00045R-F9 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:22 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:52761) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlV-0003Sq-3R; Tue, 01 Oct 2019 22:53:21 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfC34x2z9sSF; Wed, 2 Oct 2019 12:52:18 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984739; bh=su5Azpr6jv3U1lAzQwmJRqf8/j+9fROC9fHBRESUp2g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PCWzuiS5u6QE5W3qXWmDfbGbc6AU3mypTm4fvrG0/aD6IXUgV2Z1SckK30lUt8Cmi vK8twTwlLiI2xquhgBI24snOjer+uyUvHPSLMTUXcJOx9QN1AuM7/aQrL3w2TPi36X aKKw/ajklkrMJrr3ieGEzhidXTT8iiUQ8BxJZCE0= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 31/34] spapr, xics, xive: Move SpaprIrq::post_load hook to backends Date: Wed, 2 Oct 2019 12:52:05 +1000 Message-Id: <20191002025208.3487-32-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The remaining logic in the post_load hook really belongs to the interrupt controller backends, and just needs to be called on the active controller (after the active controller is set to the right thing based on the incoming migration in the generic spapr_irq_post_load() logic). Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/intc/spapr_xive.c | 5 +++-- hw/intc/xics_spapr.c | 13 +++++++++++ hw/ppc/spapr_irq.c | 45 ++++--------------------------------- include/hw/ppc/spapr_irq.h | 3 +-- include/hw/ppc/spapr_xive.h | 1 - 5 files changed, 21 insertions(+), 46 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index e8b946982c..ab68e6eaf6 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -462,10 +462,10 @@ static int vmstate_spapr_xive_pre_save(void *opaque) * Called by the sPAPR IRQ backend 'post_load' method at the machine * level. */ -int spapr_xive_post_load(SpaprXive *xive, int version_id) +static int spapr_xive_post_load(SpaprInterruptController *intc, int versio= n_id) { if (kvm_irqchip_in_kernel()) { - return kvmppc_xive_post_load(xive, version_id); + return kvmppc_xive_post_load(SPAPR_XIVE(intc), version_id); } =20 return 0; @@ -699,6 +699,7 @@ static void spapr_xive_class_init(ObjectClass *klass, v= oid *data) sicc->set_irq =3D spapr_xive_set_irq; sicc->print_info =3D spapr_xive_print_info; sicc->dt =3D spapr_xive_dt; + sicc->post_load =3D spapr_xive_post_load; } =20 static const TypeInfo spapr_xive_info =3D { diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index 8abbc799ba..9590eedc3d 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -395,6 +395,18 @@ static void xics_spapr_print_info(SpaprInterruptContro= ller *intc, Monitor *mon) ics_pic_print_info(ics, mon); } =20 +static int xics_spapr_post_load(SpaprInterruptController *intc, int versio= n_id) +{ + if (!kvm_irqchip_in_kernel()) { + CPUState *cs; + CPU_FOREACH(cs) { + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + icp_resend(spapr_cpu_state(cpu)->icp); + } + } + return 0; +} + static void xics_spapr_activate(SpaprInterruptController *intc, Error **er= rp) { if (kvm_enabled()) { @@ -425,6 +437,7 @@ static void ics_spapr_class_init(ObjectClass *klass, vo= id *data) sicc->set_irq =3D xics_spapr_set_irq; sicc->print_info =3D xics_spapr_print_info; sicc->dt =3D xics_spapr_dt; + sicc->post_load =3D xics_spapr_post_load; } =20 static const TypeInfo ics_spapr_info =3D { diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index f70b331f44..f3d18b1dad 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -100,43 +100,22 @@ int spapr_irq_init_kvm(int (*fn)(SpaprInterruptContro= ller *, Error **), * XICS IRQ backend. */ =20 -static int spapr_irq_post_load_xics(SpaprMachineState *spapr, int version_= id) -{ - if (!kvm_irqchip_in_kernel()) { - CPUState *cs; - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - icp_resend(spapr_cpu_state(cpu)->icp); - } - } - return 0; -} - SpaprIrq spapr_irq_xics =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, .xics =3D true, .xive =3D false, - - .post_load =3D spapr_irq_post_load_xics, }; =20 /* * XIVE IRQ backend. */ =20 -static int spapr_irq_post_load_xive(SpaprMachineState *spapr, int version_= id) -{ - return spapr_xive_post_load(spapr->xive, version_id); -} - SpaprIrq spapr_irq_xive =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, .nr_msis =3D SPAPR_NR_MSIS, .xics =3D false, .xive =3D true, - - .post_load =3D spapr_irq_post_load_xive, }; =20 /* @@ -148,21 +127,6 @@ SpaprIrq spapr_irq_xive =3D { * activated after an extra machine reset. */ =20 -/* - * Returns the sPAPR IRQ backend negotiated by CAS. XICS is the - * default. - */ -static SpaprIrq *spapr_irq_current(SpaprMachineState *spapr) -{ - return spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT) ? - &spapr_irq_xive : &spapr_irq_xics; -} - -static int spapr_irq_post_load_dual(SpaprMachineState *spapr, int version_= id) -{ - return spapr_irq_current(spapr)->post_load(spapr, version_id); -} - /* * Define values in sync with the XIVE and XICS backend */ @@ -171,8 +135,6 @@ SpaprIrq spapr_irq_dual =3D { .nr_msis =3D SPAPR_NR_MSIS, .xics =3D true, .xive =3D true, - - .post_load =3D spapr_irq_post_load_dual, }; =20 =20 @@ -447,8 +409,11 @@ qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) =20 int spapr_irq_post_load(SpaprMachineState *spapr, int version_id) { + SpaprInterruptControllerClass *sicc; + spapr_irq_update_active_intc(spapr); - return spapr->irq->post_load(spapr, version_id); + sicc =3D SPAPR_INTC_GET_CLASS(spapr->active_intc); + return sicc->post_load(spapr->active_intc, version_id); } =20 void spapr_irq_reset(SpaprMachineState *spapr, Error **errp) @@ -589,8 +554,6 @@ SpaprIrq spapr_irq_xics_legacy =3D { .nr_msis =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, .xics =3D true, .xive =3D false, - - .post_load =3D spapr_irq_post_load_xics, }; =20 static void spapr_irq_register_types(void) diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 1aff1c2eb7..4c2cd091da 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -62,6 +62,7 @@ typedef struct SpaprInterruptControllerClass { void (*print_info)(SpaprInterruptController *intc, Monitor *mon); void (*dt)(SpaprInterruptController *intc, uint32_t nr_servers, void *fdt, uint32_t phandle); + int (*post_load)(SpaprInterruptController *intc, int version_id); } SpaprInterruptControllerClass; =20 void spapr_irq_update_active_intc(SpaprMachineState *spapr); @@ -82,8 +83,6 @@ typedef struct SpaprIrq { uint32_t nr_msis; bool xics; bool xive; - - int (*post_load)(SpaprMachineState *spapr, int version_id); } SpaprIrq; =20 extern SpaprIrq spapr_irq_xics; diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index 64972754f9..d84bd5c229 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -55,7 +55,6 @@ typedef struct SpaprXive { #define SPAPR_XIVE_BLOCK_ID 0x0 =20 void spapr_xive_pic_print_info(SpaprXive *xive, Monitor *mon); -int spapr_xive_post_load(SpaprXive *xive, int version_id); =20 void spapr_xive_hcall_init(SpaprMachineState *spapr); void spapr_xive_set_tctx_os_cam(XiveTCTX *tctx); --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986996; cv=none; d=zoho.com; s=zohoarc; b=b8cBJLjTMidH/EJLYoBwod5im1JxRkbPSShOYRmFrFRpAi9nv8vDJcyQHWXw3VKlVgdlTp8Oe3DT7w2XwRP92pswrHBZquikEh+WSugKLjCaw6Ggm0O6LF0KYDASeb1f5JWgeTv+XOaR5esrfBLEBGoDfgkd0nczwzE8zaWLONc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986996; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=lLFGJUjemH5hg/MJX6J8Twcu13L/Kz6d6B4ypn0/61Y=; b=JddYjhMJhHlSldMwXukGLrPHgWFeEBcIDUGVdSlcmgim6gvjQM1Po6zozf3ynMCkMv7hw0Dcb5LIzfggrxxCIsem1k8BlKG7lzMpkFcwdy4Wsx8XUkzrKp1XFLNwyMLEIz/Kij7Hjvra85KFJ5JoSE2DO4hswEWn1vqQ4p8M9VY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986996009114.2442819912028; Tue, 1 Oct 2019 20:29:56 -0700 (PDT) Received: from localhost ([::1]:51134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVKq-0006hd-TV for importer@patchew.org; Tue, 01 Oct 2019 23:29:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60647) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlD-00026j-VR for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlB-0003X3-T2 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:03 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:38799) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlB-00031u-FD; Tue, 01 Oct 2019 22:53:01 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfC1gd5z9sS9; Wed, 2 Oct 2019 12:52:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984739; bh=4MWYwFzFQVTVpiyO/6at6K2oXDQ5iH6j4G7Aa00nXY4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YWZ6DbmMp78/+jprY/AqjOuIc4vEViTcvTXwuFhGhcQAAu0dNMXhserxHvAPnywn5 u1AHQLVhpWFDSAM9IlbEgbUDRK1NI/9z0Mt6c/PMPEZDwoP7P9cw2wIBt1jafaRPBB W39lrqTHUXBcVSWvNJzeeeO0JpI/fyVQUPr8KZhc= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 32/34] spapr: Remove SpaprIrq::nr_msis Date: Wed, 2 Oct 2019 12:52:06 +1000 Message-Id: <20191002025208.3487-33-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The nr_msis value we use here has to line up with whether we're using legacy or modern irq allocation. Therefore it's safer to derive it based on legacy_irq_allocation rather than having SpaprIrq contain a canned value. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 5 ++--- hw/ppc/spapr_irq.c | 26 +++++++++++++++++--------- hw/ppc/spapr_pci.c | 7 ++++--- include/hw/pci-host/spapr.h | 4 ++-- include/hw/ppc/spapr_irq.h | 4 +--- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index e880db5d38..153cc54354 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1275,7 +1275,7 @@ static void *spapr_build_fdt(SpaprMachineState *spapr) } =20 QLIST_FOREACH(phb, &spapr->phbs, list) { - ret =3D spapr_dt_phb(phb, PHANDLE_INTC, fdt, spapr->irq->nr_msis, = NULL); + ret =3D spapr_dt_phb(spapr, phb, PHANDLE_INTC, fdt, NULL); if (ret < 0) { error_report("couldn't setup PCI devices in fdt"); exit(1); @@ -3910,8 +3910,7 @@ int spapr_phb_dt_populate(SpaprDrc *drc, SpaprMachine= State *spapr, return -1; } =20 - if (spapr_dt_phb(sphb, intc_phandle, fdt, spapr->irq->nr_msis, - fdt_start_offset)) { + if (spapr_dt_phb(spapr, sphb, intc_phandle, fdt, fdt_start_offset)) { error_setg(errp, "unable to create FDT node for PHB %d", sphb->ind= ex); return -1; } diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index f3d18b1dad..076da31501 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -29,9 +29,14 @@ static const TypeInfo spapr_intc_info =3D { .class_size =3D sizeof(SpaprInterruptControllerClass), }; =20 -void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis) +static void spapr_irq_msi_init(SpaprMachineState *spapr) { - spapr->irq_map_nr =3D nr_msis; + if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { + /* Legacy mode doesn't use this allocater */ + return; + } + + spapr->irq_map_nr =3D spapr_irq_nr_msis(spapr); spapr->irq_map =3D bitmap_new(spapr->irq_map_nr); } =20 @@ -102,7 +107,6 @@ int spapr_irq_init_kvm(int (*fn)(SpaprInterruptControll= er *, Error **), =20 SpaprIrq spapr_irq_xics =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, - .nr_msis =3D SPAPR_NR_MSIS, .xics =3D true, .xive =3D false, }; @@ -113,7 +117,6 @@ SpaprIrq spapr_irq_xics =3D { =20 SpaprIrq spapr_irq_xive =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, - .nr_msis =3D SPAPR_NR_MSIS, .xics =3D false, .xive =3D true, }; @@ -132,7 +135,6 @@ SpaprIrq spapr_irq_xive =3D { */ SpaprIrq spapr_irq_dual =3D { .nr_xirqs =3D SPAPR_NR_XIRQS, - .nr_msis =3D SPAPR_NR_MSIS, .xics =3D true, .xive =3D true, }; @@ -247,6 +249,15 @@ void spapr_irq_dt(SpaprMachineState *spapr, uint32_t n= r_servers, sicc->dt(spapr->active_intc, nr_servers, fdt, phandle); } =20 +uint32_t spapr_irq_nr_msis(SpaprMachineState *spapr) +{ + if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { + return spapr->irq->nr_xirqs; + } else { + return SPAPR_XIRQ_BASE + spapr->irq->nr_xirqs - SPAPR_IRQ_MSI; + } +} + void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); @@ -267,9 +278,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) } =20 /* Initialize the MSI IRQ allocator. */ - if (!SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { - spapr_irq_msi_init(spapr, spapr->irq->nr_msis); - } + spapr_irq_msi_init(spapr); =20 if (spapr->irq->xics) { Error *local_err =3D NULL; @@ -551,7 +560,6 @@ int spapr_irq_find(SpaprMachineState *spapr, int num, b= ool align, Error **errp) =20 SpaprIrq spapr_irq_xics_legacy =3D { .nr_xirqs =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, - .nr_msis =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, .xics =3D true, .xive =3D false, }; diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 01ff41d4c4..cc0e7829b6 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -2277,8 +2277,8 @@ static void spapr_phb_pci_enumerate(SpaprPhbState *ph= b) =20 } =20 -int spapr_dt_phb(SpaprPhbState *phb, uint32_t intc_phandle, void *fdt, - uint32_t nr_msis, int *node_offset) +int spapr_dt_phb(SpaprMachineState *spapr, SpaprPhbState *phb, + uint32_t intc_phandle, void *fdt, int *node_offset) { int bus_off, i, j, ret; uint32_t bus_range[] =3D { cpu_to_be32(0), cpu_to_be32(0xff) }; @@ -2343,7 +2343,8 @@ int spapr_dt_phb(SpaprPhbState *phb, uint32_t intc_ph= andle, void *fdt, _FDT(fdt_setprop(fdt, bus_off, "ranges", &ranges, sizeof_ranges)); _FDT(fdt_setprop(fdt, bus_off, "reg", &bus_reg, sizeof(bus_reg))); _FDT(fdt_setprop_cell(fdt, bus_off, "ibm,pci-config-space-type", 0x1)); - _FDT(fdt_setprop_cell(fdt, bus_off, "ibm,pe-total-#msi", nr_msis)); + _FDT(fdt_setprop_cell(fdt, bus_off, "ibm,pe-total-#msi", + spapr_irq_nr_msis(spapr))); =20 /* Dynamic DMA window */ if (phb->ddw_enabled) { diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h index 23506f05d9..8877ff51fb 100644 --- a/include/hw/pci-host/spapr.h +++ b/include/hw/pci-host/spapr.h @@ -128,8 +128,8 @@ struct SpaprPhbState { #define SPAPR_PCI_NV2ATSD_WIN_SIZE (NVGPU_MAX_NUM * NVGPU_MAX_LINKS * \ 64 * KiB) =20 -int spapr_dt_phb(SpaprPhbState *phb, uint32_t intc_phandle, void *fdt, - uint32_t nr_msis, int *node_offset); +int spapr_dt_phb(SpaprMachineState *spapr, SpaprPhbState *phb, + uint32_t intc_phandle, void *fdt, int *node_offset); =20 void spapr_pci_rtas_init(void); =20 diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 4c2cd091da..f4742ffbd6 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -27,7 +27,6 @@ #define SPAPR_IRQ_MSI (SPAPR_XIRQ_BASE + 0x0300) =20 #define SPAPR_NR_XIRQS 0x1000 -#define SPAPR_NR_MSIS (SPAPR_XIRQ_BASE + SPAPR_NR_XIRQS - SPAPR_IRQ= _MSI) =20 typedef struct SpaprMachineState SpaprMachineState; =20 @@ -73,14 +72,13 @@ void spapr_irq_print_info(SpaprMachineState *spapr, Mon= itor *mon); void spapr_irq_dt(SpaprMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); =20 -void spapr_irq_msi_init(SpaprMachineState *spapr, uint32_t nr_msis); +uint32_t spapr_irq_nr_msis(SpaprMachineState *spapr); int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, Error **errp); void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num); =20 typedef struct SpaprIrq { uint32_t nr_xirqs; - uint32_t nr_msis; bool xics; bool xive; } SpaprIrq; --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986518; cv=none; d=zoho.com; s=zohoarc; b=e1knC87D3+gjUy5To1GRdegsvtitJOHSgEe4lMhRz71hixJU3y8W2qsZ8ZnAfAZsrPEY4OLF1oDkfqEycatboTwm6bRrPt1kRFcsn4sFw9Dtfkp2+iZ1XmU1dIZmnDya7GDyfkplMBG3GHlTZB3rJY252Z+RIH6RhDeIM6JjLYE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986518; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=2vwfKXqNLoCbdiu3ixsfazLpJfxOBjByAoWCTNTWlgA=; b=gCb7lhU16N9MbxPkbRc/KtLgXANdTrW5pVRrfI7zb8Yc2WjmjwBIWAgPvxp16OlY7E2sjf/4C07/KWfviVsIV6xJtv/nalejjg7JzzNowgzzX60JaBzfjcmCArnBw8vuzgo8fN5Ah0h/d/fz0SNJLMvCF6EGVSDlEXWXwK+V90c= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986518155548.234093360148; Tue, 1 Oct 2019 20:21:58 -0700 (PDT) Received: from localhost ([::1]:51044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFVDA-0006pd-Ul for importer@patchew.org; Tue, 01 Oct 2019 23:21:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60644) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlE-00026g-0k for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlB-0003We-Qa for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:03 -0400 Received: from ozlabs.org ([203.11.71.1]:46683) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlB-0003TY-C3; Tue, 01 Oct 2019 22:53:01 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfC4wBnz9sSG; Wed, 2 Oct 2019 12:52:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984739; bh=2F47wNOBqT6+I+d3Di/Hd6L0CCPCHfTQ4ylitr4Xw44=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eU42+mJ0HSJGRPdPEh63WT7ATI2h4hdrnUsCkDgWcTnMbhC3mI0siFpJ1/iEM5siS yt1HXU2sNaqujOZk7/EkonHG/YxXwmvTBqfT2kbJQe4YqK3GrufiBYBL5jdCRnBsI1 uFxRnnNCu2wTrlqfk4xsOXcfBxaQatrZhc4rBY3c= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 33/34] spapr: Move SpaprIrq::nr_xirqs to SpaprMachineClass Date: Wed, 2 Oct 2019 12:52:07 +1000 Message-Id: <20191002025208.3487-34-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" For the benefit of peripheral device allocation, the number of available irqs really wants to be the same on a given machine type version, regardless of what irq backends we are using. That's the case now, but only because we make sure the different SpaprIrq instances have the same value except for the special legacy one. Since this really only depends on machine type version, move the value to SpaprMachineClass instead of SpaprIrq. This also puts the code to set it to the lower value on old machine types right next to setting legacy_irq_allocation, which needs to go hand in hand. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 2 ++ hw/ppc/spapr_irq.c | 33 ++++++++++++++++----------------- include/hw/ppc/spapr.h | 1 + include/hw/ppc/spapr_irq.h | 1 - 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 153cc54354..e1ff03152e 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -4443,6 +4443,7 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) smc->irq =3D &spapr_irq_dual; smc->dr_phb_enabled =3D true; smc->linux_pci_probe =3D true; + smc->nr_xirqs =3D SPAPR_NR_XIRQS; } =20 static const TypeInfo spapr_machine_info =3D { @@ -4578,6 +4579,7 @@ static void spapr_machine_3_0_class_options(MachineCl= ass *mc) compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len); =20 smc->legacy_irq_allocation =3D true; + smc->nr_xirqs =3D 0x400; smc->irq =3D &spapr_irq_xics_legacy; } =20 diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 076da31501..2768f9a765 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -106,7 +106,6 @@ int spapr_irq_init_kvm(int (*fn)(SpaprInterruptControll= er *, Error **), */ =20 SpaprIrq spapr_irq_xics =3D { - .nr_xirqs =3D SPAPR_NR_XIRQS, .xics =3D true, .xive =3D false, }; @@ -116,7 +115,6 @@ SpaprIrq spapr_irq_xics =3D { */ =20 SpaprIrq spapr_irq_xive =3D { - .nr_xirqs =3D SPAPR_NR_XIRQS, .xics =3D false, .xive =3D true, }; @@ -134,7 +132,6 @@ SpaprIrq spapr_irq_xive =3D { * Define values in sync with the XIVE and XICS backend */ SpaprIrq spapr_irq_dual =3D { - .nr_xirqs =3D SPAPR_NR_XIRQS, .xics =3D true, .xive =3D true, }; @@ -251,16 +248,19 @@ void spapr_irq_dt(SpaprMachineState *spapr, uint32_t = nr_servers, =20 uint32_t spapr_irq_nr_msis(SpaprMachineState *spapr) { - if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { - return spapr->irq->nr_xirqs; + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); + + if (smc->legacy_irq_allocation) { + return smc->nr_xirqs; } else { - return SPAPR_XIRQ_BASE + spapr->irq->nr_xirqs - SPAPR_IRQ_MSI; + return SPAPR_XIRQ_BASE + smc->nr_xirqs - SPAPR_IRQ_MSI; } } =20 void spapr_irq_init(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); =20 if (machine_kernel_irqchip_split(machine)) { error_setg(errp, "kernel_irqchip split mode not supported on pseri= es"); @@ -298,8 +298,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) return; } =20 - object_property_set_int(obj, spapr->irq->nr_xirqs, "nr-irqs", - &local_err); + object_property_set_int(obj, smc->nr_xirqs, "nr-irqs", &local_err); if (local_err) { error_propagate(errp, local_err); return; @@ -320,8 +319,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) int i; =20 dev =3D qdev_create(NULL, TYPE_SPAPR_XIVE); - qdev_prop_set_uint32(dev, "nr-irqs", - spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE); + qdev_prop_set_uint32(dev, "nr-irqs", smc->nr_xirqs + SPAPR_XIRQ_BA= SE); /* * 8 XIVE END structures per CPU. One for each available * priority @@ -346,17 +344,18 @@ void spapr_irq_init(SpaprMachineState *spapr, Error *= *errp) } =20 spapr->qirqs =3D qemu_allocate_irqs(spapr_set_irq, spapr, - spapr->irq->nr_xirqs + SPAPR_XIRQ_BA= SE); + smc->nr_xirqs + SPAPR_XIRQ_BASE); } =20 int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **e= rrp) { SpaprInterruptController *intcs[] =3D ALL_INTCS(spapr); int i; + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); int rc; =20 assert(irq >=3D SPAPR_XIRQ_BASE); - assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + assert(irq < (smc->nr_xirqs + SPAPR_XIRQ_BASE)); =20 for (i =3D 0; i < ARRAY_SIZE(intcs); i++) { SpaprInterruptController *intc =3D intcs[i]; @@ -376,9 +375,10 @@ void spapr_irq_free(SpaprMachineState *spapr, int irq,= int num) { SpaprInterruptController *intcs[] =3D ALL_INTCS(spapr); int i, j; + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); =20 assert(irq >=3D SPAPR_XIRQ_BASE); - assert((irq + num) <=3D (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + assert((irq + num) <=3D (smc->nr_xirqs + SPAPR_XIRQ_BASE)); =20 for (i =3D irq; i < (irq + num); i++) { for (j =3D 0; j < ARRAY_SIZE(intcs); j++) { @@ -395,6 +395,8 @@ void spapr_irq_free(SpaprMachineState *spapr, int irq, = int num) =20 qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) { + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); + /* * This interface is basically for VIO and PHB devices to find the * right qemu_irq to manipulate, so we only allow access to the @@ -403,7 +405,7 @@ qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) * interfaces, we can change this if we need to in future. */ assert(irq >=3D SPAPR_XIRQ_BASE); - assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE)); + assert(irq < (smc->nr_xirqs + SPAPR_XIRQ_BASE)); =20 if (spapr->ics) { assert(ics_valid_irq(spapr->ics, irq)); @@ -556,10 +558,7 @@ int spapr_irq_find(SpaprMachineState *spapr, int num, = bool align, Error **errp) return first + ics->offset; } =20 -#define SPAPR_IRQ_XICS_LEGACY_NR_XIRQS 0x400 - SpaprIrq spapr_irq_xics_legacy =3D { - .nr_xirqs =3D SPAPR_IRQ_XICS_LEGACY_NR_XIRQS, .xics =3D true, .xive =3D false, }; diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 763da757f0..623e8e3f93 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -119,6 +119,7 @@ struct SpaprMachineClass { bool use_ohci_by_default; /* use USB-OHCI instead of XHCI */ bool pre_2_10_has_unused_icps; bool legacy_irq_allocation; + uint32_t nr_xirqs; bool broken_host_serial_model; /* present real host info to the guest = */ bool pre_4_1_migration; /* don't migrate hpt-max-page-size */ bool linux_pci_probe; diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index f4742ffbd6..50491cea4f 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -78,7 +78,6 @@ int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_= t num, bool align, void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num); =20 typedef struct SpaprIrq { - uint32_t nr_xirqs; bool xics; bool xive; } SpaprIrq; --=20 2.21.0 From nobody Wed May 8 03:55:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569986030; cv=none; d=zoho.com; s=zohoarc; b=ly8O0zoIQzmT9g82xV95kWFDQbJFue9G5y4wKMdmObqsBv+sbcKH2Eiw935EBQUcGORtActBLji8dDDvZE/Qs2BM3nGeNbhesXflXQp2uhocJHP5PGnHhfRJKZl1JVp7lI2/brsxfue6Plsp1XdHXqsiulf+0MS4XmNMdzmoqzk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569986030; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=T9CgEdEIn0/4z0KQbzvcaslL7vRvoebV5WpzKQvfN7Q=; b=armEWzZZtF3GEXyRc+Ztp2audZger6pUd/gB6xmNIYjtvodDoTj01aPHFRLJZkUqLWXds+eLl4Auju95IJIxLjq1oOk/pEtoHYA0xdEPqANbImkSsIvair6rQQyB7XOonQpauyK0mnZCWamDEKyYplUgOJJmKvThcBLUP/U8/NE= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569986029018533.3533320380385; Tue, 1 Oct 2019 20:13:49 -0700 (PDT) Received: from localhost ([::1]:50962 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFV5H-0004z8-5K for importer@patchew.org; Tue, 01 Oct 2019 23:13:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32908) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFUlY-0002dC-Ir for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFUlW-00046l-8d for qemu-devel@nongnu.org; Tue, 01 Oct 2019 22:53:24 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:36035) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFUlV-0003Tn-Jt; Tue, 01 Oct 2019 22:53:22 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 46jgfC5dNFz9sSD; Wed, 2 Oct 2019 12:52:19 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1569984739; bh=kdTdoDW7z7uuMG4SCYIyzTeDBtfaAYNaAXY9Ot4r1uw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AX9o1fbPEiz1+nV6FgOKuJiDxEF+IyhbX9sZr09kVACsFVOMiTSG3kxky+0rsOJBV 1CkImSBOLKSvftXM47Y/+ZaIOljcKDMwMUtIlwrD1RTFTWCSJHVEVuoL9+mE8MSiK7 wQ7LvscETA6cy97+glmO4RT2zbFGLd3M3w2Rsqmk= From: David Gibson To: qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org Subject: [PATCH v3 34/34] spapr: Remove last pieces of SpaprIrq Date: Wed, 2 Oct 2019 12:52:08 +1000 Message-Id: <20191002025208.3487-35-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191002025208.3487-1-david@gibson.dropbear.id.au> References: <20191002025208.3487-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Riku Voipio , Laurent Vivier , groug@kaod.org, Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , philmd@redhat.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) Content-Type: text/plain; charset="utf-8" The only thing remaining in this structure are the flags to allow either XICS or XIVE to be present. These actually make more sense as spapr capabilities - that way they can take advantage of the existing infrastructure to sanity check capability states across migration and so forth. Signed-off-by: David Gibson --- hw/ppc/spapr.c | 38 +++++++++-------- hw/ppc/spapr_caps.c | 64 +++++++++++++++++++++++++++++ hw/ppc/spapr_hcall.c | 7 ++-- hw/ppc/spapr_irq.c | 84 ++------------------------------------ include/hw/ppc/spapr.h | 8 ++-- include/hw/ppc/spapr_irq.h | 10 ----- 6 files changed, 99 insertions(+), 112 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index e1ff03152e..b9ac01d90c 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1072,12 +1072,13 @@ static void spapr_dt_ov5_platform_support(SpaprMach= ineState *spapr, void *fdt, 26, 0x40, /* Radix options: GTSE =3D=3D yes. */ }; =20 - if (spapr->irq->xics && spapr->irq->xive) { + if (spapr_get_cap(spapr, SPAPR_CAP_XICS) + && spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { val[1] =3D SPAPR_OV5_XIVE_BOTH; - } else if (spapr->irq->xive) { + } else if (spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { val[1] =3D SPAPR_OV5_XIVE_EXPLOIT; } else { - assert(spapr->irq->xics); + assert(spapr_get_cap(spapr, SPAPR_CAP_XICS)); val[1] =3D SPAPR_OV5_XIVE_LEGACY; } =20 @@ -2775,7 +2776,7 @@ static void spapr_machine_init(MachineState *machine) spapr_ovec_set(spapr->ov5, OV5_DRMEM_V2); =20 /* advertise XIVE on POWER9 machines */ - if (spapr->irq->xive) { + if (spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { spapr_ovec_set(spapr->ov5, OV5_XIVE_EXPLOIT); } =20 @@ -3242,14 +3243,18 @@ static void spapr_set_vsmt(Object *obj, Visitor *v,= const char *name, static char *spapr_get_ic_mode(Object *obj, Error **errp) { SpaprMachineState *spapr =3D SPAPR_MACHINE(obj); + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); =20 - if (spapr->irq =3D=3D &spapr_irq_xics_legacy) { + if (smc->legacy_irq_allocation) { return g_strdup("legacy"); - } else if (spapr->irq =3D=3D &spapr_irq_xics) { + } else if (spapr_get_cap(spapr, SPAPR_CAP_XICS) + && !spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { return g_strdup("xics"); - } else if (spapr->irq =3D=3D &spapr_irq_xive) { + } else if (!spapr_get_cap(spapr, SPAPR_CAP_XICS) + && spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { return g_strdup("xive"); - } else if (spapr->irq =3D=3D &spapr_irq_dual) { + } else if (spapr_get_cap(spapr, SPAPR_CAP_XICS) + && spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { return g_strdup("dual"); } g_assert_not_reached(); @@ -3266,11 +3271,14 @@ static void spapr_set_ic_mode(Object *obj, const ch= ar *value, Error **errp) =20 /* The legacy IRQ backend can not be set */ if (strcmp(value, "xics") =3D=3D 0) { - spapr->irq =3D &spapr_irq_xics; + object_property_set_bool(obj, true, "cap-xics", errp); + object_property_set_bool(obj, false, "cap-xive", errp); } else if (strcmp(value, "xive") =3D=3D 0) { - spapr->irq =3D &spapr_irq_xive; + object_property_set_bool(obj, false, "cap-xics", errp); + object_property_set_bool(obj, true, "cap-xive", errp); } else if (strcmp(value, "dual") =3D=3D 0) { - spapr->irq =3D &spapr_irq_dual; + object_property_set_bool(obj, true, "cap-xics", errp); + object_property_set_bool(obj, true, "cap-xive", errp); } else { error_setg(errp, "Bad value for \"ic-mode\" property"); } @@ -3309,7 +3317,6 @@ static void spapr_set_host_serial(Object *obj, const = char *value, Error **errp) static void spapr_instance_init(Object *obj) { SpaprMachineState *spapr =3D SPAPR_MACHINE(obj); - SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); =20 spapr->htab_fd =3D -1; spapr->use_hotplug_event_source =3D true; @@ -3345,7 +3352,6 @@ static void spapr_instance_init(Object *obj) spapr_get_msix_emulation, NULL, NULL); =20 /* The machine class defines the default interrupt controller mode */ - spapr->irq =3D smc->irq; object_property_add_str(obj, "ic-mode", spapr_get_ic_mode, spapr_set_ic_mode, NULL); object_property_set_description(obj, "ic-mode", @@ -4439,8 +4445,9 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) smc->default_caps.caps[SPAPR_CAP_NESTED_KVM_HV] =3D SPAPR_CAP_OFF; smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] =3D SPAPR_CAP_ON; smc->default_caps.caps[SPAPR_CAP_CCF_ASSIST] =3D SPAPR_CAP_OFF; + smc->default_caps.caps[SPAPR_CAP_XICS] =3D SPAPR_CAP_ON; + smc->default_caps.caps[SPAPR_CAP_XIVE] =3D SPAPR_CAP_ON; spapr_caps_add_properties(smc, &error_abort); - smc->irq =3D &spapr_irq_dual; smc->dr_phb_enabled =3D true; smc->linux_pci_probe =3D true; smc->nr_xirqs =3D SPAPR_NR_XIRQS; @@ -4539,7 +4546,7 @@ static void spapr_machine_4_0_class_options(MachineCl= ass *mc) spapr_machine_4_1_class_options(mc); compat_props_add(mc->compat_props, hw_compat_4_0, hw_compat_4_0_len); smc->phb_placement =3D phb_placement_4_0; - smc->irq =3D &spapr_irq_xics; + smc->default_caps.caps[SPAPR_CAP_XIVE] =3D SPAPR_CAP_OFF; smc->pre_4_1_migration =3D true; } =20 @@ -4580,7 +4587,6 @@ static void spapr_machine_3_0_class_options(MachineCl= ass *mc) =20 smc->legacy_irq_allocation =3D true; smc->nr_xirqs =3D 0x400; - smc->irq =3D &spapr_irq_xics_legacy; } =20 DEFINE_SPAPR_MACHINE(3_0, "3.0", false); diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index 481dfd2a27..e06fd386f6 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -496,6 +496,42 @@ static void cap_ccf_assist_apply(SpaprMachineState *sp= apr, uint8_t val, } } =20 +static void cap_xics_apply(SpaprMachineState *spapr, uint8_t val, Error **= errp) +{ + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); + + if (!val) { + if (!spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { + error_setg(errp, +"No interrupt controllers enabled, try cap-xics=3Don or cap-xive=3Don"); + return; + } + + if (smc->legacy_irq_allocation) { + error_setg(errp, "This machine version requires XICS support"); + return; + } + } +} + +static void cap_xive_apply(SpaprMachineState *spapr, uint8_t val, Error **= errp) +{ + SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); + PowerPCCPU *cpu =3D POWERPC_CPU(first_cpu); + + if (val) { + if (smc->legacy_irq_allocation) { + error_setg(errp, "This machine version cannot support XIVE"); + return; + } + if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_3_00, 0, + spapr->max_compat_pvr)) { + error_setg(errp, "XIVE requires POWER9 CPU"); + return; + } + } +} + SpaprCapabilityInfo capability_table[SPAPR_CAP_NUM] =3D { [SPAPR_CAP_HTM] =3D { .name =3D "htm", @@ -595,6 +631,24 @@ SpaprCapabilityInfo capability_table[SPAPR_CAP_NUM] = =3D { .type =3D "bool", .apply =3D cap_ccf_assist_apply, }, + [SPAPR_CAP_XICS] =3D { + .name =3D "xics", + .description =3D "Allow XICS interrupt controller", + .index =3D SPAPR_CAP_XICS, + .get =3D spapr_cap_get_bool, + .set =3D spapr_cap_set_bool, + .type =3D "bool", + .apply =3D cap_xics_apply, + }, + [SPAPR_CAP_XIVE] =3D { + .name =3D "xive", + .description =3D "Allow XIVE interrupt controller", + .index =3D SPAPR_CAP_XIVE, + .get =3D spapr_cap_get_bool, + .set =3D spapr_cap_set_bool, + .type =3D "bool", + .apply =3D cap_xive_apply, + }, }; =20 static SpaprCapabilities default_caps_with_cpu(SpaprMachineState *spapr, @@ -641,6 +695,14 @@ static SpaprCapabilities default_caps_with_cpu(SpaprMa= chineState *spapr, caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] =3D mps; } =20 + /* + * POWER8 machines don't have XIVE + */ + if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_3_00, + 0, spapr->max_compat_pvr)) { + caps.caps[SPAPR_CAP_XIVE] =3D SPAPR_CAP_OFF; + } + return caps; } =20 @@ -734,6 +796,8 @@ SPAPR_CAP_MIG_STATE(hpt_maxpagesize, SPAPR_CAP_HPT_MAXP= AGESIZE); SPAPR_CAP_MIG_STATE(nested_kvm_hv, SPAPR_CAP_NESTED_KVM_HV); SPAPR_CAP_MIG_STATE(large_decr, SPAPR_CAP_LARGE_DECREMENTER); SPAPR_CAP_MIG_STATE(ccf_assist, SPAPR_CAP_CCF_ASSIST); +SPAPR_CAP_MIG_STATE(xics, SPAPR_CAP_XICS); +SPAPR_CAP_MIG_STATE(xive, SPAPR_CAP_XIVE); =20 void spapr_caps_init(SpaprMachineState *spapr) { diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 140f05c1c6..cb4c6edf63 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1784,13 +1784,13 @@ static target_ulong h_client_architecture_support(P= owerPCCPU *cpu, * terminate the boot. */ if (guest_xive) { - if (!spapr->irq->xive) { + if (!spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { error_report( "Guest requested unavailable interrupt mode (XIVE), try the ic-mode=3Dxive= or ic-mode=3Ddual machine property"); exit(EXIT_FAILURE); } } else { - if (!spapr->irq->xics) { + if (!spapr_get_cap(spapr, SPAPR_CAP_XICS)) { error_report( "Guest requested unavailable interrupt mode (XICS), either don't set the i= c-mode machine property or try ic-mode=3Dxics or ic-mode=3Ddual"); exit(EXIT_FAILURE); @@ -1804,7 +1804,8 @@ static target_ulong h_client_architecture_support(Pow= erPCCPU *cpu, */ if (!spapr->cas_reboot) { spapr->cas_reboot =3D spapr_ovec_test(ov5_updates, OV5_XIVE_EXPLOI= T) - && spapr->irq->xics && spapr->irq->xive; + && spapr_get_cap(spapr, SPAPR_CAP_XICS) + && spapr_get_cap(spapr, SPAPR_CAP_XIVE); } =20 spapr_ovec_cleanup(ov5_updates); diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 2768f9a765..473fc8780a 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -101,90 +101,19 @@ int spapr_irq_init_kvm(int (*fn)(SpaprInterruptContro= ller *, Error **), return 0; } =20 -/* - * XICS IRQ backend. - */ - -SpaprIrq spapr_irq_xics =3D { - .xics =3D true, - .xive =3D false, -}; - -/* - * XIVE IRQ backend. - */ - -SpaprIrq spapr_irq_xive =3D { - .xics =3D false, - .xive =3D true, -}; - -/* - * Dual XIVE and XICS IRQ backend. - * - * Both interrupt mode, XIVE and XICS, objects are created but the - * machine starts in legacy interrupt mode (XICS). It can be changed - * by the CAS negotiation process and, in that case, the new mode is - * activated after an extra machine reset. - */ - -/* - * Define values in sync with the XIVE and XICS backend - */ -SpaprIrq spapr_irq_dual =3D { - .xics =3D true, - .xive =3D true, -}; - - static int spapr_irq_check(SpaprMachineState *spapr, Error **errp) { MachineState *machine =3D MACHINE(spapr); =20 - /* - * Sanity checks on non-P9 machines. On these, XIVE is not - * advertised, see spapr_dt_ov5_platform_support() - */ - if (!ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00, - 0, spapr->max_compat_pvr)) { - /* - * If the 'dual' interrupt mode is selected, force XICS as CAS - * negotiation is useless. - */ - if (spapr->irq =3D=3D &spapr_irq_dual) { - spapr->irq =3D &spapr_irq_xics; - return 0; - } - - /* - * Non-P9 machines using only XIVE is a bogus setup. We have two - * scenarios to take into account because of the compat mode: - * - * 1. POWER7/8 machines should fail to init later on when creating - * the XIVE interrupt presenters because a POWER9 exception - * model is required. - - * 2. POWER9 machines using the POWER8 compat mode won't fail and - * will let the OS boot with a partial XIVE setup : DT - * properties but no hcalls. - * - * To cover both and not confuse the OS, add an early failure in - * QEMU. - */ - if (spapr->irq =3D=3D &spapr_irq_xive) { - error_setg(errp, "XIVE-only machines require a POWER9 CPU"); - return -1; - } - } - /* * On a POWER9 host, some older KVM XICS devices cannot be destroyed a= nd * re-created. Detect that early to avoid QEMU to exit later when the * guest reboots. */ if (kvm_enabled() && - spapr->irq =3D=3D &spapr_irq_dual && machine_kernel_irqchip_required(machine) && + spapr_get_cap(spapr, SPAPR_CAP_XICS) && + spapr_get_cap(spapr, SPAPR_CAP_XIVE) && xics_kvm_has_broken_disconnect(spapr)) { error_setg(errp, "KVM is too old to support ic-mode=3Ddual,kernel-= irqchip=3Don"); return -1; @@ -280,7 +209,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) /* Initialize the MSI IRQ allocator. */ spapr_irq_msi_init(spapr); =20 - if (spapr->irq->xics) { + if (spapr_get_cap(spapr, SPAPR_CAP_XICS)) { Error *local_err =3D NULL; Object *obj; =20 @@ -313,7 +242,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **e= rrp) spapr->ics =3D ICS_SPAPR(obj); } =20 - if (spapr->irq->xive) { + if (spapr_get_cap(spapr, SPAPR_CAP_XIVE)) { uint32_t nr_servers =3D spapr_max_server_number(spapr); DeviceState *dev; int i; @@ -558,11 +487,6 @@ int spapr_irq_find(SpaprMachineState *spapr, int num, = bool align, Error **errp) return first + ics->offset; } =20 -SpaprIrq spapr_irq_xics_legacy =3D { - .xics =3D true, - .xive =3D false, -}; - static void spapr_irq_register_types(void) { type_register_static(&spapr_intc_info); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 623e8e3f93..bae5d1ccb3 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -79,8 +79,12 @@ typedef enum { #define SPAPR_CAP_LARGE_DECREMENTER 0x08 /* Count Cache Flush Assist HW Instruction */ #define SPAPR_CAP_CCF_ASSIST 0x09 +/* XICS interrupt controller */ +#define SPAPR_CAP_XICS 0x0a +/* XIVE interrupt controller */ +#define SPAPR_CAP_XIVE 0x0b /* Num Caps */ -#define SPAPR_CAP_NUM (SPAPR_CAP_CCF_ASSIST + 1) +#define SPAPR_CAP_NUM (SPAPR_CAP_XIVE + 1) =20 /* * Capability Values @@ -131,7 +135,6 @@ struct SpaprMachineClass { hwaddr *nv2atsd, Error **errp); SpaprResizeHpt resize_hpt_default; SpaprCapabilities default_caps; - SpaprIrq *irq; }; =20 /** @@ -195,7 +198,6 @@ struct SpaprMachineState { =20 int32_t irq_map_nr; unsigned long *irq_map; - SpaprIrq *irq; qemu_irq *qirqs; SpaprInterruptController *active_intc; ICSState *ics; diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h index 50491cea4f..4b58134701 100644 --- a/include/hw/ppc/spapr_irq.h +++ b/include/hw/ppc/spapr_irq.h @@ -77,16 +77,6 @@ int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32= _t num, bool align, Error **errp); void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num); =20 -typedef struct SpaprIrq { - bool xics; - bool xive; -} SpaprIrq; - -extern SpaprIrq spapr_irq_xics; -extern SpaprIrq spapr_irq_xics_legacy; -extern SpaprIrq spapr_irq_xive; -extern SpaprIrq spapr_irq_dual; - void spapr_irq_init(SpaprMachineState *spapr, Error **errp); int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **e= rrp); void spapr_irq_free(SpaprMachineState *spapr, int irq, int num); --=20 2.21.0