From nobody Thu Nov 13 20:41:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1582587838; cv=none; d=zohomail.com; s=zohoarc; b=IHbxp4CCeA0emt+S3BZKJN/48wu7nO7BxDsMDmJjVSf0clRuWFuhnTRFVEUGOFOxq4l6UDwLoCtsUen0aqfrEt6FXZ+IQ3dcbFdQKZCb+Il7tZNl3FeVHRW0NGQT1dyTFhTwVj8/jXgfyacNDx37SN4LIbgXGq7U6/HS6NTpKbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582587838; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lls78OEhGgBJxL3JJNYvSdYQN9Ku2rvGbR9prJxOPcQ=; b=D9ypJx6gL0LYtXgnFxbMGRVWadOuwmprVNYfw2fAb8yt6S67T1pvlMjkzu6w8/SF4dispEbUA6XAy2zDeydPzv02bihhOhpY+BazkfvAmnl4ruNOrC/0P+M6aJBhVUSSEOW3yEJwAgNmkw2RCEbPa0hetTy9XH3LDDOrQRGSg+4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158258783862986.50398591909891; Mon, 24 Feb 2020 15:43:58 -0800 (PST) Received: from localhost ([::1]:46212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NOH-0002Ld-Io for importer@patchew.org; Mon, 24 Feb 2020 18:43:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48169) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6NNI-0000xk-2I for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:42:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6NNG-0001j2-Sn for qemu-devel@nongnu.org; Mon, 24 Feb 2020 18:42:56 -0500 Received: from ozlabs.org ([203.11.71.1]:57215) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j6NNG-0001im-Ha; Mon, 24 Feb 2020 18:42:54 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48RJQ72m7Gz9sSb; Tue, 25 Feb 2020 10:37:34 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582587455; bh=GyzBZMDoAMPRnJCvIsnfxFsMHlBhNBqGfLr4nb9ELlM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m1BBjZgfAz9evchJx+24BlgIm7hMhYLqsbeOYjl9TXtx6/Q8By5QvP9oH4pJFpoBQ lQRHCZTFZaOsoZx2IaQG1Bm+TWTioLzIcY5c7b9eubK6rgQuCHVPbmappWY4kt1Q20 L4u53doG3Aeq0TSeRKyVOGQ/hRlBra6gDrQUnOII= From: David Gibson To: groug@kaod.org, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, clg@kaod.org Subject: [PATCH v6 18/18] spapr: Fold spapr_node0_size() into its only caller Date: Tue, 25 Feb 2020 10:37:24 +1100 Message-Id: <20200224233724.46415-19-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200224233724.46415-1-david@gibson.dropbear.id.au> References: <20200224233724.46415-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 203.11.71.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, farosas@linux.ibm.com, Mark Cave-Ayland , Igor Mammedov , paulus@samba.org, Paolo Bonzini , "Edgar E. Iglesias" , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The Real Mode Area (RMA) needs to fit within the NUMA node owning memory at address 0. That's usually node 0, but can be a later one if there are some nodes which have no memory (only CPUs). This is currently handled by the spapr_node0_size() helper. It has only one caller, so there's not a lot of point splitting it out. It's also extremely easy to misread the code as clamping to the size of the smallest node rather than the first node with any memory. So, fold it into the caller, and add some commentary to make it a bit clearer exactly what it's doing. Signed-off-by: David Gibson Reviewed-by: Greg Kurz --- hw/ppc/spapr.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index f0354b699d..9ba645c9cb 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -296,20 +296,6 @@ static void spapr_populate_pa_features(SpaprMachineSta= te *spapr, _FDT((fdt_setprop(fdt, offset, "ibm,pa-features", pa_features, pa_size= ))); } =20 -static hwaddr spapr_node0_size(MachineState *machine) -{ - if (machine->numa_state->num_nodes) { - int i; - for (i =3D 0; i < machine->numa_state->num_nodes; ++i) { - if (machine->numa_state->nodes[i].node_mem) { - return MIN(pow2floor(machine->numa_state->nodes[i].node_me= m), - machine->ram_size); - } - } - } - return machine->ram_size; -} - static void add_str(GString *s, const gchar *s1) { g_string_append_len(s, s1, strlen(s1) + 1); @@ -2652,10 +2638,24 @@ static hwaddr spapr_rma_size(SpaprMachineState *spa= pr, Error **errp) { MachineState *machine =3D MACHINE(spapr); hwaddr rma_size =3D machine->ram_size; - hwaddr node0_size =3D spapr_node0_size(machine); =20 /* RMA has to fit in the first NUMA node */ - rma_size =3D MIN(rma_size, node0_size); + if (machine->numa_state->num_nodes) { + /* + * It's possible for there to be some zero-memory nodes first + * in the list. We need the RMA to fit inside the memory of + * the first node which actually has some memory. + */ + int i; + + for (i =3D 0; i < machine->numa_state->num_nodes; ++i) { + if (machine->numa_state->nodes[i].node_mem !=3D 0) { + rma_size =3D MIN(rma_size, + machine->numa_state->nodes[i].node_mem); + break; + } + } + } =20 /* * VRMA access is via a special 1TiB SLB mapping, so the RMA can @@ -2672,6 +2672,11 @@ static hwaddr spapr_rma_size(SpaprMachineState *spap= r, Error **errp) spapr->rma_size =3D MIN(spapr->rma_size, smc->rma_limit); } =20 + /* + * RMA size must be a power of 2 + */ + rma_size =3D pow2floor(rma_size); + if (rma_size < (MIN_RMA_SLOF * MiB)) { error_setg(errp, "pSeries SLOF firmware requires >=3D %ldMiB guest RMA (Real Mode Area)", --=20 2.24.1