From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684416364793.8940438862638; Wed, 24 May 2017 20:53:36 -0700 (PDT) Received: from localhost ([::1]:57986 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjq9-0000Dh-UN for importer@patchew.org; Wed, 24 May 2017 23:53:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57199) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoM-0006UL-K9 for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoL-0007Ru-Nt for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:42 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:57899) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoL-0007R4-7p; Wed, 24 May 2017 23:51:41 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX2tdBz9sCX; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=lBEKuYb/rrOJrM1+rDqLEFiF0s+On0O7eC/dyIJslQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hrmcryaSq7CgHkNNuO+n+KOQQishiv+en5jPJbGvVMyWF1P05ekx7trB7aSeckD7f Lg/2ijdvcJXjzOR+1JoWazKLYYlBopKq10u3mFM3zsAn78b/9CpCE7mjifjIeQdvMl u6e9NxoAtmWaydAVCjYNi45kyIUOoqPeUA23EOao= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:15 +1000 Message-Id: <20170525035132.24268-2-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 01/18] target/ppc: reset reservation in do_rfi() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Nikunj A Dadhania , aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Nikunj A Dadhania For transitioning back to userspace after the interrupt. Suggested-by: Richard Henderson Signed-off-by: Nikunj A Dadhania Signed-off-by: David Gibson --- target/ppc/excp_helper.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index a6bcb47..9cb2123 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -995,6 +995,9 @@ static inline void do_rfi(CPUPPCState *env, target_ulon= g nip, target_ulong msr) */ cs->interrupt_request |=3D CPU_INTERRUPT_EXITTB; =20 + /* Reset the reservation */ + env->reserve_addr =3D -1; + /* Context synchronizing: check if TCG TLB needs flush */ check_tlb_flush(env, false); } --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684416518487.7080535282197; Wed, 24 May 2017 20:53:36 -0700 (PDT) Received: from localhost ([::1]:57985 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjqA-0000CN-0q for importer@patchew.org; Wed, 24 May 2017 23:53:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57201) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoM-0006UM-RQ for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoL-0007Rz-Ny for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:42 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:54653) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoL-0007R5-Aq; Wed, 24 May 2017 23:51:41 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX1gWKz9s8V; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=/HTZa0FZLfoE5+XPTXDivkXJC0IL166V58GHovmWaNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Nrskrc76DfxNAnLWzS4S5NQPUwrKttw1I6IeorB+xTJA67esC4IZ7nQqAldWHPc++ IDUdGAS7im9/zpPF9/5dG2+I+B/nCE95yIQac0xTzTe2VtkENqS9ZDhlfeI/jFYv3T nHqqfv8jaoVtbpNuHKXWaqpfZRDbS1sAdSW698lY= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:16 +1000 Message-Id: <20170525035132.24268-3-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-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 Subject: [Qemu-devel] [PULL 02/18] ppc/xics: simplify prototype of xics_spapr_init() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz This function only does hypercall and RTAS-call registration, and thus never returns an error. This patch adapt the prototype to reflect that. Signed-off-by: Greg Kurz Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: David Gibson --- hw/intc/xics_spapr.c | 3 +-- hw/ppc/spapr.c | 2 +- include/hw/ppc/xics.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index f05308b8..d98ea8b 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -229,7 +229,7 @@ static void rtas_int_on(PowerPCCPU *cpu, sPAPRMachineSt= ate *spapr, rtas_st(rets, 0, RTAS_OUT_SUCCESS); } =20 -int xics_spapr_init(sPAPRMachineState *spapr, Error **errp) +void xics_spapr_init(sPAPRMachineState *spapr) { /* Registration of global state belongs into realize */ spapr_rtas_register(RTAS_IBM_SET_XIVE, "ibm,set-xive", rtas_set_xive); @@ -243,7 +243,6 @@ int xics_spapr_init(sPAPRMachineState *spapr, Error **e= rrp) spapr_register_hypercall(H_XIRR_X, h_xirr_x); spapr_register_hypercall(H_EOI, h_eoi); spapr_register_hypercall(H_IPOLL, h_ipoll); - return 0; } =20 #define ICS_IRQ_FREE(ics, srcno) \ diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 0980d73..18709ad 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -139,7 +139,7 @@ static void xics_system_init(MachineState *machine, int= nr_irqs, Error **errp) } =20 if (!spapr->ics) { - xics_spapr_init(spapr, errp); + xics_spapr_init(spapr); spapr->icp_type =3D TYPE_ICP; spapr->ics =3D spapr_ics_create(spapr, TYPE_ICS_SIMPLE, nr_irqs, e= rrp); } diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 05e6acb..d6cb51f 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -206,6 +206,6 @@ void icp_resend(ICPState *ss); typedef struct sPAPRMachineState sPAPRMachineState; =20 int xics_kvm_init(sPAPRMachineState *spapr, Error **errp); -int xics_spapr_init(sPAPRMachineState *spapr, Error **errp); +void xics_spapr_init(sPAPRMachineState *spapr); =20 #endif /* XICS_H */ --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684416412972.3086106225757; Wed, 24 May 2017 20:53:36 -0700 (PDT) Received: from localhost ([::1]:57987 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjqA-0000E4-Uy for importer@patchew.org; Wed, 24 May 2017 23:53:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57237) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoO-0006Ua-SA for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoL-0007S9-Ow for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:44 -0400 Received: from ozlabs.org ([103.22.144.67]:38875) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoK-0007R1-UO; Wed, 24 May 2017 23:51:41 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX4VDWz9sD5; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=SZI6KdO8fUNUi8xYaEtcxrbNwnFJFkGkIpk9em+eCcs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XH7gA2wTOGyYjrroeVGlMJb86hY7bTAh4D1a19eCGAQ/E4y7N317xejy/haeBdLEA m3OWFWYg05FnkhufQBTcfCmk96ab9WimEKpgk7bF8hmIVLa+yMs+EOS0fOStGWJdbL 5RARf8Ku/mGGLB6QRormpK041ZAB5T1kI4SHAEHc= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:17 +1000 Message-Id: <20170525035132.24268-4-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 03/18] spapr: sanitize error handling in spapr_ics_create() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz The spapr_ics_create() function handles errors in a rather convoluted way, with two local Error * variables. Moreover, failing to parent the ICS object to the machine should be considered as a bug but it is currently ignored. This patch addresses both issues. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 18709ad..a9471b9 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -101,21 +101,26 @@ static ICSState *spapr_ics_create(sPAPRMachineState *= spapr, const char *type_ics, int nr_irqs, Error **errp) { - Error *err =3D NULL, *local_err =3D NULL; + Error *local_err =3D NULL; Object *obj; =20 obj =3D object_new(type_ics); - object_property_add_child(OBJECT(spapr), "ics", obj, NULL); + object_property_add_child(OBJECT(spapr), "ics", obj, &error_abort); object_property_add_const_link(obj, "xics", OBJECT(spapr), &error_abor= t); - object_property_set_int(obj, nr_irqs, "nr-irqs", &err); + object_property_set_int(obj, nr_irqs, "nr-irqs", &local_err); + if (local_err) { + goto error; + } object_property_set_bool(obj, true, "realized", &local_err); - error_propagate(&err, local_err); - if (err) { - error_propagate(errp, err); - return NULL; + if (local_err) { + goto error; } =20 return ICS_SIMPLE(obj); + +error: + error_propagate(errp, local_err); + return NULL; } =20 static void xics_system_init(MachineState *machine, int nr_irqs, Error **e= rrp) --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684419813274.05603967086427; Wed, 24 May 2017 20:53:39 -0700 (PDT) Received: from localhost ([::1]:57988 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjqE-0000HO-Gz for importer@patchew.org; Wed, 24 May 2017 23:53:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57236) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoO-0006UZ-ST for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoL-0007Rp-OK for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:44 -0400 Received: from ozlabs.org ([103.22.144.67]:58973) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoK-0007R2-UM; Wed, 24 May 2017 23:51:41 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX3lm7z9s9Y; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=6u5n8ECsaV91TnJHeNGkIizGmgZz59Az2YDnDbfhd6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FKi68cP2cOYRDsah6h/tFWQlY36Phd1TDdJAoA5eFOyJVXLLah+H8z53T5L/3QX8D Z8UdtqcYToc2zugk8FExLqRhtUtZeAxUINaVf6inftpv3+kb14My56lUUKEvH8PMuF RS+NicfsEwtZG+tEg5jzVskWGQ1WM1476KztdngU= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:18 +1000 Message-Id: <20170525035132.24268-5-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 04/18] spapr-cpu-core: release ICP object when realization fails X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz While here we introduce a single error path to avoid code duplication. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr_cpu_core.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index a17ea07..1df1404 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -147,25 +147,25 @@ static void spapr_cpu_core_realize_child(Object *chil= d, Error **errp) object_property_add_const_link(obj, "xics", OBJECT(spapr), &error_abor= t); object_property_set_bool(obj, true, "realized", &local_err); if (local_err) { - error_propagate(errp, local_err); - return; + goto error; } =20 object_property_set_bool(child, true, "realized", &local_err); if (local_err) { - object_unparent(obj); - error_propagate(errp, local_err); - return; + goto error; } =20 spapr_cpu_init(spapr, cpu, &local_err); if (local_err) { - object_unparent(obj); - error_propagate(errp, local_err); - return; + goto error; } =20 xics_cpu_setup(XICS_FABRIC(spapr), cpu, ICP(obj)); + return; + +error: + object_unparent(obj); + error_propagate(errp, local_err); } =20 static void spapr_cpu_core_realize(DeviceState *dev, Error **errp) --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149568456958170.16692208699374; Wed, 24 May 2017 20:56:09 -0700 (PDT) Received: from localhost ([::1]:58001 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjse-0002Ow-6r for importer@patchew.org; Wed, 24 May 2017 23:56:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57276) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoP-0006Ut-QD for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoO-0007TW-Fk for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:45 -0400 Received: from ozlabs.org ([103.22.144.67]:52041) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SJ-3H; Wed, 24 May 2017 23:51:44 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY13Rfz9sNC; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=38e1NDrDt1B3IjRZ2t4huH/6CEUZVRdmuoeMOuG0o3U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FPrs1njnh73KxtZUdcB4Ml98NVIK7Oiekp/7e89BsfBgQYFz1hQjmzy2U3w3K9gAU PVp7/eKOe3yjyuGMdy1Rr5Yj+2cdBaWmb3llbuXxPzP4Y5hZ92sS3X03yFyOtkyTRF wxJSd/NpMKvWr0/Ej0rUWJzwN1PnvNczdTzDGWMw= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:19 +1000 Message-Id: <20170525035132.24268-6-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 05/18] spapr: Consolidate HPT freeing code into a routine X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Bharata B Rao , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Bharata B Rao Consolidate the code that frees HPT into a separate routine spapr_free_hpt() as the same chunk of code is called from two places. Signed-off-by: Bharata B Rao Signed-off-by: David Gibson --- hw/ppc/spapr.c | 13 +++++++++---- hw/ppc/spapr_hcall.c | 5 +---- include/hw/ppc/spapr.h | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index a9471b9..35dceb0 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1227,16 +1227,21 @@ static int spapr_hpt_shift_for_ramsize(uint64_t ram= size) return shift; } =20 +void spapr_free_hpt(sPAPRMachineState *spapr) +{ + g_free(spapr->htab); + spapr->htab =3D NULL; + spapr->htab_shift =3D 0; + close_htab_fd(spapr); +} + static void spapr_reallocate_hpt(sPAPRMachineState *spapr, int shift, Error **errp) { long rc; =20 /* Clean up any HPT info from a previous boot */ - g_free(spapr->htab); - spapr->htab =3D NULL; - spapr->htab_shift =3D 0; - close_htab_fd(spapr); + spapr_free_hpt(spapr); =20 rc =3D kvmppc_reset_htab(shift); if (rc < 0) { diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 0d608d6..2daace4 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -913,10 +913,7 @@ static void spapr_check_setup_free_hpt(sPAPRMachineSta= te *spapr, /* We assume RADIX, so this catches all the "Do Nothing" cases */ } else if (!(patbe_old & PATBE1_GR)) { /* HASH->RADIX : Free HPT */ - g_free(spapr->htab); - spapr->htab =3D NULL; - spapr->htab_shift =3D 0; - close_htab_fd(spapr); + spapr_free_hpt(spapr); } else if (!(patbe_new & PATBE1_GR)) { /* RADIX->HASH || NOTHING->HASH : Allocate HPT */ spapr_setup_hpt_and_vrma(spapr); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 5802f88..93c4cfc 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -610,6 +610,7 @@ int spapr_h_cas_compose_response(sPAPRMachineState *sm, sPAPROptionVector *ov5_updates); void close_htab_fd(sPAPRMachineState *spapr); void spapr_setup_hpt_and_vrma(sPAPRMachineState *spapr); +void spapr_free_hpt(sPAPRMachineState *spapr); sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn); void spapr_tce_table_enable(sPAPRTCETable *tcet, uint32_t page_shift, uint64_t bus_offset, --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684582803142.70999174084704; Wed, 24 May 2017 20:56:22 -0700 (PDT) Received: from localhost ([::1]:58002 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjsr-0002bV-Fi for importer@patchew.org; Wed, 24 May 2017 23:56:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57296) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoQ-0006VW-5W for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoO-0007Th-HM for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from ozlabs.org ([103.22.144.67]:33819) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SI-6F; Wed, 24 May 2017 23:51:44 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX6d3zz9sNH; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=qelnROWMGYyswYo9SrRPuk+X2hADMW1cUKG0z8g8Uh8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FH13GKyykz59DGfxuPH1hSiyadKvrwvomtgAuhJotbcfCt0ivNyiT7gX2Ro5Qd/L7 +3RVJ9QwzcGXt+vJkW54yPyb+cnQNpfl+BWYql7kNzr52A2S+nzrKo3fTFfSvZ/J3A X6gSX6ZAcWtWc94NjccZoo+rOOmRYZocZUPQWXMI= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:20 +1000 Message-Id: <20170525035132.24268-7-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-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: 103.22.144.67 Subject: [Qemu-devel] [PULL 06/18] xics_kvm: cache already enabled vCPU ids X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz Since commit a45863bda90d ("xics_kvm: Don't enable KVM_CAP_IRQ_XICS if already enabled"), we were able to re-hotplug a vCPU that had been hot- unplugged ealier, thanks to a boolean flag in ICPState that we set when enabling KVM_CAP_IRQ_XICS. This could work because the lifecycle of all ICPState objects was the same as the machine. Commit 5bc8d26de20c ("spapr: allocate the ICPState object from under sPAPRCPUCore") broke this assumption and now we always pass a freshly allocated ICPState object (ie, with the flag unset) to icp_kvm_cpu_setup(). This cause re-hotplug to fail with: Unable to connect CPU8 to kernel XICS: Device or resource busy Let's fix this by caching all the vCPU ids for which KVM_CAP_IRQ_XICS was enabled. This also drops the now useless boolean flag from ICPState. Reported-by: Laurent Vivier Signed-off-by: Greg Kurz Tested-by: Laurent Vivier Reviewed-by: Laurent Vivier Reviewed-by: C=C3=A9dric Le Goater Signed-off-by: David Gibson --- hw/intc/xics_kvm.c | 27 ++++++++++++++++++++------- include/hw/ppc/xics.h | 1 - 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c index dd93531..dd7f298 100644 --- a/hw/intc/xics_kvm.c +++ b/hw/intc/xics_kvm.c @@ -42,6 +42,14 @@ =20 static int kernel_xics_fd =3D -1; =20 +typedef struct KVMEnabledICP { + unsigned long vcpu_id; + QLIST_ENTRY(KVMEnabledICP) node; +} KVMEnabledICP; + +static QLIST_HEAD(, KVMEnabledICP) + kvm_enabled_icps =3D QLIST_HEAD_INITIALIZER(&kvm_enabled_icps); + /* * ICP-KVM */ @@ -121,6 +129,8 @@ static void icp_kvm_reset(void *dev) static void icp_kvm_cpu_setup(ICPState *icp, PowerPCCPU *cpu) { CPUState *cs =3D CPU(cpu); + KVMEnabledICP *enabled_icp; + unsigned long vcpu_id =3D kvm_arch_vcpu_id(cs); int ret; =20 if (kernel_xics_fd =3D=3D -1) { @@ -132,18 +142,21 @@ static void icp_kvm_cpu_setup(ICPState *icp, PowerPCC= PU *cpu) * which was hot-removed earlier we don't have to renable * KVM_CAP_IRQ_XICS capability again. */ - if (icp->cap_irq_xics_enabled) { - return; + QLIST_FOREACH(enabled_icp, &kvm_enabled_icps, node) { + if (enabled_icp->vcpu_id =3D=3D vcpu_id) { + return; + } } =20 - ret =3D kvm_vcpu_enable_cap(cs, KVM_CAP_IRQ_XICS, 0, kernel_xics_fd, - kvm_arch_vcpu_id(cs)); + ret =3D kvm_vcpu_enable_cap(cs, KVM_CAP_IRQ_XICS, 0, kernel_xics_fd, v= cpu_id); if (ret < 0) { - error_report("Unable to connect CPU%ld to kernel XICS: %s", - kvm_arch_vcpu_id(cs), strerror(errno)); + error_report("Unable to connect CPU%ld to kernel XICS: %s", vcpu_i= d, + strerror(errno)); exit(1); } - icp->cap_irq_xics_enabled =3D true; + enabled_icp =3D g_malloc(sizeof(*enabled_icp)); + enabled_icp->vcpu_id =3D vcpu_id; + QLIST_INSERT_HEAD(&kvm_enabled_icps, enabled_icp, node); } =20 static void icp_kvm_realize(DeviceState *dev, Error **errp) diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index d6cb51f..a3073f9 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -81,7 +81,6 @@ struct ICPState { uint8_t pending_priority; uint8_t mfrr; qemu_irq output; - bool cap_irq_xics_enabled; =20 XICSFabric *xics; }; --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684709759328.82691208878305; Wed, 24 May 2017 20:58:29 -0700 (PDT) Received: from localhost ([::1]:58016 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjuu-0005JK-Gh for importer@patchew.org; Wed, 24 May 2017 23:58:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57274) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoP-0006Ur-Pm for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoO-0007TT-Fa for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:45 -0400 Received: from ozlabs.org ([103.22.144.67]:50725) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SH-4K; Wed, 24 May 2017 23:51:44 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgX55KLz9sCZ; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684296; bh=TNNvjKceCQza88EAo+/jIiBuROKP29zm+FkkU4vFrLk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Yd7oESkb4p6rbrjDSV+as0oWUO36dY6ydF/zdQD5Sd4ouLKBkPc+sPzxaJZRgsF35 Vy0oSZ2qLRbnkG+b/ceNwZZ0zA3k2JQW2HVbEWBFS/lWJCS5bldAtUo2dDujTqfEOC I1UGW0t8ZwFnUoCpR1VoYo8/+uc7Xk77YeJPfPGI= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:21 +1000 Message-Id: <20170525035132.24268-8-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 07/18] spapr: ensure core_slot isn't NULL in spapr_core_unplug() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz If we go that far on the path of hot-removing a core and we find out that the core-id is invalid, then we have a serious bug. Let's make it explicit with an assert() instead of dereferencing a NULL pointer. This fixes Coverity issue CID 1375404. Signed-off-by: Greg Kurz Reviewed-by: Igor Mammedov Signed-off-by: David Gibson --- hw/ppc/spapr.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 35dceb0..c912eaa 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2725,6 +2725,7 @@ static void spapr_core_unplug(HotplugHandler *hotplug= _dev, DeviceState *dev, CPUCore *cc =3D CPU_CORE(dev); CPUArchId *core_slot =3D spapr_find_cpu_slot(ms, cc->core_id, NULL); =20 + assert(core_slot); core_slot->cpu =3D NULL; object_unparent(OBJECT(dev)); } --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684585856471.1085258132042; Wed, 24 May 2017 20:56:25 -0700 (PDT) Received: from localhost ([::1]:58003 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjst-0002cJ-AH for importer@patchew.org; Wed, 24 May 2017 23:56:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57343) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoR-0006Wm-5E for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoP-0007Uh-9Z for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:52917) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SP-Ik; Wed, 24 May 2017 23:51:45 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY24Jvz9sDB; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=MAbVk3CVrxIF/Az5uvAVkSy2Zjxe+YYSXexavwcpfAU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O08i4Tno3xaTvlQcdXuQH5hDFCVa4iG+38MpSnycWmo45kNaqzbC5JDq9p2isrQUK m/I9OJfbPemYKWYt3wEmGeZsUgiZaufJmUe4YFJ3P60frIsvb/fPOssvzpXCLJQk4Z vsac6xZERulAxbUH4SsD+vSBAaB+AFf+Dm/aJasU= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:22 +1000 Message-Id: <20170525035132.24268-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 08/18] hw/ppc/spapr_events.c: removing 'exception' from sPAPREventLogEntry X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Daniel Henrique Barboza , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Daniel Henrique Barboza Currenty we do not have any RTAS event that is reported by the event-scan interface. The existing events, RTAS_LOG_TYPE_EPOW and RTAS_LOG_TYPE_HOTPLUG, are being reported by the check-exception interface and, as such, marked as 'exception=3Dtrue'. Commit 79853e18d9, 'spapr_events: event-scan RTAS interface', added the event_scan interface because the guest kernel requires it to initialize other required interfaces. It is acting since then as a stub because no events that would be reported by it were added since then. However, the existence of the 'exception' boolean adds an unnecessary load in the future migration of the pending_events, sPAPREventLogEntry QTAILQ that hosts the pending RTAS events. To make the code cleaner and ease the future migration changes, this patch makes the following changes: - remove the 'exception' boolean that filter these events. There is nothing to filter since all events are reported by check-exception; - functions rtas_event_log_queue, rtas_event_log_dequeue and rtas_event_log_contains don't receive the 'exception' boolean as parameter; - event_scan function was simplified. It was calling 'rtas_event_log_dequeue(mask, false)' that was always returning 'NULL' because we have no events that are created with exception=3Dfalse, thus in the end it would execute a jump to 'out_no_events' all the time. The function now assumes that this will always be the case and all the remaining logic were deleted. In the future, when or if we add new RTAS events that should be reported with the event_scan interface, we can refer to the changes made in this patch to add the event_scan logic back. Signed-off-by: Daniel Henrique Barboza Signed-off-by: David Gibson --- hw/ppc/spapr_events.c | 52 +++++++---------------------------------------= ---- include/hw/ppc/spapr.h | 1 - 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c index f0b28d8..73e2a18 100644 --- a/hw/ppc/spapr_events.c +++ b/hw/ppc/spapr_events.c @@ -342,20 +342,18 @@ static int rtas_event_log_to_irq(sPAPRMachineState *s= papr, int log_type) return source->irq; } =20 -static void rtas_event_log_queue(int log_type, void *data, bool exception) +static void rtas_event_log_queue(int log_type, void *data) { sPAPRMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); sPAPREventLogEntry *entry =3D g_new(sPAPREventLogEntry, 1); =20 g_assert(data); entry->log_type =3D log_type; - entry->exception =3D exception; entry->data =3D data; QTAILQ_INSERT_TAIL(&spapr->pending_events, entry, next); } =20 -static sPAPREventLogEntry *rtas_event_log_dequeue(uint32_t event_mask, - bool exception) +static sPAPREventLogEntry *rtas_event_log_dequeue(uint32_t event_mask) { sPAPRMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); sPAPREventLogEntry *entry =3D NULL; @@ -364,10 +362,6 @@ static sPAPREventLogEntry *rtas_event_log_dequeue(uint= 32_t event_mask, const sPAPREventSource *source =3D rtas_event_log_to_source(spapr, entry->log_type); =20 - if (entry->exception !=3D exception) { - continue; - } - if (source->mask & event_mask) { break; } @@ -380,7 +374,7 @@ static sPAPREventLogEntry *rtas_event_log_dequeue(uint3= 2_t event_mask, return entry; } =20 -static bool rtas_event_log_contains(uint32_t event_mask, bool exception) +static bool rtas_event_log_contains(uint32_t event_mask) { sPAPRMachineState *spapr =3D SPAPR_MACHINE(qdev_get_machine()); sPAPREventLogEntry *entry =3D NULL; @@ -389,10 +383,6 @@ static bool rtas_event_log_contains(uint32_t event_mas= k, bool exception) const sPAPREventSource *source =3D rtas_event_log_to_source(spapr, entry->log_type); =20 - if (entry->exception !=3D exception) { - continue; - } - if (source->mask & event_mask) { return true; } @@ -479,7 +469,7 @@ static void spapr_powerdown_req(Notifier *n, void *opaq= ue) epow->event_modifier =3D RTAS_LOG_V6_EPOW_MODIFIER_NORMAL; epow->extended_modifier =3D RTAS_LOG_V6_EPOW_XMODIFIER_PARTITION_SPECI= FIC; =20 - rtas_event_log_queue(RTAS_LOG_TYPE_EPOW, new_epow, true); + rtas_event_log_queue(RTAS_LOG_TYPE_EPOW, new_epow); =20 qemu_irq_pulse(xics_get_qirq(XICS_FABRIC(spapr), rtas_event_log_to_irq(spapr, @@ -572,7 +562,7 @@ static void spapr_hotplug_req_event(uint8_t hp_id, uint= 8_t hp_action, cpu_to_be32(drc_id->count_indexed.index); } =20 - rtas_event_log_queue(RTAS_LOG_TYPE_HOTPLUG, new_hp, true); + rtas_event_log_queue(RTAS_LOG_TYPE_HOTPLUG, new_hp); =20 qemu_irq_pulse(xics_get_qirq(XICS_FABRIC(spapr), rtas_event_log_to_irq(spapr, @@ -667,7 +657,7 @@ static void check_exception(PowerPCCPU *cpu, sPAPRMachi= neState *spapr, xinfo |=3D (uint64_t)rtas_ld(args, 6) << 32; } =20 - event =3D rtas_event_log_dequeue(mask, true); + event =3D rtas_event_log_dequeue(mask); if (!event) { goto out_no_events; } @@ -690,7 +680,7 @@ static void check_exception(PowerPCCPU *cpu, sPAPRMachi= neState *spapr, * interrupts. */ for (i =3D 0; i < EVENT_CLASS_MAX; i++) { - if (rtas_event_log_contains(EVENT_CLASS_MASK(i), true)) { + if (rtas_event_log_contains(EVENT_CLASS_MASK(i))) { const sPAPREventSource *source =3D spapr_event_sources_get_source(spapr->event_sources, i); =20 @@ -710,38 +700,10 @@ static void event_scan(PowerPCCPU *cpu, sPAPRMachineS= tate *spapr, target_ulong args, uint32_t nret, target_ulong rets) { - uint32_t mask, buf, len, event_len; - sPAPREventLogEntry *event; - struct rtas_error_log *hdr; - if (nargs !=3D 4 || nret !=3D 1) { rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); return; } - - mask =3D rtas_ld(args, 0); - buf =3D rtas_ld(args, 2); - len =3D rtas_ld(args, 3); - - event =3D rtas_event_log_dequeue(mask, false); - if (!event) { - goto out_no_events; - } - - hdr =3D event->data; - event_len =3D be32_to_cpu(hdr->extended_length) + sizeof(*hdr); - - if (event_len < len) { - len =3D event_len; - } - - cpu_physical_memory_write(buf, event->data, len); - rtas_st(rets, 0, RTAS_OUT_SUCCESS); - g_free(event->data); - g_free(event); - return; - -out_no_events: rtas_st(rets, 0, RTAS_OUT_NO_ERRORS_FOUND); } =20 diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 93c4cfc..8f424ca 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -598,7 +598,6 @@ sPAPRTCETable *spapr_tce_find_by_liobn(target_ulong lio= bn); =20 struct sPAPREventLogEntry { int log_type; - bool exception; void *data; QTAILQ_ENTRY(sPAPREventLogEntry) next; }; --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684831603727.999870472538; Wed, 24 May 2017 21:00:31 -0700 (PDT) Received: from localhost ([::1]:58028 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjws-00073h-8v for importer@patchew.org; Thu, 25 May 2017 00:00:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57292) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoQ-0006VS-22 for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoP-0007UN-5K for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:57739) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SV-MK; Wed, 24 May 2017 23:51:45 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY5hl1z9sNM; Thu, 25 May 2017 13:51:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=yncugbC3KeLy6v9wQVhWgjKN9p+kiFR0gzWHY7hS51Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oCQCWYqAwzfl6uQ1Ss/BT4YSxFB3zp5zUR+nKJW//DHPfymEseU391WEPHfQFIA7H ybXdrEMsB5IwuMRpXaFqJq/CVEmxeYOTRah8ywKMyA9BQj9JopRUXIfbJksAJAANlX 7b6yynLj7xuRtPh0gOh0aIXuTwvh5BipPgz+euHM= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:23 +1000 Message-Id: <20170525035132.24268-10-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 09/18] spapr_cpu_core: drop reference on ICP object during CPU realization X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz When a piece of code allocates an object, it implicitely gets a reference on it. If it then makes that object a child property of another object, it should drop its own reference at some point otherwise the child object can never be finalized. The current code hence leaks one ICP object per CPU when hot-removing a core. Failing to add a newly allocated ICP object to the CPU is a bug. While here, let's ensure QEMU aborts if this ever happens. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr_cpu_core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 1df1404..ff7058e 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -143,7 +143,8 @@ static void spapr_cpu_core_realize_child(Object *child,= Error **errp) Object *obj; =20 obj =3D object_new(spapr->icp_type); - object_property_add_child(OBJECT(cpu), "icp", obj, NULL); + object_property_add_child(OBJECT(cpu), "icp", obj, &error_abort); + object_unref(obj); object_property_add_const_link(obj, "xics", OBJECT(spapr), &error_abor= t); object_property_set_bool(obj, true, "realized", &local_err); if (local_err) { --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684826052845.9448075664261; Wed, 24 May 2017 21:00:26 -0700 (PDT) Received: from localhost ([::1]:58025 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjwm-0006uw-Ls for importer@patchew.org; Thu, 25 May 2017 00:00:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57298) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoQ-0006VY-7c for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoP-0007UU-5q for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:55955) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007ST-Nz; Wed, 24 May 2017 23:51:45 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY3wqzz9sNR; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=OvWy1Kx13yauVk69nm1cqbpdWQIfwI1mfm/ahMNsr6U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WyTJg8YHPBPlJDDA4Y2CX/PbBmpqSjXPzVoHmV1v/oudM6I+u5fUNYq0OyOfqupY4 1RB/A9K8f+LaBAOyoA2YQgBaLmMYWvft7ydFsDjve/rcRxlmG3kCxkepFiCrPtE4Fw dAGbSC4Xu1/lnwk64jVSa+SRiC+s0WiZ/sreZzIo= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:24 +1000 Message-Id: <20170525035132.24268-11-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 10/18] spapr: fix error reporting in xics_system_init() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz If the user explicitely asked for kernel-irqchip support and "xics-kvm" initialization fails, we shouldn't fallback to emulated "xics" as we do now. It is also awkward to print an error message when we have an errp pointer argument. Let's use the errp argument to report the error and let the caller decide. This simplifies the code as we don't need a local Error * here. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index c912eaa..c92d269 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -128,18 +128,14 @@ static void xics_system_init(MachineState *machine, i= nt nr_irqs, Error **errp) sPAPRMachineState *spapr =3D SPAPR_MACHINE(machine); =20 if (kvm_enabled()) { - Error *err =3D NULL; - if (machine_kernel_irqchip_allowed(machine) && !xics_kvm_init(spapr, errp)) { spapr->icp_type =3D TYPE_KVM_ICP; - spapr->ics =3D spapr_ics_create(spapr, TYPE_ICS_KVM, nr_irqs, = &err); + spapr->ics =3D spapr_ics_create(spapr, TYPE_ICS_KVM, nr_irqs, = errp); } if (machine_kernel_irqchip_required(machine) && !spapr->ics) { - error_reportf_err(err, - "kernel_irqchip requested but unavailable: "= ); - } else { - error_free(err); + error_prepend(errp, "kernel_irqchip requested but unavailable:= "); + return; } } =20 @@ -147,6 +143,9 @@ static void xics_system_init(MachineState *machine, int= nr_irqs, Error **errp) xics_spapr_init(spapr); spapr->icp_type =3D TYPE_ICP; spapr->ics =3D spapr_ics_create(spapr, TYPE_ICS_SIMPLE, nr_irqs, e= rrp); + if (!spapr->ics) { + return; + } } } =20 --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684714787962.3476823211145; Wed, 24 May 2017 20:58:34 -0700 (PDT) Received: from localhost ([::1]:58017 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjuz-0005OM-Cx for importer@patchew.org; Wed, 24 May 2017 23:58:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57310) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoQ-0006Vo-HH for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoP-0007Ua-6O for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:46 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:52543) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SU-Os; Wed, 24 May 2017 23:51:45 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY30zQz9sNJ; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=QoOEl6E8SrSatBCbycapDDfbVznRlgZXCiYWG8tvkSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TY+WHsZbHmve9C8pIhgUKgWRnS8qajsuvgBVsaxowuiT35Rpdu0xu5xHHPC8icpsI st76zBGjoxG5+2csvsscwNyZ2EyFHk+9dOMBgfGjnzage2OfyNeREDC3HbHP8vmaMb TAycWwE7DTINHkz2dLiyN2P92CCZ/tzM1QpTyXdA= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:25 +1000 Message-Id: <20170525035132.24268-12-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 11/18] pseries: Split CAS PVR negotiation out into a separate function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Guests of the qemu machine type go through a feature negotiation process known as "client architecture support" (CAS) during early boot. This does a number of things, one of which is finding a CPU compatibility mode which can be supported by both guest and host. In fact the CPU negotiation is probably the single most complex part of the CAS process, so this splits it out into a helper function. We've recently made some mistakes in maintaining backward compatibility for old machine types here. Splitting this out will also make it easier to fix this. This also adds a possibly useful error message if the negotiation fails (i.e. if there isn't a CPU mode that's suitable for both guest and host). Signed-off-by: David Gibson Reviewed-by: Laurent Vivier Reviewed-by: Greg Kurz --- hw/ppc/spapr_hcall.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 2daace4..77d2d66 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1044,19 +1044,13 @@ static target_ulong h_signal_sys_reset(PowerPCCPU *= cpu, } } =20 -static target_ulong h_client_architecture_support(PowerPCCPU *cpu, - sPAPRMachineState *spapr, - target_ulong opcode, - target_ulong *args) +static uint32_t cas_check_pvr(PowerPCCPU *cpu, target_ulong *addr, + Error **errp) { - target_ulong list =3D ppc64_phys_to_real(args[0]); - target_ulong ov_table; bool explicit_match =3D false; /* Matched the CPU's real PVR */ uint32_t max_compat =3D cpu->max_compat; uint32_t best_compat =3D 0; int i; - sPAPROptionVector *ov1_guest, *ov5_guest, *ov5_cas_old, *ov5_updates; - bool guest_radix; =20 /* * We scan the supplied table of PVRs looking for two things @@ -1066,9 +1060,9 @@ static target_ulong h_client_architecture_support(Pow= erPCCPU *cpu, for (i =3D 0; i < 512; ++i) { uint32_t pvr, pvr_mask; =20 - pvr_mask =3D ldl_be_phys(&address_space_memory, list); - pvr =3D ldl_be_phys(&address_space_memory, list + 4); - list +=3D 8; + pvr_mask =3D ldl_be_phys(&address_space_memory, *addr); + pvr =3D ldl_be_phys(&address_space_memory, *addr + 4); + *addr +=3D 8; =20 if (~pvr_mask & pvr) { break; /* Terminator record */ @@ -1087,17 +1081,38 @@ static target_ulong h_client_architecture_support(P= owerPCCPU *cpu, /* We couldn't find a suitable compatibility mode, and either * the guest doesn't support "raw" mode for this CPU, or raw * mode is disabled because a maximum compat mode is set */ - return H_HARDWARE; + error_setg(errp, "Couldn't negotiate a suitable PVR during CAS"); + return 0; } =20 /* Parsing finished */ trace_spapr_cas_pvr(cpu->compat_pvr, explicit_match, best_compat); =20 - /* Update CPUs */ - if (cpu->compat_pvr !=3D best_compat) { - Error *local_err =3D NULL; + return best_compat; +} =20 - ppc_set_compat_all(best_compat, &local_err); +static target_ulong h_client_architecture_support(PowerPCCPU *cpu, + sPAPRMachineState *spapr, + target_ulong opcode, + target_ulong *args) +{ + /* Working address in data buffer */ + target_ulong addr =3D ppc64_phys_to_real(args[0]); + target_ulong ov_table; + uint32_t cas_pvr; + sPAPROptionVector *ov1_guest, *ov5_guest, *ov5_cas_old, *ov5_updates; + bool guest_radix; + Error *local_err =3D NULL; + + cas_pvr =3D cas_check_pvr(cpu, &addr, &local_err); + if (local_err) { + error_report_err(local_err); + return H_HARDWARE; + } + + /* Update CPUs */ + if (cpu->compat_pvr !=3D cas_pvr) { + ppc_set_compat_all(cas_pvr, &local_err); if (local_err) { error_report_err(local_err); return H_HARDWARE; @@ -1105,7 +1120,7 @@ static target_ulong h_client_architecture_support(Pow= erPCCPU *cpu, } =20 /* For the future use: here @ov_table points to the first option vecto= r */ - ov_table =3D list; + ov_table =3D addr; =20 ov1_guest =3D spapr_ovec_parse_vector(ov_table, 1); ov5_guest =3D spapr_ovec_parse_vector(ov_table, 5); --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684783278899.7117756970811; Wed, 24 May 2017 20:59:43 -0700 (PDT) Received: from localhost ([::1]:58021 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjw5-0006LD-JK for importer@patchew.org; Wed, 24 May 2017 23:59:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57474) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoT-0006Zr-Ng for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoR-0007Wz-MZ for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:33389) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoR-0007UC-7E; Wed, 24 May 2017 23:51:47 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ2L1Hz9sNd; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=tRIQYaB6S9T2ScDZ/EK8wCYb+TLwPO243siuFjjAg1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NcCMoTDpDIcJmdtLTdE4PxQfDx0ueF0M91Tm0C1jG6SOGzHO9SGfnJ6J0p1FDwcdx AlG0Was2cA4Pf28e4Y1f19yOJEkDS107EFGcHrDBjsdG6RnbqKduVurPC/aRlKOPKv 7PPnsxdRvWli26++F65UC8isXudPcOrZi77hvZXM= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:26 +1000 Message-Id: <20170525035132.24268-13-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 12/18] pseries: Restore support for total vcpus not a multiple of threads-per-core for old machine types X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As of pseries-2.7 and later, we require the total number of guest vcpus to be a multiple of the threads-per-core. pseries-2.6 and earlier machine types, however, are supposed to allow this for the sake of migration from old qemu versions which allowed this. Unfortunately, 8149e29 "pseries: Enforce homogeneous threads-per-core" broke this by not considering the old machine type case. This fixes it by only applying the check when the machine type supports hotpluggable cpus. By not-entirely-coincidence, that corresponds to the same time when we started enforcing total threads being a multiple of threads-per-core. Fixes: 8149e2992f7811355cc34721b79d69d1a3a667dd Signed-off-by: David Gibson Reviewed-by: Laurent Vivier Reviewed-by: Greg Kurz Tested-by: Greg Kurz --- hw/ppc/spapr.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index c92d269..bcb0e18 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2863,7 +2863,13 @@ static void spapr_core_pre_plug(HotplugHandler *hotp= lug_dev, DeviceState *dev, goto out; } =20 - if (cc->nr_threads !=3D smp_threads) { + /* + * In general we should have homogeneous threads-per-core, but old + * (pre hotplug support) machine types allow the last core to have + * reduced threads as a compatibility hack for when we allowed + * total vcpus not a multiple of threads-per-core. + */ + if (mc->has_hotpluggable_cpus && (cc->nr_threads !=3D smp_threads)) { error_setg(errp, "invalid nr-threads %d, must be %d", cc->nr_threads, smp_threads); return; --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495685068640777.8274814632473; Wed, 24 May 2017 21:04:28 -0700 (PDT) Received: from localhost ([::1]:58049 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDk0h-0002Og-Ae for importer@patchew.org; Thu, 25 May 2017 00:04:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57405) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoS-0006Yn-VK for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoR-0007Wo-Ku for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:48 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:57567) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoR-0007U8-5x; Wed, 24 May 2017 23:51:47 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ1PRWz9sNv; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=nHKJuAKn+LW8HqPwmtLgy4jsSbSFK8HA2vxrNL3KTEA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=geDkK5HBBF5Je1cBKStodDgJoMlZUsVjqyOhBq/0yPKGLwOoQIZaAwDB7KHZcV9pN RunToWriM9SQVMorzJT/i9BqafjPCIXOtOiPYfVlu/atQmsEdibpzT8SssbSBnwIkm JrmYi0uv+QgllWdvHwt7bkeWeUy+pTBgfNWumlPo= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:27 +1000 Message-Id: <20170525035132.24268-14-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 13/18] spapr: add pre_plug function for memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Laurent Vivier This allows to manage errors before the memory has started to be hotplugged. We already have the function for the CPU cores. Signed-off-by: Laurent Vivier Reviewed-by: Greg Kurz [dwg: Fixed a couple of style nits] Signed-off-by: David Gibson --- hw/ppc/spapr.c | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index bcb0e18..3760d37 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2578,20 +2578,6 @@ static void spapr_memory_plug(HotplugHandler *hotplu= g_dev, DeviceState *dev, uint64_t align =3D memory_region_get_alignment(mr); uint64_t size =3D memory_region_size(mr); uint64_t addr; - char *mem_dev; - - if (size % SPAPR_MEMORY_BLOCK_SIZE) { - error_setg(&local_err, "Hotplugged memory size must be a multiple = of " - "%lld MB", SPAPR_MEMORY_BLOCK_SIZE/M_BYTE); - goto out; - } - - mem_dev =3D object_property_get_str(OBJECT(dimm), PC_DIMM_MEMDEV_PROP,= NULL); - if (mem_dev && !kvmppc_is_mem_backend_page_size_ok(mem_dev)) { - error_setg(&local_err, "Memory backend has bad page size. " - "Use 'memory-backend-file' with correct mem-path."); - goto out; - } =20 pc_dimm_memory_plug(dev, &ms->hotplug_memory, mr, align, &local_err); if (local_err) { @@ -2612,6 +2598,29 @@ out: error_propagate(errp, local_err); } =20 +static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState= *dev, + Error **errp) +{ + PCDIMMDevice *dimm =3D PC_DIMM(dev); + PCDIMMDeviceClass *ddc =3D PC_DIMM_GET_CLASS(dimm); + MemoryRegion *mr =3D ddc->get_memory_region(dimm); + uint64_t size =3D memory_region_size(mr); + char *mem_dev; + + if (size % SPAPR_MEMORY_BLOCK_SIZE) { + error_setg(errp, "Hotplugged memory size must be a multiple of " + "%lld MB", SPAPR_MEMORY_BLOCK_SIZE / M_BYTE); + return; + } + + mem_dev =3D object_property_get_str(OBJECT(dimm), PC_DIMM_MEMDEV_PROP,= NULL); + if (mem_dev && !kvmppc_is_mem_backend_page_size_ok(mem_dev)) { + error_setg(errp, "Memory backend has bad page size. " + "Use 'memory-backend-file' with correct mem-path."); + return; + } +} + typedef struct sPAPRDIMMState { uint32_t nr_lmbs; } sPAPRDIMMState; @@ -3006,7 +3015,9 @@ static void spapr_machine_device_unplug_request(Hotpl= ugHandler *hotplug_dev, static void spapr_machine_device_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { - if (object_dynamic_cast(OBJECT(dev), TYPE_SPAPR_CPU_CORE)) { + if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { + spapr_memory_pre_plug(hotplug_dev, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_SPAPR_CPU_CORE)) { spapr_core_pre_plug(hotplug_dev, dev, errp); } } --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495685074223142.8796955207779; Wed, 24 May 2017 21:04:34 -0700 (PDT) Received: from localhost ([::1]:58050 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDk0m-0002SB-Sj for importer@patchew.org; Thu, 25 May 2017 00:04:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57488) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoU-0006at-7R for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoR-0007WZ-GO for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:50 -0400 Received: from ozlabs.org ([103.22.144.67]:34115) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoQ-0007UG-S2; Wed, 24 May 2017 23:51:47 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ3H8Zz9sNb; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=vq5WQZ0EQldLXs1Zg9/dy/C7z+GYbXvSjcUxfg+Wqds=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ONCUYyHPhwjDRzFfoMIpDEgWfnp8vE9ajVE+oaIKvYAuRc5pv523agE0/Y9FUMbG2 gYeQX/WI2W1UitBOXGd6K05A+6YfbIQjUFyAAukLp4YpkrrOcTQGSqBEqsHtRZijbI AokRebxFvRI7VEYPcW83gR2bLDBKA71lEFrptdsU= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:28 +1000 Message-Id: <20170525035132.24268-15-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 14/18] hw/ppc/spapr.c: adding pending_dimm_unplugs to sPAPRMachineState X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Daniel Henrique Barboza , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The LMB DRC release callback, spapr_lmb_release(), uses an opaque parameter, a sPAPRDIMMState struct that stores the current LMBs that are allocated to a DIMM (nr_lmbs). After each call to this callback, the nr_lmbs is decremented by one and, when it reaches zero, the callback proceeds with the qdev calls to hot unplug the LMB. Using drc->detach_cb_opaque is problematic because it can't be migrated in the future DRC migration work. This patch makes the following changes to eliminate the usage of this opaque callback inside spapr_lmb_release: - sPAPRDIMMState was moved from spapr.c and added to spapr.h. A new attribute called 'addr' was added to it. This is used as an unique identifier to associate a sPAPRDIMMState to a PCDIMM element. - sPAPRMachineState now hosts a new QTAILQ called 'pending_dimm_unplugs'. This queue of sPAPRDIMMState elements will store the DIMM state of DIMMs that are currently going under an unplug process. - spapr_lmb_release() will now retrieve the nr_lmbs value by getting the correspondent sPAPRDIMMState. A helper function called spapr_dimm_get_addre= ss was created to fetch the address of a PCDIMM device inside spapr_lmb_releas= e. When nr_lmbs reaches zero and the callback proceeds with the qdev hot unplug calls, the sPAPRDIMMState struct is removed from spapr->pending_dimm_unplug= s. After these changes, the opaque argument for spapr_lmb_release is now unused and is passed as NULL inside spapr_del_lmbs. This and the other opaque arguments can now be safely removed from the code. As an additional cleanup made by this patch, the spapr_del_lmbs function was merged with spapr_memory_unplug_request. The former was being called only by the latter and both were small enough to fit one single function. Signed-off-by: Daniel Henrique Barboza [dwg: Minor stylistic cleanups] Signed-off-by: David Gibson --- hw/ppc/spapr.c | 105 +++++++++++++++++++++++++++++++--------------= ---- include/hw/ppc/spapr.h | 6 +++ 2 files changed, 73 insertions(+), 38 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 3760d37..3a79dab 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2059,6 +2059,7 @@ static void ppc_spapr_init(MachineState *machine) msi_nonbroken =3D true; =20 QLIST_INIT(&spapr->phbs); + QTAILQ_INIT(&spapr->pending_dimm_unplugs); =20 /* Allocate RMA if necessary */ rma_alloc_size =3D kvmppc_alloc_rma(&rma); @@ -2621,58 +2622,58 @@ static void spapr_memory_pre_plug(HotplugHandler *h= otplug_dev, DeviceState *dev, } } =20 -typedef struct sPAPRDIMMState { +struct sPAPRDIMMState { + PCDIMMDevice *dimm; uint32_t nr_lmbs; -} sPAPRDIMMState; + QTAILQ_ENTRY(sPAPRDIMMState) next; +}; + +static sPAPRDIMMState *spapr_pending_dimm_unplugs_find(sPAPRMachineState *= s, + PCDIMMDevice *dimm) +{ + sPAPRDIMMState *dimm_state =3D NULL; + + QTAILQ_FOREACH(dimm_state, &s->pending_dimm_unplugs, next) { + if (dimm_state->dimm =3D=3D dimm) { + break; + } + } + return dimm_state; +} + +static void spapr_pending_dimm_unplugs_add(sPAPRMachineState *spapr, + sPAPRDIMMState *dimm_state) +{ + g_assert(!spapr_pending_dimm_unplugs_find(spapr, dimm_state->dimm)); + QTAILQ_INSERT_HEAD(&spapr->pending_dimm_unplugs, dimm_state, next); +} + +static void spapr_pending_dimm_unplugs_remove(sPAPRMachineState *spapr, + sPAPRDIMMState *dimm_state) +{ + QTAILQ_REMOVE(&spapr->pending_dimm_unplugs, dimm_state, next); + g_free(dimm_state); +} =20 static void spapr_lmb_release(DeviceState *dev, void *opaque) { - sPAPRDIMMState *ds =3D (sPAPRDIMMState *)opaque; - HotplugHandler *hotplug_ctrl; + HotplugHandler *hotplug_ctrl =3D qdev_get_hotplug_handler(dev); + sPAPRMachineState *spapr =3D SPAPR_MACHINE(hotplug_ctrl); + sPAPRDIMMState *ds =3D spapr_pending_dimm_unplugs_find(spapr, PC_DIMM(= dev)); =20 if (--ds->nr_lmbs) { return; } =20 - g_free(ds); + spapr_pending_dimm_unplugs_remove(spapr, ds); =20 /* * Now that all the LMBs have been removed by the guest, call the * pc-dimm unplug handler to cleanup up the pc-dimm device. */ - hotplug_ctrl =3D qdev_get_hotplug_handler(dev); hotplug_handler_unplug(hotplug_ctrl, dev, &error_abort); } =20 -static void spapr_del_lmbs(DeviceState *dev, uint64_t addr_start, uint64_t= size, - Error **errp) -{ - sPAPRDRConnector *drc; - sPAPRDRConnectorClass *drck; - uint32_t nr_lmbs =3D size / SPAPR_MEMORY_BLOCK_SIZE; - int i; - sPAPRDIMMState *ds =3D g_malloc0(sizeof(sPAPRDIMMState)); - uint64_t addr =3D addr_start; - - ds->nr_lmbs =3D nr_lmbs; - for (i =3D 0; i < nr_lmbs; i++) { - drc =3D spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB, - addr / SPAPR_MEMORY_BLOCK_SIZE); - g_assert(drc); - - drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); - drck->detach(drc, dev, spapr_lmb_release, ds, errp); - addr +=3D SPAPR_MEMORY_BLOCK_SIZE; - } - - drc =3D spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB, - addr_start / SPAPR_MEMORY_BLOCK_SIZE); - drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); - spapr_hotplug_req_remove_by_count_indexed(SPAPR_DR_CONNECTOR_TYPE_LMB, - nr_lmbs, - drck->get_index(drc)); -} - static void spapr_memory_unplug(HotplugHandler *hotplug_dev, DeviceState *= dev, Error **errp) { @@ -2688,19 +2689,47 @@ static void spapr_memory_unplug(HotplugHandler *hot= plug_dev, DeviceState *dev, static void spapr_memory_unplug_request(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { + sPAPRMachineState *spapr =3D SPAPR_MACHINE(hotplug_dev); Error *local_err =3D NULL; PCDIMMDevice *dimm =3D PC_DIMM(dev); PCDIMMDeviceClass *ddc =3D PC_DIMM_GET_CLASS(dimm); MemoryRegion *mr =3D ddc->get_memory_region(dimm); uint64_t size =3D memory_region_size(mr); - uint64_t addr; + uint32_t nr_lmbs =3D size / SPAPR_MEMORY_BLOCK_SIZE; + uint64_t addr_start, addr; + int i; + sPAPRDRConnector *drc; + sPAPRDRConnectorClass *drck; + sPAPRDIMMState *ds; =20 - addr =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, &loc= al_err); + addr_start =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, + &local_err); if (local_err) { goto out; } =20 - spapr_del_lmbs(dev, addr, size, &error_abort); + ds =3D g_malloc0(sizeof(sPAPRDIMMState)); + ds->nr_lmbs =3D nr_lmbs; + ds->dimm =3D dimm; + spapr_pending_dimm_unplugs_add(spapr, ds); + + addr =3D addr_start; + for (i =3D 0; i < nr_lmbs; i++) { + drc =3D spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB, + addr / SPAPR_MEMORY_BLOCK_SIZE); + g_assert(drc); + + drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); + drck->detach(drc, dev, spapr_lmb_release, NULL, errp); + addr +=3D SPAPR_MEMORY_BLOCK_SIZE; + } + + drc =3D spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB, + addr_start / SPAPR_MEMORY_BLOCK_SIZE); + drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); + spapr_hotplug_req_remove_by_count_indexed(SPAPR_DR_CONNECTOR_TYPE_LMB, + nr_lmbs, + drck->get_index(drc)); out: error_propagate(errp, local_err); } diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 8f424ca..777b5de 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -32,6 +32,7 @@ struct sPAPRRTCState { int64_t ns_offset; }; =20 +typedef struct sPAPRDIMMState sPAPRDIMMState; typedef struct sPAPRMachineClass sPAPRMachineClass; =20 #define TYPE_SPAPR_MACHINE "spapr-machine" @@ -104,6 +105,11 @@ struct sPAPRMachineState { /* RTAS state */ QTAILQ_HEAD(, sPAPRConfigureConnectorState) ccs_list; =20 + /* Pending DIMM unplug cache. It is populated when a LMB + * unplug starts. It can be regenerated if a migration + * occurs during the unplug process. */ + QTAILQ_HEAD(, sPAPRDIMMState) pending_dimm_unplugs; + /*< public >*/ char *kvm_type; MemoryHotplugState hotplug_memory; --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684953968207.18152803659552; Wed, 24 May 2017 21:02:33 -0700 (PDT) Received: from localhost ([::1]:58042 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjyp-0000Fv-Kb for importer@patchew.org; Thu, 25 May 2017 00:02:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57342) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoR-0006Wj-4J for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoO-0007U0-Vr for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:47 -0400 Received: from ozlabs.org ([103.22.144.67]:51497) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoO-0007SN-8F; Wed, 24 May 2017 23:51:44 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgY6rbQz9sNL; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684297; bh=EP3ynS27asFFTQZkCshoJU2ifBQ5mMqy8MPCPpHm0Lo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SUY+jND6tKt4zsXWGxl5VN5BJjlcF662gxkDSUuN/Jgztndx9v1nn0AGLeuNTHycw flwibDT2V3Y0LfH/0e298v5NfEAV/nxqj5eHudT4lmYqypFqJ/CogiBrEMPXuPX8Mh 3LuVmecR3yUI68ci30L30FSs6mPd0fpaW98U9dLw= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:29 +1000 Message-Id: <20170525035132.24268-16-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 15/18] hw/ppc: removing drc->detach_cb and drc->detach_cb_opaque X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Daniel Henrique Barboza , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Daniel Henrique Barboza The pointer drc->detach_cb is being used as a way of informing the detach() function inside spapr_drc.c which cb to execute. This information can also be retrieved simply by checking drc->type and choosing the right callback based on it. In this context, detach_cb is redundant information that must be managed. After the previous spapr_lmb_release change, no detach_cb_opaques are being used by any of the three callbacks functions. This is yet another information that is now unused and, on top of that, can't be migrated either. This patch makes the following changes: - removal of detach_cb_opaque. the 'opaque' argument was removed from the callbacks and from the detach() function of sPAPRConnectorClass. The attribute detach_cb_opaque of sPAPRConnector was removed. - removal of detach_cb from the detach() call. The function pointer detach_cb of sPAPRConnector was removed. detach() now uses a switch(drc->type) to execute the apropriate callback. To achieve this, spapr_core_release, spapr_lmb_release and spapr_phb_remove_pci_device_cb callbacks were made public to be visible inside detach(). Signed-off-by: Daniel Henrique Barboza Signed-off-by: David Gibson --- hw/ppc/spapr.c | 10 ++++++---- hw/ppc/spapr_drc.c | 36 ++++++++++++++++++++---------------- hw/ppc/spapr_pci.c | 5 +++-- include/hw/pci-host/spapr.h | 3 +++ include/hw/ppc/spapr.h | 4 ++++ include/hw/ppc/spapr_drc.h | 8 +------- 6 files changed, 37 insertions(+), 29 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 3a79dab..14399f4 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2655,7 +2655,8 @@ static void spapr_pending_dimm_unplugs_remove(sPAPRMa= chineState *spapr, g_free(dimm_state); } =20 -static void spapr_lmb_release(DeviceState *dev, void *opaque) +/* Callback to be called during DRC release. */ +void spapr_lmb_release(DeviceState *dev) { HotplugHandler *hotplug_ctrl =3D qdev_get_hotplug_handler(dev); sPAPRMachineState *spapr =3D SPAPR_MACHINE(hotplug_ctrl); @@ -2720,7 +2721,7 @@ static void spapr_memory_unplug_request(HotplugHandle= r *hotplug_dev, g_assert(drc); =20 drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); - drck->detach(drc, dev, spapr_lmb_release, NULL, errp); + drck->detach(drc, dev, errp); addr +=3D SPAPR_MEMORY_BLOCK_SIZE; } =20 @@ -2767,7 +2768,8 @@ static void spapr_core_unplug(HotplugHandler *hotplug= _dev, DeviceState *dev, object_unparent(OBJECT(dev)); } =20 -static void spapr_core_release(DeviceState *dev, void *opaque) +/* Callback to be called during DRC release. */ +void spapr_core_release(DeviceState *dev) { HotplugHandler *hotplug_ctrl; =20 @@ -2800,7 +2802,7 @@ void spapr_core_unplug_request(HotplugHandler *hotplu= g_dev, DeviceState *dev, g_assert(drc); =20 drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); - drck->detach(drc, dev, spapr_core_release, NULL, &local_err); + drck->detach(drc, dev, &local_err); if (local_err) { error_propagate(errp, local_err); return; diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index 9fa5545..2851e16 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -20,6 +20,7 @@ #include "qapi/visitor.h" #include "qemu/error-report.h" #include "hw/ppc/spapr.h" /* for RTAS return codes */ +#include "hw/pci-host/spapr.h" /* spapr_phb_remove_pci_device_cb callback = */ #include "trace.h" =20 #define DRC_CONTAINER_PATH "/dr-connector" @@ -99,8 +100,7 @@ static uint32_t set_isolation_state(sPAPRDRConnector *dr= c, if (drc->awaiting_release) { if (drc->configured) { trace_spapr_drc_set_isolation_state_finalizing(get_index(d= rc)); - drck->detach(drc, DEVICE(drc->dev), drc->detach_cb, - drc->detach_cb_opaque, NULL); + drck->detach(drc, DEVICE(drc->dev), NULL); } else { trace_spapr_drc_set_isolation_state_deferring(get_index(dr= c)); } @@ -153,8 +153,7 @@ static uint32_t set_allocation_state(sPAPRDRConnector *= drc, if (drc->awaiting_release && drc->allocation_state =3D=3D SPAPR_DR_ALLOCATION_STATE_UNUSABL= E) { trace_spapr_drc_set_allocation_state_finalizing(get_index(drc)= ); - drck->detach(drc, DEVICE(drc->dev), drc->detach_cb, - drc->detach_cb_opaque, NULL); + drck->detach(drc, DEVICE(drc->dev), NULL); } else if (drc->allocation_state =3D=3D SPAPR_DR_ALLOCATION_STATE_= USABLE) { drc->awaiting_allocation =3D false; } @@ -404,15 +403,10 @@ static void attach(sPAPRDRConnector *drc, DeviceState= *d, void *fdt, NULL, 0, NULL); } =20 -static void detach(sPAPRDRConnector *drc, DeviceState *d, - spapr_drc_detach_cb *detach_cb, - void *detach_cb_opaque, Error **errp) +static void detach(sPAPRDRConnector *drc, DeviceState *d, Error **errp) { trace_spapr_drc_detach(get_index(drc)); =20 - drc->detach_cb =3D detach_cb; - drc->detach_cb_opaque =3D detach_cb_opaque; - /* if we've signalled device presence to the guest, or if the guest * has gone ahead and configured the device (via manually-executed * device add via drmgr in guest, namely), we need to wait @@ -456,8 +450,21 @@ static void detach(sPAPRDRConnector *drc, DeviceState = *d, =20 drc->indicator_state =3D SPAPR_DR_INDICATOR_STATE_INACTIVE; =20 - if (drc->detach_cb) { - drc->detach_cb(drc->dev, drc->detach_cb_opaque); + /* Calling release callbacks based on drc->type. */ + switch (drc->type) { + case SPAPR_DR_CONNECTOR_TYPE_CPU: + spapr_core_release(drc->dev); + break; + case SPAPR_DR_CONNECTOR_TYPE_PCI: + spapr_phb_remove_pci_device_cb(drc->dev); + break; + case SPAPR_DR_CONNECTOR_TYPE_LMB: + spapr_lmb_release(drc->dev); + break; + case SPAPR_DR_CONNECTOR_TYPE_PHB: + case SPAPR_DR_CONNECTOR_TYPE_VIO: + default: + g_assert(false); } =20 drc->awaiting_release =3D false; @@ -467,8 +474,6 @@ static void detach(sPAPRDRConnector *drc, DeviceState *= d, drc->fdt_start_offset =3D 0; object_property_del(OBJECT(drc), "device", NULL); drc->dev =3D NULL; - drc->detach_cb =3D NULL; - drc->detach_cb_opaque =3D NULL; } =20 static bool release_pending(sPAPRDRConnector *drc) @@ -498,8 +503,7 @@ static void reset(DeviceState *d) * force removal if we are */ if (drc->awaiting_release) { - drck->detach(drc, DEVICE(drc->dev), drc->detach_cb, - drc->detach_cb_opaque, NULL); + drck->detach(drc, DEVICE(drc->dev), NULL); } =20 /* non-PCI devices may be awaiting a transition to UNUSABLE */ diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index a7cff32..e4daf8d 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -1369,7 +1369,8 @@ out: } } =20 -static void spapr_phb_remove_pci_device_cb(DeviceState *dev, void *opaque) +/* Callback to be called during DRC release. */ +void spapr_phb_remove_pci_device_cb(DeviceState *dev) { /* some version guests do not wait for completion of a device * cleanup (generally done asynchronously by the kernel) before @@ -1392,7 +1393,7 @@ static void spapr_phb_remove_pci_device(sPAPRDRConnec= tor *drc, { sPAPRDRConnectorClass *drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); =20 - drck->detach(drc, DEVICE(pdev), spapr_phb_remove_pci_device_cb, phb, e= rrp); + drck->detach(drc, DEVICE(pdev), errp); } =20 static sPAPRDRConnector *spapr_phb_get_pci_func_drc(sPAPRPHBState *phb, diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h index 1c2e970..38470b2 100644 --- a/include/hw/pci-host/spapr.h +++ b/include/hw/pci-host/spapr.h @@ -123,6 +123,9 @@ sPAPRPHBState *spapr_pci_find_phb(sPAPRMachineState *sp= apr, uint64_t buid); PCIDevice *spapr_pci_find_dev(sPAPRMachineState *spapr, uint64_t buid, uint32_t config_addr); =20 +/* PCI release callback. */ +void spapr_phb_remove_pci_device_cb(DeviceState *dev); + /* VFIO EEH hooks */ #ifdef CONFIG_LINUX bool spapr_phb_eeh_available(sPAPRPHBState *sphb); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 777b5de..98fb78b 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -642,6 +642,10 @@ void spapr_hotplug_req_remove_by_count_indexed(sPAPRDR= ConnectorType drc_type, void *spapr_populate_hotplug_cpu_dt(CPUState *cs, int *fdt_offset, sPAPRMachineState *spapr); =20 +/* CPU and LMB DRC release callbacks. */ +void spapr_core_release(DeviceState *dev); +void spapr_lmb_release(DeviceState *dev); + /* rtas-configure-connector state */ struct sPAPRConfigureConnectorState { uint32_t drc_index; diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h index 5524247..813b9ff 100644 --- a/include/hw/ppc/spapr_drc.h +++ b/include/hw/ppc/spapr_drc.h @@ -130,8 +130,6 @@ typedef enum { SPAPR_DR_CC_RESPONSE_NOT_CONFIGURABLE =3D -9003, } sPAPRDRCCResponse; =20 -typedef void (spapr_drc_detach_cb)(DeviceState *d, void *opaque); - typedef struct sPAPRDRConnector { /*< private >*/ DeviceState parent; @@ -158,8 +156,6 @@ typedef struct sPAPRDRConnector { =20 /* device pointer, via link property */ DeviceState *dev; - spapr_drc_detach_cb *detach_cb; - void *detach_cb_opaque; } sPAPRDRConnector; =20 typedef struct sPAPRDRConnectorClass { @@ -188,9 +184,7 @@ typedef struct sPAPRDRConnectorClass { /* QEMU interfaces for managing hotplug operations */ void (*attach)(sPAPRDRConnector *drc, DeviceState *d, void *fdt, int fdt_start_offset, bool coldplug, Error **errp); - void (*detach)(sPAPRDRConnector *drc, DeviceState *d, - spapr_drc_detach_cb *detach_cb, - void *detach_cb_opaque, Error **errp); + void (*detach)(sPAPRDRConnector *drc, DeviceState *d, Error **errp); bool (*release_pending)(sPAPRDRConnector *drc); void (*set_signalled)(sPAPRDRConnector *drc); } sPAPRDRConnectorClass; --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495685244134727.4682853311631; Wed, 24 May 2017 21:07:24 -0700 (PDT) Received: from localhost ([::1]:58066 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDk3W-0004TJ-NG for importer@patchew.org; Thu, 25 May 2017 00:07:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57455) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoT-0006Zd-GF for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoR-0007Wv-M0 for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from ozlabs.org ([103.22.144.67]:50409) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoR-0007Un-7W; Wed, 24 May 2017 23:51:47 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ4NQZz9sNj; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=qfBOTqffxfRe9OCXZqMTbrmFC4ldoRmMlK0RuKVvHXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kDVIwloEE16J/VlK4RVmgcJNi73rwPe5bbMFORwp6L/oRY88/OUZqIZ7QLE02zL5n 2vpwH4nsP4R7clLlZClozbhLQQuk+oEP/05T/4Ft0h8cLuwtTfqYo76dt5H6sz3ZRm ApcuRCstSFHOKb6Zs42m2z7nvf4zsCekCLFFRtBM= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:30 +1000 Message-Id: <20170525035132.24268-17-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 16/18] hw/ppc: migrating the DRC state of hotplugged devices X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Daniel Henrique Barboza , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Daniel Henrique Barboza In pseries, a firmware abstraction called Dynamic Reconfiguration Connector (DRC) is used to assign a particular dynamic resource to the guest and provide an interface to manage configuration/removal of the resource associated with it. In other words, DRC is the 'plugged state' of a device. Before this patch, DRC wasn't being migrated. This causes post-migration problems due to DRC state mismatch between source and target. The DRC state of a device X in the source might change, while in the target the DRC state of X is still fresh. When migrating the guest, X will not have the same hotplugged state as it did in the source. This means that we can't hot unplug X in the target after migration is completed because its DRC state is not consistent. https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1677552 is one bug that is caused by this DRC state mismatch between source and target. To migrate the DRC state, we defined the VMStateDescription struct for spapr_drc to enable the transmission of spapr_drc state in migration. Not all the elements in the DRC state are migrated - only those that can be modified by guest actions or device add/remove operations: - 'isolation_state', 'allocation_state' and 'indicator_state' are involved in the DR state transition diagram from PAPR+ 2.7, 13.4; - 'configured', 'signalled', 'awaiting_release' and 'awaiting_allocation' are needed in attaching and detaching devices; - 'indicator_state' provides users with hardware state information. These are the DRC elements that are migrated. In this patch the DRC state is migrated for PCI, LMB and CPU connector types. At this moment there is no support to migrate DRC for the PHB (PCI Host Bridge) type. In the 'realize' function the DRC is registered using vmstate_register, similar to what hw/ppc/spapr_iommu.c does in 'spapr_tce_table_realize'. This approach works because DRCs are bus-less and do not sit on a BusClass that implements bc->get_dev_path, so as a fallback the VMSD gets identified via "spapr_drc"/get_index(drc). Signed-off-by: Daniel Henrique Barboza Signed-off-by: David Gibson --- hw/ppc/spapr_drc.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 56 insertions(+) diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index 2851e16..cc2400b 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -519,6 +519,60 @@ static void reset(DeviceState *d) } } =20 +static bool spapr_drc_needed(void *opaque) +{ + sPAPRDRConnector *drc =3D (sPAPRDRConnector *)opaque; + sPAPRDRConnectorClass *drck =3D SPAPR_DR_CONNECTOR_GET_CLASS(drc); + bool rc =3D false; + sPAPRDREntitySense value; + drck->entity_sense(drc, &value); + + /* If no dev is plugged in there is no need to migrate the DRC state */ + if (value !=3D SPAPR_DR_ENTITY_SENSE_PRESENT) { + return false; + } + + /* + * If there is dev plugged in, we need to migrate the DRC state when + * it is different from cold-plugged state + */ + switch (drc->type) { + case SPAPR_DR_CONNECTOR_TYPE_PCI: + rc =3D !((drc->isolation_state =3D=3D SPAPR_DR_ISOLATION_STATE_UNI= SOLATED) && + (drc->allocation_state =3D=3D SPAPR_DR_ALLOCATION_STATE_USA= BLE) && + drc->configured && drc->signalled && !drc->awaiting_release= ); + break; + case SPAPR_DR_CONNECTOR_TYPE_CPU: + case SPAPR_DR_CONNECTOR_TYPE_LMB: + rc =3D !((drc->isolation_state =3D=3D SPAPR_DR_ISOLATION_STATE_ISO= LATED) && + (drc->allocation_state =3D=3D SPAPR_DR_ALLOCATION_STATE_UNU= SABLE) && + drc->configured && drc->signalled && !drc->awaiting_release= ); + break; + case SPAPR_DR_CONNECTOR_TYPE_PHB: + case SPAPR_DR_CONNECTOR_TYPE_VIO: + default: + g_assert(false); + } + return rc; +} + +static const VMStateDescription vmstate_spapr_drc =3D { + .name =3D "spapr_drc", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D spapr_drc_needed, + .fields =3D (VMStateField []) { + VMSTATE_UINT32(isolation_state, sPAPRDRConnector), + VMSTATE_UINT32(allocation_state, sPAPRDRConnector), + VMSTATE_UINT32(indicator_state, sPAPRDRConnector), + VMSTATE_BOOL(configured, sPAPRDRConnector), + VMSTATE_BOOL(awaiting_release, sPAPRDRConnector), + VMSTATE_BOOL(awaiting_allocation, sPAPRDRConnector), + VMSTATE_BOOL(signalled, sPAPRDRConnector), + VMSTATE_END_OF_LIST() + } +}; + static void realize(DeviceState *d, Error **errp) { sPAPRDRConnector *drc =3D SPAPR_DR_CONNECTOR(d); @@ -547,6 +601,8 @@ static void realize(DeviceState *d, Error **errp) object_unref(OBJECT(drc)); } g_free(child_name); + vmstate_register(DEVICE(drc), drck->get_index(drc), &vmstate_spapr_drc, + drc); trace_spapr_drc_realize_complete(drck->get_index(drc)); } =20 --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495685165391435.03223249330506; Wed, 24 May 2017 21:06:05 -0700 (PDT) Received: from localhost ([::1]:58061 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDk2G-0003Ui-1Y for importer@patchew.org; Thu, 25 May 2017 00:06:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57482) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoT-0006aI-UQ for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoS-0007Xk-BX for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:36895) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoR-0007Uz-U7; Wed, 24 May 2017 23:51:48 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ56Scz9sP0; Thu, 25 May 2017 13:51:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=QvK6JDluqp4TFb60+V9qcuFcfdLz22BV3pXryxHgs4Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PjAG36TebUBRx6neMzNMbJSw+hdy1mRcija20mSy9gpkzyR98szu1dsXAKfdHoGRC RESflpvnIZtfrIC5/QWPapUfo1rPcil3aHsHjzZbhQ+N9jUnNuDI+i1I2tnfwkBCsk 6aT/VW3qEpz8OYPPqTLA82Ox47JdYfvur0OCysBo= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:31 +1000 Message-Id: <20170525035132.24268-18-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 17/18] hw/ppc/spapr.c: recover pending LMB unplug info in spapr_lmb_release X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, Daniel Henrique Barboza , sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Daniel Henrique Barboza When a LMB hot unplug starts, the current DRC LMB status is stored at spapr->pending_dimm_unplugs QTAILQ. This queue isn't migrated, thus if a migration occurs in the middle of a LMB unplug the spapr_lmb_release callback will lost track of the LMB unplug progress. This patch implements a new recover function spapr_recover_pending_dimm_sta= te that is used inside spapr_lmb_release to recover this DRC LMB release status that is lost during the migration. Signed-off-by: Daniel Henrique Barboza [dwg: Minor stylistic changes, simplify error handling] Signed-off-by: David Gibson --- hw/ppc/spapr.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 14399f4..ab3aab1 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2655,6 +2655,40 @@ static void spapr_pending_dimm_unplugs_remove(sPAPRM= achineState *spapr, g_free(dimm_state); } =20 +static sPAPRDIMMState *spapr_recover_pending_dimm_state(sPAPRMachineState = *ms, + PCDIMMDevice *dimm) +{ + sPAPRDRConnector *drc; + PCDIMMDeviceClass *ddc =3D PC_DIMM_GET_CLASS(dimm); + MemoryRegion *mr =3D ddc->get_memory_region(dimm); + uint64_t size =3D memory_region_size(mr); + uint32_t nr_lmbs =3D size / SPAPR_MEMORY_BLOCK_SIZE; + uint32_t avail_lmbs =3D 0; + uint64_t addr_start, addr; + int i; + sPAPRDIMMState *ds; + + addr_start =3D object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, + &error_abort); + + addr =3D addr_start; + for (i =3D 0; i < nr_lmbs; i++) { + drc =3D spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB, + addr / SPAPR_MEMORY_BLOCK_SIZE); + g_assert(drc); + if (drc->indicator_state !=3D SPAPR_DR_INDICATOR_STATE_INACTIVE) { + avail_lmbs++; + } + addr +=3D SPAPR_MEMORY_BLOCK_SIZE; + } + + ds =3D g_malloc0(sizeof(sPAPRDIMMState)); + ds->nr_lmbs =3D avail_lmbs; + ds->dimm =3D dimm; + spapr_pending_dimm_unplugs_add(ms, ds); + return ds; +} + /* Callback to be called during DRC release. */ void spapr_lmb_release(DeviceState *dev) { @@ -2662,7 +2696,14 @@ void spapr_lmb_release(DeviceState *dev) sPAPRMachineState *spapr =3D SPAPR_MACHINE(hotplug_ctrl); sPAPRDIMMState *ds =3D spapr_pending_dimm_unplugs_find(spapr, PC_DIMM(= dev)); =20 - if (--ds->nr_lmbs) { + /* This information will get lost if a migration occurs + * during the unplug process. In this case recover it. */ + if (ds =3D=3D NULL) { + ds =3D spapr_recover_pending_dimm_state(spapr, PC_DIMM(dev)); + if (ds->nr_lmbs) { + return; + } + } else if (--ds->nr_lmbs) { return; } =20 --=20 2.9.4 From nobody Fri Apr 26 09:02:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495684976572730.8413073592694; Wed, 24 May 2017 21:02:56 -0700 (PDT) Received: from localhost ([::1]:58044 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjzD-0000hW-2P for importer@patchew.org; Thu, 25 May 2017 00:02:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57454) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dDjoT-0006Zb-FJ for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dDjoR-0007XP-Tj for qemu-devel@nongnu.org; Wed, 24 May 2017 23:51:49 -0400 Received: from ozlabs.org ([103.22.144.67]:52759) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dDjoR-0007Uw-FC; Wed, 24 May 2017 23:51:47 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wYFgZ5fLhz9sP3; Thu, 25 May 2017 13:51:38 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1495684298; bh=Tp4mNpBwDwaoaMeekKlIwW5k4gsvgv50huHc/vRVud4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GlQKUzBidjtZQ/3fOAFApkzyRo0aOaWCd/ZshsU/0boMNBLQeIDcwKLPagcVIMUFw a2lhfjndzWPMDSNIsRvmWaCD/7tAhiX913S6WHD2vMfYGahhOXLhVIRgWO2i4Bhcov 3YntuRrGbF4ZpIoWIaqIAtc9EpYNrIEBrzV4rRM4= From: David Gibson To: peter.maydell@linaro.org Date: Thu, 25 May 2017 13:51:32 +1000 Message-Id: <20170525035132.24268-19-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170525035132.24268-1-david@gibson.dropbear.id.au> References: <20170525035132.24268-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 18/18] xics: add unrealize handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, aik@ozlabs.ru, sursingh@redhat.com, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, sbobroff@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) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz Now that ICPState objects get finalized on CPU unplug, we should unregister reset handlers as well to avoid a QEMU crash at machine reset time. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/intc/xics.c | 5 +++++ hw/intc/xics_kvm.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 292fffe..ea35167 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -357,6 +357,10 @@ static void icp_realize(DeviceState *dev, Error **errp) qemu_register_reset(icp_reset, dev); } =20 +static void icp_unrealize(DeviceState *dev, Error **errp) +{ + qemu_unregister_reset(icp_reset, dev); +} =20 static void icp_class_init(ObjectClass *klass, void *data) { @@ -364,6 +368,7 @@ static void icp_class_init(ObjectClass *klass, void *da= ta) =20 dc->vmsd =3D &vmstate_icp_server; dc->realize =3D icp_realize; + dc->unrealize =3D icp_unrealize; } =20 static const TypeInfo icp_info =3D { diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c index dd7f298..14b8f6f 100644 --- a/hw/intc/xics_kvm.c +++ b/hw/intc/xics_kvm.c @@ -164,12 +164,18 @@ static void icp_kvm_realize(DeviceState *dev, Error *= *errp) qemu_register_reset(icp_kvm_reset, dev); } =20 +static void icp_kvm_unrealize(DeviceState *dev, Error **errp) +{ + qemu_unregister_reset(icp_kvm_reset, dev); +} + static void icp_kvm_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); ICPStateClass *icpc =3D ICP_CLASS(klass); =20 dc->realize =3D icp_kvm_realize; + dc->unrealize =3D icp_kvm_unrealize; icpc->pre_save =3D icp_get_kvm_state; icpc->post_load =3D icp_set_kvm_state; icpc->cpu_setup =3D icp_kvm_cpu_setup; --=20 2.9.4