From nobody Thu May 2 15:12:33 2024 Delivered-To: importer@patchew.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; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1630056396037166.13319321542133; Fri, 27 Aug 2021 02:26:36 -0700 (PDT) Received: from localhost ([::1]:48966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJY8A-0006mF-LO for importer@patchew.org; Fri, 27 Aug 2021 05:26:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJY6s-0004Kz-7H; Fri, 27 Aug 2021 05:25:14 -0400 Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:40495) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mJY6n-00024M-JW; Fri, 27 Aug 2021 05:25:13 -0400 Received: by mail-ua1-x930.google.com with SMTP id y36so3072575uad.7; Fri, 27 Aug 2021 02:25:08 -0700 (PDT) Received: from rekt.COMFAST ([177.197.96.186]) by smtp.gmail.com with ESMTPSA id d17sm629180vsj.9.2021.08.27.02.25.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Aug 2021 02:25:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g5Jdp9p1FcFlTUliocLqD9QgBTG6ccV0iJdgZ6gBA0U=; b=BUpD8MlSME/k3APv0k6d9tBBGmST6DJost375iMjW835IhPx6cl8o8OWSwa59j/5pF mtimwfNGcFYOaxIzT2haO1E4dV/5Xof2oF8TZ0SKLiOK53NQF76MING2EIeP05lvkq4t 1vkqi3Is3w5z+9yHD7AwvLJdGAWWy8K0AC1I9Mwv5zK0CZa4cNSVkLEFkapJDkIuuHdE ncafTzCJemg0VPls3pC9U4gqBmGQov6fJfTiZR5PJVAqbd7U0hDOv9udh9DnpPtf9ymR WP+uaFY5nHXcgE0q7WKl/Kn9eb2z9fQ07TuhSKluZITeAdSU0NxDXbLR3NwBLzTYzorp /QGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g5Jdp9p1FcFlTUliocLqD9QgBTG6ccV0iJdgZ6gBA0U=; b=iBk5mJG1bmEqajCqlBhjKm5FzmLv6hGUiPUtO0La1LF3/g1LWlYdSyQsIlHJvh0iUK oeue1KetXPSAAPUQu9tagw3nkKpXumj4rlZoetTIywwJ4JC8yM/o43SppwPJTHD2sC+N 81B5CCw6V2h3gOCbhEG0R6o//QNJMixooKtBzuOnyDiKkD2ydmQX/LtsyGkU9wXuH4QJ n25FGcCmqk7MoNOOuE5LU00EKIqFtoUYVCbqNBoWPk3iQnX2AMhZPKi7VAWuhknmmUap kOwICgJyT6fwe2Lq3Eh0K1K1fZfCfoMNiZ5bKxJ+gwPSpbASopasG7peG/x8jU5S852J c4lA== X-Gm-Message-State: AOAM5305V/rX0rMAPoM3Fiw86c49Pq99jwOu08g5wA9EOtZgmXvvnlgn R48TrnYyuYFnvYylq1Cupjejk0b9dhs= X-Google-Smtp-Source: ABdhPJzAf1BizHcXJQNiqAZmB2zIoHcuaIPHDvhVyVF1kC4WtJcxUTDzdKQPfl+C7Bz0FRcNimxDmA== X-Received: by 2002:ab0:6652:: with SMTP id b18mr5715328uaq.53.1630056308085; Fri, 27 Aug 2021 02:25:08 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Subject: [PATCH v4 1/5] hw, spapr: add 6.2 compat pseries machine Date: Fri, 27 Aug 2021 06:24:51 -0300 Message-Id: <20210827092455.125411-2-danielhb413@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210827092455.125411-1-danielhb413@gmail.com> References: <20210827092455.125411-1-danielhb413@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::930; envelope-from=danielhb413@gmail.com; helo=mail-ua1-x930.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Daniel Henrique Barboza , qemu-ppc@nongnu.org, groug@kaod.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1630056398582100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel Henrique Barboza --- hw/core/machine.c | 3 +++ hw/ppc/spapr.c | 15 +++++++++++++-- include/hw/boards.h | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 54e040587d..067f42b528 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -37,6 +37,9 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-pci.h" =20 +GlobalProperty hw_compat_6_1[] =3D {}; +const size_t hw_compat_6_1_len =3D G_N_ELEMENTS(hw_compat_6_1); + GlobalProperty hw_compat_6_0[] =3D { { "gpex-pcihost", "allow-unmapped-accesses", "false" }, { "i8042", "extended-state", "false"}, diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 81699d4f8b..d39fd4e644 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -4685,15 +4685,26 @@ static void spapr_machine_latest_class_options(Mach= ineClass *mc) } \ type_init(spapr_machine_register_##suffix) =20 +/* + * pseries-6.2 + */ +static void spapr_machine_6_2_class_options(MachineClass *mc) +{ + /* Defaults for the latest behaviour inherited from the base class */ +} + +DEFINE_SPAPR_MACHINE(6_2, "6.2", true); + /* * pseries-6.1 */ static void spapr_machine_6_1_class_options(MachineClass *mc) { - /* Defaults for the latest behaviour inherited from the base class */ + spapr_machine_6_2_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_6_1, hw_compat_6_1_len); } =20 -DEFINE_SPAPR_MACHINE(6_1, "6.1", true); +DEFINE_SPAPR_MACHINE(6_1, "6.1", false); =20 /* * pseries-6.0 diff --git a/include/hw/boards.h b/include/hw/boards.h index accd6eff35..463a5514f9 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -353,6 +353,9 @@ struct MachineState { } \ type_init(machine_initfn##_register_types) =20 +extern GlobalProperty hw_compat_6_1[]; +extern const size_t hw_compat_6_1_len; + extern GlobalProperty hw_compat_6_0[]; extern const size_t hw_compat_6_0_len; =20 --=20 2.31.1 From nobody Thu May 2 15:12:33 2024 Delivered-To: importer@patchew.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; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1630056477985736.0409410454622; Fri, 27 Aug 2021 02:27:57 -0700 (PDT) Received: from localhost ([::1]:53346 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJY9U-0001IX-Oh for importer@patchew.org; Fri, 27 Aug 2021 05:27:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45446) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJY6u-0004LI-HZ; Fri, 27 Aug 2021 05:25:18 -0400 Received: from mail-vk1-xa31.google.com ([2607:f8b0:4864:20::a31]:34641) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mJY6r-00025y-Qs; Fri, 27 Aug 2021 05:25:15 -0400 Received: by mail-vk1-xa31.google.com with SMTP id 1so1689654vkk.1; Fri, 27 Aug 2021 02:25:10 -0700 (PDT) Received: from rekt.COMFAST ([177.197.96.186]) by smtp.gmail.com with ESMTPSA id d17sm629180vsj.9.2021.08.27.02.25.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Aug 2021 02:25:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PIRb512kHljFyTVHOfkp/0Rx4tH71wszfCwzgotmw4c=; b=kbnSiwAmiM1bEVZOUiRwcYoGiJkIms6RDGYljWRctz2g8lviAigTDxujpzZ1awhkoj H/9yw1XvYOMMxY9i9G76h7acOELvPemskVwBclYRczBeHz9eemXO7/LgMyR/g11nSYnq afPRp9PKbpzIROf7GBXEq2x388WP7Eca4DDMR9PPri7JeHedmQyEl94YIxV5FKZ+6tCz 4oDqxCy/rIkdjJiZf8k4MrXqORqA2mr+ulruVTNx+m4ZeeQdola7AtXr3LgWdzzaygWi ZORvMpc+sqGvlx1Fw5j9S3RFnjMz2tawjsjzp7+1+1b8RJXLrClnSLZzYCKaD/Fn2NlV fVSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PIRb512kHljFyTVHOfkp/0Rx4tH71wszfCwzgotmw4c=; b=ZoQzjbrqRVJPXj882WGlDaz/L8XQsbX6bFrkncGMlwhIXcWwmEa7itTnbg5hWhlOtv ecppbvuP7nRkg8qZ5iiXq4p2yBY38PYA1cObc8ZmKirBBEVa85Iem9x8KdqbztY8hSwz vorbdd961RKTALL9Q8Pm/U52vUafsgDWgVFVHPmviMRaB8nZk4vvEWjuJyoICrTfMeIO 1iI5XjoD7AhDU9XKlp68PY0ZpnR768H3V5b3hf6GKpyO43ToMZ2ZMc0GVQXfnN1o/ghy ewL3J/TbPYwJBQY5cdFtlNjPDcJfKICWKHsncxJ0IBwPTnnVaxmjzcl7dmmd9OmMMxpL GoPQ== X-Gm-Message-State: AOAM533i3xGbYhxPVxA/sIazxy80eRTo7ZVxV5/DmfVUY+azsoIyjqHL Nciy+rL103foklB3wGxDnysAcWNp9yY= X-Google-Smtp-Source: ABdhPJyrF2USsT7MmlG4BwTpovt1pMTmWf+FYKe0hJoiUyhlVlxfizjHpixBAAHfpoITuViT5pGqfA== X-Received: by 2002:a05:6122:1070:: with SMTP id k16mr5435544vko.11.1630056310003; Fri, 27 Aug 2021 02:25:10 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Subject: [PATCH v4 2/5] spapr_numa.c: split FORM1 code into helpers Date: Fri, 27 Aug 2021 06:24:52 -0300 Message-Id: <20210827092455.125411-3-danielhb413@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210827092455.125411-1-danielhb413@gmail.com> References: <20210827092455.125411-1-danielhb413@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::a31; envelope-from=danielhb413@gmail.com; helo=mail-vk1-xa31.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Daniel Henrique Barboza , qemu-ppc@nongnu.org, groug@kaod.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1630056478793100001 Content-Type: text/plain; charset="utf-8" The upcoming FORM2 NUMA affinity will support asymmetric NUMA topologies and doesn't need be concerned with all the legacy support for older pseries FORM1 guests. We're also not going to calculate associativity domains based on numa distance (via spapr_numa_define_associativity_domains) since the distances will be written directly into new DT properties. Let's split FORM1 code into its own functions to allow for easier insertion of FORM2 logic later on. Reviewed-by: Greg Kurz Signed-off-by: Daniel Henrique Barboza --- hw/ppc/spapr_numa.c | 61 +++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c index 779f18b994..04a86f9b5b 100644 --- a/hw/ppc/spapr_numa.c +++ b/hw/ppc/spapr_numa.c @@ -155,6 +155,32 @@ static void spapr_numa_define_associativity_domains(Sp= aprMachineState *spapr) =20 } =20 +/* + * Set NUMA machine state data based on FORM1 affinity semantics. + */ +static void spapr_numa_FORM1_affinity_init(SpaprMachineState *spapr, + MachineState *machine) +{ + bool using_legacy_numa =3D spapr_machine_using_legacy_numa(spapr); + + /* + * Legacy NUMA guests (pseries-5.1 and older, or guests with only + * 1 NUMA node) will not benefit from anything we're going to do + * after this point. + */ + if (using_legacy_numa) { + return; + } + + if (!spapr_numa_is_symmetrical(machine)) { + error_report("Asymmetrical NUMA topologies aren't supported " + "in the pSeries machine"); + exit(EXIT_FAILURE); + } + + spapr_numa_define_associativity_domains(spapr); +} + void spapr_numa_associativity_init(SpaprMachineState *spapr, MachineState *machine) { @@ -210,22 +236,7 @@ void spapr_numa_associativity_init(SpaprMachineState *= spapr, spapr->numa_assoc_array[i][MAX_DISTANCE_REF_POINTS] =3D cpu_to_be3= 2(i); } =20 - /* - * Legacy NUMA guests (pseries-5.1 and older, or guests with only - * 1 NUMA node) will not benefit from anything we're going to do - * after this point. - */ - if (using_legacy_numa) { - return; - } - - if (!spapr_numa_is_symmetrical(machine)) { - error_report("Asymmetrical NUMA topologies aren't supported " - "in the pSeries machine"); - exit(EXIT_FAILURE); - } - - spapr_numa_define_associativity_domains(spapr); + spapr_numa_FORM1_affinity_init(spapr, machine); } =20 void spapr_numa_write_associativity_dt(SpaprMachineState *spapr, void *fdt, @@ -302,12 +313,8 @@ int spapr_numa_write_assoc_lookup_arrays(SpaprMachineS= tate *spapr, void *fdt, return ret; } =20 -/* - * Helper that writes ibm,associativity-reference-points and - * max-associativity-domains in the RTAS pointed by @rtas - * in the DT @fdt. - */ -void spapr_numa_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rta= s) +static void spapr_numa_FORM1_write_rtas_dt(SpaprMachineState *spapr, + void *fdt, int rtas) { MachineState *ms =3D MACHINE(spapr); SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); @@ -365,6 +372,16 @@ void spapr_numa_write_rtas_dt(SpaprMachineState *spapr= , void *fdt, int rtas) maxdomains, sizeof(maxdomains))); } =20 +/* + * Helper that writes ibm,associativity-reference-points and + * max-associativity-domains in the RTAS pointed by @rtas + * in the DT @fdt. + */ +void spapr_numa_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rta= s) +{ + spapr_numa_FORM1_write_rtas_dt(spapr, fdt, rtas); +} + static target_ulong h_home_node_associativity(PowerPCCPU *cpu, SpaprMachineState *spapr, target_ulong opcode, --=20 2.31.1 From nobody Thu May 2 15:12:33 2024 Delivered-To: importer@patchew.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; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1630056592986724.0760566827224; Fri, 27 Aug 2021 02:29:52 -0700 (PDT) Received: from localhost ([::1]:57146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJYBM-0003tt-0a for importer@patchew.org; Fri, 27 Aug 2021 05:29:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJY6x-0004LX-6t; Fri, 27 Aug 2021 05:25:19 -0400 Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]:35673) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mJY6s-000266-Bi; Fri, 27 Aug 2021 05:25:18 -0400 Received: by mail-vk1-xa2b.google.com with SMTP id ay16so332865vkb.2; Fri, 27 Aug 2021 02:25:13 -0700 (PDT) Received: from rekt.COMFAST ([177.197.96.186]) by smtp.gmail.com with ESMTPSA id d17sm629180vsj.9.2021.08.27.02.25.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Aug 2021 02:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3BuknGuWxCtWw9tfucIGk0STlvQj04wVK/joYYtc7OY=; b=NdbQSVitTapDQG1l+LYvzKY6ws5P4QCK5EJvZljphrKRtC+Wh8AP39i2N9cqyp/EBD uecvaJBYIogRut0WEk42mkZvncLsm5KU5k+0VVY9lObss+7P6q96yHvVGGtvFzQOecZ0 QRN2z+UxK0voLb8ckz8IJJOrqp8+F318qicKAzI6dnIvMwayU8Uzl81DiXDaczXO064t dj+QiQHEd6qJscxZqIFjgqWtRmbKx04x3KVKWmnaEr1t/SWhFSg27AKJkwJvGHtnL7O5 rxdbW4sn7L6a/uhOdR9Es/fzt4sCtHqfUHRy4gRAd02mytUwAY8FV/CbaBhKljj01W61 pMsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3BuknGuWxCtWw9tfucIGk0STlvQj04wVK/joYYtc7OY=; b=N4UsdtwofZ7tsXvuikdLtjDZ0UX4bRaF+wAHkhY3j4mfL8nrHTw35w6z6C+gVts6Ix pvpWgnTWWS6wrmsYaQCp9N2XoihfZNXqNUmjB5kKBGChKZBjswurUkdE9Q4aKo2iF1Su Km+pH4oMPNbSNFPIgSwr3xOMaNmOX4uWtHr0z4WLP+1emPt+CSjVH95vpx/KHxFK9kEs 1CfIwHAY9A9uYSs7Q1t6UrpNIIJYW2KJYQdfamR7ndhYHZB2uLfV2gcoADIJLL5ZppGc hXHPmUst0pPeXRga+s3tyk9xyz7bn1OkKwN977k68Vqi0kRn1735Y1VE6yH5G20f3nz+ 5azw== X-Gm-Message-State: AOAM530FoUOgqZpvaZoa9fyAtEJQwkFFClilz4+1fSGVR4Bg8RE12fkY KZrrah186ACFlyfqWHnbQthuK6p/C3s= X-Google-Smtp-Source: ABdhPJxSoS4zAyx7Jw/pP13VOPJOmTx/s6s7ss9Ndu7Ljq+c4gkTQHsh47BMSuZbhaJ0aEwm7oLrAQ== X-Received: by 2002:a1f:1f51:: with SMTP id f78mr86315vkf.24.1630056312127; Fri, 27 Aug 2021 02:25:12 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Subject: [PATCH v4 3/5] spapr_numa.c: base FORM2 NUMA affinity support Date: Fri, 27 Aug 2021 06:24:53 -0300 Message-Id: <20210827092455.125411-4-danielhb413@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210827092455.125411-1-danielhb413@gmail.com> References: <20210827092455.125411-1-danielhb413@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::a2b; envelope-from=danielhb413@gmail.com; helo=mail-vk1-xa2b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Daniel Henrique Barboza , qemu-ppc@nongnu.org, groug@kaod.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1630056594767100001 Content-Type: text/plain; charset="utf-8" The main feature of FORM2 affinity support is the separation of NUMA distances from ibm,associativity information. This allows for a more flexible and straightforward NUMA distance assignment without relying on complex associations between several levels of NUMA via ibm,associativity matches. Another feature is its extensibility. This base support contains the facilities for NUMA distance assignment, but in the future more facilities will be added for latency, performance, bandwidth and so on. This patch implements the base FORM2 affinity support as follows: - the use of FORM2 associativity is indicated by using bit 2 of byte 5 of ibm,architecture-vec-5. A FORM2 aware guest can choose to use FORM1 or FORM2 affinity. Setting both forms will default to FORM2. We're not advertising FORM2 for pseries-6.1 and older machine versions to prevent guest visible changes in those; - move spapr_numa_associativity_init() from spapr_machine_init() to do_client_architecture_support(), when we already know which NUMA affinity the guest will use. This will avoid initializing FORM1 spapr->numa_assoc_array and overwrite it shortly after if FORM2 is chosen; - ibm,associativity-reference-points has a new semantic. Instead of being used to calculate distances via NUMA levels, it's now used to indicate the primary domain index in the ibm,associativity domain of each resource. In our case it's set to {0x4}, matching the position where we already place logical_domain_id; - two new RTAS DT artifacts are introduced: ibm,numa-lookup-index-table and ibm,numa-distance-table. The index table is used to list all the NUMA logical domains of the platform, in ascending order, and allows for spartial NUMA configurations (although QEMU ATM doesn't support that). ibm,numa-distance-table is an array that contains all the distances from the first NUMA node to all other nodes, then the second NUMA node distances to all other nodes and so on; - spapr_post_load changes: since we're adding a new NUMA affinity that isn't compatible with the existing one, migration must be handled accordingly because we can't be certain of whether the guest went through CAS in the source. The solution chosen is to initiate the NUMA associativity data in spapr_post_load() unconditionally. The worst case would be to write the DT twice if the guest is in pre-CAS stage. Otherwise, we're making sure that a FORM1 guest will have the spapr->numa_assoc_array initialized with the proper information based on user distance, something that we're not doing with FORM2. Signed-off-by: Daniel Henrique Barboza --- hw/ppc/spapr.c | 27 +++++++- hw/ppc/spapr_hcall.c | 4 ++ hw/ppc/spapr_numa.c | 127 +++++++++++++++++++++++++++++++++++- include/hw/ppc/spapr.h | 1 + include/hw/ppc/spapr_ovec.h | 1 + 5 files changed, 156 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index d39fd4e644..a3eb33764d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1786,6 +1786,22 @@ static int spapr_post_load(void *opaque, int version= _id) return err; } =20 + /* + * NUMA data init is made in CAS time. There is no reliable + * way of telling whether the guest already went through CAS + * in the source due to how spapr_ov5_cas_needed works: a + * FORM1 guest can be migrated with ov5_cas empty regardless + * of going through CAS first. + * + * One solution is to always call numa_associativity_init. The + * downside is that a guest migrated before CAS will run + * numa_associativity_init again when going through it, but + * at least we're making sure spapr->numa_assoc_array will be + * initialized and hotplug operations won't fail in both before + * and after CAS migration cases. + */ + spapr_numa_associativity_init(spapr, MACHINE(spapr)); + return err; } =20 @@ -2752,6 +2768,11 @@ static void spapr_machine_init(MachineState *machine) =20 spapr_ovec_set(spapr->ov5, OV5_FORM1_AFFINITY); =20 + /* Do not advertise FORM2 support for pseries-6.1 and older */ + if (!smc->pre_6_2_numa_affinity) { + spapr_ovec_set(spapr->ov5, OV5_FORM2_AFFINITY); + } + /* advertise support for dedicated HP event source to guests */ if (spapr->use_hotplug_event_source) { spapr_ovec_set(spapr->ov5, OV5_HP_EVT); @@ -2808,9 +2829,6 @@ static void spapr_machine_init(MachineState *machine) =20 spapr->gpu_numa_id =3D spapr_numa_initial_nvgpu_numa_id(machine); =20 - /* Init numa_assoc_array */ - spapr_numa_associativity_init(spapr, machine); - if ((!kvm_enabled() || kvmppc_has_cap_mmu_radix()) && ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00,= 0, spapr->max_compat_pvr)) { @@ -4700,8 +4718,11 @@ DEFINE_SPAPR_MACHINE(6_2, "6.2", true); */ static void spapr_machine_6_1_class_options(MachineClass *mc) { + SpaprMachineClass *smc =3D SPAPR_MACHINE_CLASS(mc); + spapr_machine_6_2_class_options(mc); compat_props_add(mc->compat_props, hw_compat_6_1, hw_compat_6_1_len); + smc->pre_6_2_numa_affinity =3D true; } =20 DEFINE_SPAPR_MACHINE(6_1, "6.1", false); diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 0e9a5b2e40..1cc88716c1 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -11,6 +11,7 @@ #include "helper_regs.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_cpu_core.h" +#include "hw/ppc/spapr_numa.h" #include "mmu-hash64.h" #include "cpu-models.h" #include "trace.h" @@ -1197,6 +1198,9 @@ target_ulong do_client_architecture_support(PowerPCCP= U *cpu, spapr->cas_pre_isa3_guest =3D !spapr_ovec_test(ov1_guest, OV1_PPC_3_00= ); spapr_ovec_cleanup(ov1_guest); =20 + /* Init numa_assoc_array */ + spapr_numa_associativity_init(spapr, MACHINE(spapr)); + /* * Ensure the guest asks for an interrupt mode we support; * otherwise terminate the boot. diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c index 04a86f9b5b..0a5fa8101e 100644 --- a/hw/ppc/spapr_numa.c +++ b/hw/ppc/spapr_numa.c @@ -202,6 +202,16 @@ void spapr_numa_associativity_init(SpaprMachineState *= spapr, spapr->numa_assoc_array[i][0] =3D cpu_to_be32(MAX_DISTANCE_REF_POI= NTS); spapr->numa_assoc_array[i][MAX_DISTANCE_REF_POINTS] =3D cpu_to_be3= 2(i); =20 + /* + * For FORM2 affinity the initialization above is enough. No + * need to fill non-zero NUMA nodes with node_id because + * there is no associativity domain match to calculate + * NUMA distances in FORM2. + */ + if (spapr_ovec_test(spapr->ov5_cas, OV5_FORM2_AFFINITY)) { + continue; + } + /* * Fill all associativity domains of non-zero NUMA nodes with * node_id. This is required because the default value (0) is @@ -236,7 +246,16 @@ void spapr_numa_associativity_init(SpaprMachineState *= spapr, spapr->numa_assoc_array[i][MAX_DISTANCE_REF_POINTS] =3D cpu_to_be3= 2(i); } =20 - spapr_numa_FORM1_affinity_init(spapr, machine); + /* + * We test for !FORM2 instead of testing for FORM1 because, + * as per spapr_ov5_cas_needed, setting FORM1 is not enough + * to get ov5_cas migrated, but setting FORM2 is. Since we're + * dealing with either FORM1 or FORM2, test for the option + * that is guaranteed to be set after a migration. + */ + if (!spapr_ovec_test(spapr->ov5_cas, OV5_FORM2_AFFINITY)) { + spapr_numa_FORM1_affinity_init(spapr, machine); + } } =20 void spapr_numa_write_associativity_dt(SpaprMachineState *spapr, void *fdt, @@ -313,6 +332,107 @@ int spapr_numa_write_assoc_lookup_arrays(SpaprMachine= State *spapr, void *fdt, return ret; } =20 +static void spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr, + void *fdt, int rtas) +{ + MachineState *ms =3D MACHINE(spapr); + NodeInfo *numa_info =3D ms->numa_state->nodes; + int nb_numa_nodes =3D ms->numa_state->num_nodes; + int distance_table_entries =3D nb_numa_nodes * nb_numa_nodes; + g_autofree uint32_t *lookup_index_table =3D NULL; + g_autofree uint32_t *distance_table =3D NULL; + int src, dst, i, distance_table_size; + uint8_t *node_distances; + + /* + * ibm,numa-lookup-index-table: array with length and a + * list of NUMA ids present in the guest. + */ + lookup_index_table =3D g_new0(uint32_t, nb_numa_nodes + 1); + lookup_index_table[0] =3D cpu_to_be32(nb_numa_nodes); + + for (i =3D 0; i < nb_numa_nodes; i++) { + lookup_index_table[i + 1] =3D cpu_to_be32(i); + } + + _FDT(fdt_setprop(fdt, rtas, "ibm,numa-lookup-index-table", + lookup_index_table, + (nb_numa_nodes + 1) * sizeof(uint32_t))); + + /* + * ibm,numa-distance-table: contains all node distances. First + * element is the size of the table as uint32, followed up + * by all the uint8 distances from the first NUMA node, then all + * distances from the second NUMA node and so on. + * + * ibm,numa-lookup-index-table is used by guest to navigate this + * array because NUMA ids can be sparse (node 0 is the first, + * node 8 is the second ...). + */ + distance_table =3D g_new0(uint32_t, distance_table_entries + 1); + distance_table[0] =3D cpu_to_be32(distance_table_entries); + + node_distances =3D (uint8_t *)&distance_table[1]; + i =3D 0; + + for (src =3D 0; src < nb_numa_nodes; src++) { + for (dst =3D 0; dst < nb_numa_nodes; dst++) { + node_distances[i++] =3D numa_info[src].distance[dst]; + } + } + + distance_table_size =3D distance_table_entries * sizeof(uint8_t) + + sizeof(uint32_t); + _FDT(fdt_setprop(fdt, rtas, "ibm,numa-distance-table", + distance_table, distance_table_size)); +} + +/* + * This helper could be compressed in a single function with + * FORM1 logic since we're setting the same DT values, with the + * difference being a call to spapr_numa_FORM2_write_rtas_tables() + * in the end. The separation was made to avoid clogging FORM1 code + * which already has to deal with compat modes from previous + * QEMU machine types. + */ +static void spapr_numa_FORM2_write_rtas_dt(SpaprMachineState *spapr, + void *fdt, int rtas) +{ + MachineState *ms =3D MACHINE(spapr); + uint32_t number_nvgpus_nodes =3D spapr->gpu_numa_id - + spapr_numa_initial_nvgpu_numa_id(ms); + + /* + * In FORM2, ibm,associativity-reference-points will point to + * the element in the ibm,associativity array that contains the + * primary domain index. This value (in our case, the numa-id) is + * then used as an index to retrieve all other attributes of the + * node (distance, bandwidth, latency) via ibm,numa-lookup-index-table + * and other ibm,numa-*-table properties. + */ + uint32_t refpoints[] =3D { + cpu_to_be32(0x4), + }; + + uint32_t nr_refpoints =3D ARRAY_SIZE(refpoints); + uint32_t maxdomain =3D ms->numa_state->num_nodes + number_nvgpus_nodes; + uint32_t maxdomains[] =3D { + cpu_to_be32(4), + cpu_to_be32(maxdomain), + cpu_to_be32(maxdomain), + cpu_to_be32(maxdomain), + cpu_to_be32(maxdomain) + }; + + _FDT(fdt_setprop(fdt, rtas, "ibm,associativity-reference-points", + refpoints, nr_refpoints * sizeof(refpoints[0]))); + + _FDT(fdt_setprop(fdt, rtas, "ibm,max-associativity-domains", + maxdomains, sizeof(maxdomains))); + + spapr_numa_FORM2_write_rtas_tables(spapr, fdt, rtas); +} + static void spapr_numa_FORM1_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rtas) { @@ -379,6 +499,11 @@ static void spapr_numa_FORM1_write_rtas_dt(SpaprMachin= eState *spapr, */ void spapr_numa_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rta= s) { + if (spapr_ovec_test(spapr->ov5_cas, OV5_FORM2_AFFINITY)) { + spapr_numa_FORM2_write_rtas_dt(spapr, fdt, rtas); + return; + } + spapr_numa_FORM1_write_rtas_dt(spapr, fdt, rtas); } =20 diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 637652ad16..21b1cf9ebf 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -145,6 +145,7 @@ struct SpaprMachineClass { hwaddr rma_limit; /* clamp the RMA to this size */ bool pre_5_1_assoc_refpoints; bool pre_5_2_numa_associativity; + bool pre_6_2_numa_affinity; =20 bool (*phb_placement)(SpaprMachineState *spapr, uint32_t index, uint64_t *buid, hwaddr *pio, diff --git a/include/hw/ppc/spapr_ovec.h b/include/hw/ppc/spapr_ovec.h index 48b716a060..c3e8b98e7e 100644 --- a/include/hw/ppc/spapr_ovec.h +++ b/include/hw/ppc/spapr_ovec.h @@ -49,6 +49,7 @@ typedef struct SpaprOptionVector SpaprOptionVector; /* option vector 5 */ #define OV5_DRCONF_MEMORY OV_BIT(2, 2) #define OV5_FORM1_AFFINITY OV_BIT(5, 0) +#define OV5_FORM2_AFFINITY OV_BIT(5, 2) #define OV5_HP_EVT OV_BIT(6, 5) #define OV5_HPT_RESIZE OV_BIT(6, 7) #define OV5_DRMEM_V2 OV_BIT(22, 0) --=20 2.31.1 From nobody Thu May 2 15:12:33 2024 Delivered-To: importer@patchew.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; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1630056482811712.2647118484234; Fri, 27 Aug 2021 02:28:02 -0700 (PDT) Received: from localhost ([::1]:53682 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJY9Z-0001W3-RP for importer@patchew.org; Fri, 27 Aug 2021 05:28:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45468) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJY6w-0004LT-2e; Fri, 27 Aug 2021 05:25:19 -0400 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]:36669) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mJY6t-000285-Oi; Fri, 27 Aug 2021 05:25:17 -0400 Received: by mail-vs1-xe34.google.com with SMTP id f6so1493996vsr.3; Fri, 27 Aug 2021 02:25:14 -0700 (PDT) Received: from rekt.COMFAST ([177.197.96.186]) by smtp.gmail.com with ESMTPSA id d17sm629180vsj.9.2021.08.27.02.25.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Aug 2021 02:25:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/RBuURFl7IIP03Fau1N3HbRXBUulZQwHVMl3hHQ/KLU=; b=CqohY6KL1WE0llmV/WIpC4k+wN+zhLOmg1PyaCzmhrRQ3ZfiY1+YbB89FYJCieHW3a JR/kLWGH7wJ628KTWgW+QKXEDjOrv6Kl60vBQ5AaQyZ5vfCrbDbgwbeiniRA437tjpeP KRrsJ5KAfifXKNnbsvpglcMa7tJRU+V7XyJqW7bJ/H6dBLz4xnGyL8fbdJyleZYiO2QT NkYzkBK29UEiSPXl09m2HMOivVXdCvj9RnDC9E5tjIns4PhjH74FxJ9EE/1KuQyEFXQj ZDjU2VVNLgP4aoy4APKyO7nXOeOx+u+WkcsE/NRJXpUSxrLfKmVQpg2/tJFA6RPDBTh0 kgFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/RBuURFl7IIP03Fau1N3HbRXBUulZQwHVMl3hHQ/KLU=; b=TEO5Li+wnqLkJNmCYc0GxvqrzHFZe3OdR+/fykNhdNqkV9MX6b8AuCIOWjKmw6WH2n CedSjxLvorBDwMq2hoXVM+5CFNUl++ZlJEWtlTa/CWeU+6xXQn8I8fWM3b9QXrAsXXdg +jn8b7idLiGxr96cu6Uk8CbwiovV8DfW3UyVKo1GxjoZwaMSQ8fPWk3PqAzlVOf4tMJW yELfmj0Z5IqqS66cyNPUPlMXLGFS+yqKBL3P+8zt+qp98RNWKSvA9ibofAvOOYPPOHHr diJ1uZj3LXGg3Wc8RidVCjK5Q9uLFf3ITPXmFUjucMrYPQ6jWCDKdCmI3S5qNvLPhFBz JqXA== X-Gm-Message-State: AOAM531he6L8mxPfowuW1HOytpj1ZDMkUdn3wqoCXneKlFBrcAO9XeL5 i8+QN5E3dqHURyaJxhvB6Ws4LNDaMA0= X-Google-Smtp-Source: ABdhPJyuo1PceZmcqgOajBY9YRBbf5A3Bi9RZPG9lsLXxdZ7n0ksJ1e0S+3cctcuK0GtNuOTW80drg== X-Received: by 2002:a67:ee46:: with SMTP id g6mr5852765vsp.6.1630056314095; Fri, 27 Aug 2021 02:25:14 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Subject: [PATCH v4 4/5] spapr: simplify spapr_numa_associativity_init params Date: Fri, 27 Aug 2021 06:24:54 -0300 Message-Id: <20210827092455.125411-5-danielhb413@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210827092455.125411-1-danielhb413@gmail.com> References: <20210827092455.125411-1-danielhb413@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::e34; envelope-from=danielhb413@gmail.com; helo=mail-vs1-xe34.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Daniel Henrique Barboza , qemu-ppc@nongnu.org, groug@kaod.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1630056483316100001 Content-Type: text/plain; charset="utf-8" When spapr_numa_associativity_init() was introduced it was being called from spapr_machine_init(), where we have pointers to a SpaprMachineState and a MachineState. Having both being passed as params spared us from calling a macro to get the MachineState. Previous patches moved the function away from spapr_machine_init(), and the new locations doesn't have a pointer to MachineState ready. This resulted in MACHINE(spapr) macro calls as the second parameter in both callers. Simplify the function by folding the 'MACHINE(spapr)' macro into the function body, which can now receive only a pointer to SpaprMachineState. Signed-off-by: Daniel Henrique Barboza --- hw/ppc/spapr.c | 2 +- hw/ppc/spapr_hcall.c | 2 +- hw/ppc/spapr_numa.c | 4 ++-- include/hw/ppc/spapr_numa.h | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index a3eb33764d..63c4876415 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1800,7 +1800,7 @@ static int spapr_post_load(void *opaque, int version_= id) * initialized and hotplug operations won't fail in both before * and after CAS migration cases. */ - spapr_numa_associativity_init(spapr, MACHINE(spapr)); + spapr_numa_associativity_init(spapr); =20 return err; } diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 1cc88716c1..a721d3edce 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1199,7 +1199,7 @@ target_ulong do_client_architecture_support(PowerPCCP= U *cpu, spapr_ovec_cleanup(ov1_guest); =20 /* Init numa_assoc_array */ - spapr_numa_associativity_init(spapr, MACHINE(spapr)); + spapr_numa_associativity_init(spapr); =20 /* * Ensure the guest asks for an interrupt mode we support; diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c index 0a5fa8101e..2f261be9fd 100644 --- a/hw/ppc/spapr_numa.c +++ b/hw/ppc/spapr_numa.c @@ -181,9 +181,9 @@ static void spapr_numa_FORM1_affinity_init(SpaprMachine= State *spapr, spapr_numa_define_associativity_domains(spapr); } =20 -void spapr_numa_associativity_init(SpaprMachineState *spapr, - MachineState *machine) +void spapr_numa_associativity_init(SpaprMachineState *spapr) { + MachineState *machine =3D MACHINE(spapr); SpaprMachineClass *smc =3D SPAPR_MACHINE_GET_CLASS(spapr); int nb_numa_nodes =3D machine->numa_state->num_nodes; int i, j, max_nodes_with_gpus; diff --git a/include/hw/ppc/spapr_numa.h b/include/hw/ppc/spapr_numa.h index 6f9f02d3de..adaec8e163 100644 --- a/include/hw/ppc/spapr_numa.h +++ b/include/hw/ppc/spapr_numa.h @@ -22,8 +22,7 @@ * function. spapr_machine_init() is the only caller for it, and * it has both pointers resolved already. */ -void spapr_numa_associativity_init(SpaprMachineState *spapr, - MachineState *machine); +void spapr_numa_associativity_init(SpaprMachineState *spapr); void spapr_numa_write_rtas_dt(SpaprMachineState *spapr, void *fdt, int rta= s); void spapr_numa_write_associativity_dt(SpaprMachineState *spapr, void *fdt, int offset, int nodeid); --=20 2.31.1 From nobody Thu May 2 15:12:33 2024 Delivered-To: importer@patchew.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; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163005670888693.37358964252633; Fri, 27 Aug 2021 02:31:48 -0700 (PDT) Received: from localhost ([::1]:59818 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJYDD-0005z1-GS for importer@patchew.org; Fri, 27 Aug 2021 05:31:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45480) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJY6y-0004MS-Ig; Fri, 27 Aug 2021 05:25:21 -0400 Received: from mail-ua1-x935.google.com ([2607:f8b0:4864:20::935]:38674) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mJY6v-0002AI-Dv; Fri, 27 Aug 2021 05:25:20 -0400 Received: by mail-ua1-x935.google.com with SMTP id 90so3079874uax.5; Fri, 27 Aug 2021 02:25:16 -0700 (PDT) Received: from rekt.COMFAST ([177.197.96.186]) by smtp.gmail.com with ESMTPSA id d17sm629180vsj.9.2021.08.27.02.25.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Aug 2021 02:25:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3MDL+qlgirAEmr7expMfciOlo2SN4lrheQl/oUKYbZ4=; b=fNTtaEDsXiJcZnNwpu3DVB4w089sxFp5x/xTP/CvpftEdmSL3E5KzAUP7oJurKmvLo g8AhvYUmUtn5LEDRL7MdmrFtInR2BlFh+5T0gaTVk7sN9FAy93B0AT+JCheOs5Klgt/r PlykWHBEzD/mzC7+HjvgRKCIVadzW7QWC2GOHATE3RR4laG3WTN5BJ05uIdd7PV2ompR 3U8+os2SYWKGd3vISUCZpvBT2K8J5vBPN0FGR9aVV3khM9CU8wnLvc8CIpfae5kCV+8V b8vE+IHTAaqrPY/Pognri//GyYBYkpanU4t8GgI75f+bjfXIX0TFiAi94KQw4DmSnOip gwKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3MDL+qlgirAEmr7expMfciOlo2SN4lrheQl/oUKYbZ4=; b=Gp8wScxQkByZUKmLnxyFWzQHJ/UQtGZ1PSescQPbtNttDYZTD/kPXQQhy17L8QKzek IdOZF7A+cniyA3Z+rT4DdQ1YfD1zqsA//8KOFcOnoLWZbddLet4KcYCakQb4l4M1fCTw SDSvqzMEYhhKc4vBUp8SP17HHNqU+FKVvG4nsd3Fxcx1KbezFLEW3ol6OsupggeQCdiP yvRcmFfjrR97aDsxr0vLY4+hTaqxq5CarjTZPWKy9iwb6C40RlfunItUfG6QDvR+Fird SYIZYbwma1kqaA0bGP/gW4F0DU1+bYuntUkEcqDg5nC/PLoZ/QEyHUU+dBBHRlA7qmRh IRPw== X-Gm-Message-State: AOAM5335TytklIwAJX3KcvBUTyEOEaWnZ+2t5we9LIFYjxeMBK3lyIDW IWYrU97eV784FQQreGoZ24LtwBnHwlw= X-Google-Smtp-Source: ABdhPJyPOWo/0R0VRHWQMgql7OY2AkPbut58BINHFIzN6RR4wy0Ye0GYXYbUPCbPIsTWGJeR/hVf3A== X-Received: by 2002:ab0:2517:: with SMTP id j23mr5855061uan.18.1630056316086; Fri, 27 Aug 2021 02:25:16 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Subject: [PATCH v4 5/5] spapr: move memory/cpu less check to spapr_numa_FORM1_affinity_init() Date: Fri, 27 Aug 2021 06:24:55 -0300 Message-Id: <20210827092455.125411-6-danielhb413@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210827092455.125411-1-danielhb413@gmail.com> References: <20210827092455.125411-1-danielhb413@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=2607:f8b0:4864:20::935; envelope-from=danielhb413@gmail.com; helo=mail-ua1-x935.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Daniel Henrique Barboza , qemu-ppc@nongnu.org, groug@kaod.org, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1630056769979100001 Content-Type: text/plain; charset="utf-8" FORM2 NUMA affinity is prepared to deal with memory/cpu less NUMA nodes. This is used by the DAX KMEM driver to locate a PAPR SCM device that has a different latency than the original NUMA node from the regular memory. Move this verification to FORM1 affinity code. Signed-off-by: Daniel Henrique Barboza --- hw/ppc/spapr.c | 33 --------------------------------- hw/ppc/spapr_numa.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 63c4876415..4105a2504f 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2794,39 +2794,6 @@ static void spapr_machine_init(MachineState *machine) /* init CPUs */ spapr_init_cpus(spapr); =20 - /* - * check we don't have a memory-less/cpu-less NUMA node - * Firmware relies on the existing memory/cpu topology to provide the - * NUMA topology to the kernel. - * And the linux kernel needs to know the NUMA topology at start - * to be able to hotplug CPUs later. - */ - if (machine->numa_state->num_nodes) { - for (i =3D 0; i < machine->numa_state->num_nodes; ++i) { - /* check for memory-less node */ - if (machine->numa_state->nodes[i].node_mem =3D=3D 0) { - CPUState *cs; - int found =3D 0; - /* check for cpu-less node */ - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - if (cpu->node_id =3D=3D i) { - found =3D 1; - break; - } - } - /* memory-less and cpu-less node */ - if (!found) { - error_report( - "Memory-less/cpu-less nodes are not supported (node= %d)", - i); - exit(1); - } - } - } - - } - spapr->gpu_numa_id =3D spapr_numa_initial_nvgpu_numa_id(machine); =20 if ((!kvm_enabled() || kvmppc_has_cap_mmu_radix()) && diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c index 2f261be9fd..fddac5fcce 100644 --- a/hw/ppc/spapr_numa.c +++ b/hw/ppc/spapr_numa.c @@ -162,6 +162,39 @@ static void spapr_numa_FORM1_affinity_init(SpaprMachin= eState *spapr, MachineState *machine) { bool using_legacy_numa =3D spapr_machine_using_legacy_numa(spapr); + int i; + + /* + * check we don't have a memory-less/cpu-less NUMA node + * Firmware relies on the existing memory/cpu topology to provide the + * NUMA topology to the kernel. + * And the linux kernel needs to know the NUMA topology at start + * to be able to hotplug CPUs later. + */ + if (machine->numa_state->num_nodes) { + for (i =3D 0; i < machine->numa_state->num_nodes; ++i) { + /* check for memory-less node */ + if (machine->numa_state->nodes[i].node_mem =3D=3D 0) { + CPUState *cs; + int found =3D 0; + /* check for cpu-less node */ + CPU_FOREACH(cs) { + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + if (cpu->node_id =3D=3D i) { + found =3D 1; + break; + } + } + /* memory-less and cpu-less node */ + if (!found) { + error_report( + "Memory-less/cpu-less nodes are not supported (node= %d)", + i); + exit(1); + } + } + } + } =20 /* * Legacy NUMA guests (pseries-5.1 and older, or guests with only --=20 2.31.1