From nobody Mon Feb 9 23:01:48 2026 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=1582169235; cv=none; d=zohomail.com; s=zohoarc; b=lvyB1rfVD0GmbongjZyM8xrw498ZUG87YRPA2IZvrZ8GmvRbkP7U/lpp8WwuT1SAZuZRog9gfdYvlTbfjlJ40LCcfBXkdirwydQb0QpG5WsVxb8IyFiG5EIbOEKFCtcXyCOtexwx7J+BjkoS9MnuG+1oGYUU8Jka5MKCV/JywkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582169235; 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=n5VF6/Uzh1NOuD/13zKhhkHryg+DAy7OZU1RXvpfojp+Sw34hknQh0tyXUzFQcr9c6x7NVcNnKULGTcWrkK3G+5OFDMUG+EgC8L5NuBgtN9H/VNJ8Wzp1JRHV5fo80zyTegdyu3r1xeNRAbf0xQirrLtR8IdDgL/RgNWqvkNjHI= 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 1582169235025134.5584474926577; Wed, 19 Feb 2020 19:27:15 -0800 (PST) Received: from localhost ([::1]:35284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j4cUb-0003BQ-Uo for importer@patchew.org; Wed, 19 Feb 2020 22:27:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41646) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j4cRU-0005cy-FV for qemu-devel@nongnu.org; Wed, 19 Feb 2020 22:24:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j4cRT-0000L2-B2 for qemu-devel@nongnu.org; Wed, 19 Feb 2020 22:24:00 -0500 Received: from bilbo.ozlabs.org ([2401:3900:2:1::2]:58279 helo=ozlabs.org) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j4cRT-0008MX-0c; Wed, 19 Feb 2020 22:23:59 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 48NKg250nsz9sSk; Thu, 20 Feb 2020 14:23:26 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1582169006; bh=GyzBZMDoAMPRnJCvIsnfxFsMHlBhNBqGfLr4nb9ELlM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P9l/S2XupeblVRk6FAraFfTj56Bl+B4I9PdBWu5OQ5aVh+1VhCQGmo8iCPSc7D+M1 1TYuIuOODHoZARciHmZnugdzmMnu1M6LSkz3Db4oJXU1vJXdCH2n3oEG031ikjRX19 czyqRXPmtSqHLxUZ01KTlbymj0PopsHTGaWq9+Rw= From: David Gibson To: qemu-ppc@nongnu.org, groug@kaod.org, clg@kaod.org Subject: [PATCH v5 18/18] spapr: Fold spapr_node0_size() into its only caller Date: Thu, 20 Feb 2020 14:23:16 +1100 Message-Id: <20200220032317.96884-19-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200220032317.96884-1-david@gibson.dropbear.id.au> References: <20200220032317.96884-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, Thomas Huth , Xiao Guangrong , "Michael S. Tsirkin" , aik@ozlabs.ru, Mark Cave-Ayland , qemu-devel@nongnu.org, 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 --- 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