From nobody Wed May 1 15:26:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1685496237; cv=none; d=zohomail.com; s=zohoarc; b=IVvrSncW8QOVzGgaGozQlkywsJa3wMwBvdAqry4FM1q5ga0zIyY2ujOwEwYYHgIXKk6eF1Iob6vp+4tzDP/i6hFFpxY3ehJMIjJ37crjQvhvVAxyoECXA/Mv+GFwFW8IywORpKq0UG3J2AYY8iH5W4fQauM80yRoQ5NnyZZhcTA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1685496237; 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=0+X3vydu0Uw+LBNi8pjP23nCfoQFIcfwkLB/u/UJRyw=; b=ipWEoxLuiJHTG1v5gWW67wqnhFdsn2KyT7prll6nVsWbcgSq97L88bnXlRcQ9g2CXV1U8033P6ISG9/M72RzWuNaCYnCzupIQD1uXScXsZjAbAxpu+QIRoro/+u2wrEo/uiOKAWJCwbO5Zp+E5fj3kaVrNWKLEJlmhMvK9ljiAI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1685496237177998.7233719849565; Tue, 30 May 2023 18:23:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q4AYm-0004Sc-Tt; Tue, 30 May 2023 21:23:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q4AYl-0004Ko-08; Tue, 30 May 2023 21:23:31 -0400 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q4AYh-0005FR-Sw; Tue, 30 May 2023 21:23:30 -0400 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-19f62a4924eso2178482fac.1; Tue, 30 May 2023 18:23:27 -0700 (PDT) Received: from wheely.local0.net ([203.221.142.9]) by smtp.gmail.com with ESMTPSA id 9-20020a170902c10900b00186a2274382sm10928840pli.76.2023.05.30.18.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 18:23:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685496206; x=1688088206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0+X3vydu0Uw+LBNi8pjP23nCfoQFIcfwkLB/u/UJRyw=; b=dhNu2CQPUdWLh2ZWARijZNE5Lw8cRKNwst1qapcRUeh6N4QTL58IkmoEPhaiQ0vzl9 sBEOGwheSOxJrZ0xkYx+j5Zjt8AiWiKQkEzcAv+i+8KQAHMWueR7TajxTljjEvY/5O59 TtOtNHct2MUt59UdKGB358RkElxR/Yyz+Pzp4+4WzWBw7I2+bH1vcvFqQsTRn60kWTxr OxbnLfPXmPxoBlHy7LOnw4n2Nu1rjvqHB71bQi6GWdcgB4WC5nTG2/wGJn0wkziHDbn5 1ORIf7ruSqVPH1gcPrY40p9+wVfpW7w+TlZuNY9fGX7N0PTcaDOt3aPXmnYXmRXrmBIT UJNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685496206; x=1688088206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0+X3vydu0Uw+LBNi8pjP23nCfoQFIcfwkLB/u/UJRyw=; b=b6HKlRGoDb3Gpd1ef13IbNFQbLM88OTG/kMPV0eeScSa6/ixr2FtoDBKEJxW+4z4Zm EWSsTWZlacVjqTpCechJIyPl903HAVQ1A+Ao1WSLA7qtrJ0YtoWqmouyp0MFsF6Olv4J 52n5zXhOZXP6aAqOUOcMOFmUhANOuSvvdkds8TzRivTBMe1Id9162EZE7Tg6fBP6SbFp OXKm7/DmAqSYEbhHi72dYMywVYeaPzXtf7d+cs8TmR/4Y+0FuDRN6V1MYq7W1LXfDQw4 09CqvWyfTlhyFUGkLAvYl8RHrv8vUlAwmZr5dZB1wtBYVVmDAtgMFn50u/bnioHoNZZ2 AUKQ== X-Gm-Message-State: AC+VfDy1KWE79xxxrmIneXuc3gpMtxGF6KlijIHVI1elRzQaAZUrO523 5gLWsptfN6ZgIdh0sS+5o1Q6rA8BRqM= X-Google-Smtp-Source: ACHHUZ5oIovGmsmgVsMImxnN3l1DmRMAJijNI8/BYNvraefGaZFCpz8RlwGyb8K2QYusw72MFjYtxQ== X-Received: by 2002:a05:6808:4da:b0:38e:9203:44eb with SMTP id a26-20020a05680804da00b0038e920344ebmr2135541oie.28.1685496205903; Tue, 30 May 2023 18:23:25 -0700 (PDT) From: Nicholas Piggin To: qemu-ppc@nongnu.org Cc: Nicholas Piggin , qemu-devel@nongnu.org, Daniel Henrique Barboza Subject: [RFC PATCH 1/5] target/ppc: gdbstub init spr gdb_id for all CPUs Date: Wed, 31 May 2023 11:23:09 +1000 Message-Id: <20230531012313.19891-2-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531012313.19891-1-npiggin@gmail.com> References: <20230531012313.19891-1-npiggin@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=2001:4860:4864:20::35; envelope-from=npiggin@gmail.com; helo=mail-oa1-x35.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1685496239404100001 Content-Type: text/plain; charset="utf-8" Make sure each CPU gets its state set up for gdb, not just the ones before PowerPCCPUClass has had its gdb state set up. Signed-off-by: Nicholas Piggin Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/ppc/gdbstub.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index 63c9abe4f1..ca39efdc35 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -327,6 +327,25 @@ void ppc_gdb_gen_spr_xml(PowerPCCPU *cpu) unsigned int num_regs =3D 0; int i; =20 + for (i =3D 0; i < ARRAY_SIZE(env->spr_cb); i++) { + ppc_spr_t *spr =3D &env->spr_cb[i]; + + if (!spr->name) { + continue; + } + + /* + * GDB identifies registers based on the order they are + * presented in the XML. These ids will not match QEMU's + * representation (which follows the PowerISA). + * + * Store the position of the current register description so + * we can make the correspondence later. + */ + spr->gdb_id =3D num_regs; + num_regs++; + } + if (pcc->gdb_spr_xml) { return; } @@ -348,17 +367,6 @@ void ppc_gdb_gen_spr_xml(PowerPCCPU *cpu) =20 g_string_append_printf(xml, " bitsize=3D\"%d\"", TARGET_LONG_BITS); g_string_append(xml, " group=3D\"spr\"/>"); - - /* - * GDB identifies registers based on the order they are - * presented in the XML. These ids will not match QEMU's - * representation (which follows the PowerISA). - * - * Store the position of the current register description so - * we can make the correspondence later. - */ - spr->gdb_id =3D num_regs; - num_regs++; } =20 g_string_append(xml, ""); --=20 2.40.1 From nobody Wed May 1 15:26:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1685496278; cv=none; d=zohomail.com; s=zohoarc; b=KtSikHtkDF82rzcFQFz9yuP7X5jWvg9Vx2oYbYKUwfEQiss609B+TY7zlfMt0q+gZgsqUqwteMuxoXthLJ8jYXKr4o7Uj/B+696vmFAAc3GGHwmQf9Y3bLSC36iB1F2YR82vYoNPTcz7ZE9uLKPPTNt9d3k44K8+m+Ey7BtLnDY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1685496278; 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=+zDOlRWUdwkqrj6xE/PQNHSscfk1SuhL8JkNfMoqHPQ=; b=j0q2eLgnwFf19Pgl7wM6wgefOnzb+ate/PxI55YhGcfqvyyYmI/KmLHFIQp/3Z6Zdw2VoiGnm3sNma2SZfuTpDZrFyNZQtSJMNSCmcdaOBcan7fiTrNpseWNtAj77NouN/ctMrFGJEBIwSbYdshfg4cT7A0sg13ea1M+y6dq3R4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1685496278368928.9989816961917; Tue, 30 May 2023 18:24:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q4AYo-0004Uv-Is; Tue, 30 May 2023 21:23:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q4AYm-0004S0-Oh; Tue, 30 May 2023 21:23:32 -0400 Received: from mail-io1-xd2b.google.com ([2607:f8b0:4864:20::d2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q4AYl-0005Fk-3P; Tue, 30 May 2023 21:23:32 -0400 Received: by mail-io1-xd2b.google.com with SMTP id ca18e2360f4ac-76c5db6a5cfso358985839f.2; Tue, 30 May 2023 18:23:30 -0700 (PDT) Received: from wheely.local0.net ([203.221.142.9]) by smtp.gmail.com with ESMTPSA id 9-20020a170902c10900b00186a2274382sm10928840pli.76.2023.05.30.18.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 18:23:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685496209; x=1688088209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+zDOlRWUdwkqrj6xE/PQNHSscfk1SuhL8JkNfMoqHPQ=; b=AD1fNrAyNYabdEGqKTPJ4k4N9hOKKbedIddLqj1Iib1yYqMqLwptN6ERoG+YA4NkGF 1fmdaf/GPzoeRClEiunT6SgGtWzXcgfX9/LleNy//rLCbYsZrktdeSkVJMYDOBLhQ+Nf M9/nur05NUAHxFyAyGzE2f/awyI+REBJYKZdR9LgLw/KlLkp4YMyDQJIS6XPEtU2aduy HQgX6qMJ6mchfUCzuoWqwFu/tewjaiKg3D9kC8GzLNrfBFO3U/KXSU3YBX9A/y3+lzZ9 uGmDNMBy67yBdKOMnh1axZimG61Ko0xmz31ZbWKQ76rjGwXWVnJBLTDHRTlhzau+7L// jGSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685496209; x=1688088209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+zDOlRWUdwkqrj6xE/PQNHSscfk1SuhL8JkNfMoqHPQ=; b=MirzCkP4CMlSvpdcIWaP8i3ALLQXaRpW+lHrn3p9sFga1xdKMp4Yh1LzZfnqZ621u/ 93g0Qm9Ix1xTwzTgdoE8G2w06q1ryoyomMKT0KNxFyvKgfodZ/A00DtrYFEbw2/Wwmig l7R512iwrsXxXeFuIfBqtnVyJqGwt41vw/Zj2q91txksOnU+7pa+9x9+PO0VyC5OzM2q 1WtWke2l62OO2eUp3yw4UapeY7XSlYgfRmlCtNLV5LcwbXDCZJLEbvgJazMGrzxEHS7n 9hmFUWlysWUUpidxwEb4Z5pxfoOXMXHiFWEXhFEwGC/UQDI6mi1H+JTjyW+kl4SXBklM NPfA== X-Gm-Message-State: AC+VfDweCZwkJTtCTtu+VOMs+uJoTZZItaqo6N6P2imuUKpFgx5pxZZg VtXB9Vu3cfo/uMPUqYxwc0+td0duiBI= X-Google-Smtp-Source: ACHHUZ7GkcyqypQao3h351l2qDqg7xWs+YVMB075+M3ee96nltG7yP2hXb7b1lgr5umvX8yoyPio0A== X-Received: by 2002:a92:d44d:0:b0:33a:ff76:33b8 with SMTP id r13-20020a92d44d000000b0033aff7633b8mr941039ilm.9.1685496208986; Tue, 30 May 2023 18:23:28 -0700 (PDT) From: Nicholas Piggin To: qemu-ppc@nongnu.org Cc: Nicholas Piggin , qemu-devel@nongnu.org, Daniel Henrique Barboza Subject: [RFC PATCH 2/5] target/ppc: Add initial flags and helpers for SMT support Date: Wed, 31 May 2023 11:23:10 +1000 Message-Id: <20230531012313.19891-3-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531012313.19891-1-npiggin@gmail.com> References: <20230531012313.19891-1-npiggin@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::d2b; envelope-from=npiggin@gmail.com; helo=mail-io1-xd2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1685496279742100001 Content-Type: text/plain; charset="utf-8" SMT TCG emulation needs to be able to iterate over siblings in a core, and needs to serialise core access to shared SPRs and state. Signed-off-by: Nicholas Piggin --- target/ppc/cpu.h | 9 +++++++++ target/ppc/cpu_init.c | 5 +++++ target/ppc/translate.c | 20 ++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 1f23b81e90..b594408a8d 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -672,6 +672,8 @@ enum { POWERPC_FLAG_TM =3D 0x00100000, /* Has SCV (ISA 3.00) = */ POWERPC_FLAG_SCV =3D 0x00200000, + /* Has >1 thread per core = */ + POWERPC_FLAG_SMT =3D 0x00400000, }; =20 /* @@ -1266,6 +1268,13 @@ struct CPUArchState { uint64_t pmu_base_time; }; =20 +#define _CORE_ID(cs) \ + (POWERPC_CPU(cs)->env.spr_cb[SPR_PIR].default_value & ~(cs->nr_threads= - 1)) + +#define THREAD_SIBLING_FOREACH(cs, cs_sibling) \ + CPU_FOREACH(cs_sibling) \ + if (_CORE_ID(cs) =3D=3D _CORE_ID(cs_sibling)) + #define SET_FIT_PERIOD(a_, b_, c_, d_) \ do { \ env->fit_period[0] =3D (a_); \ diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index aa364f36f6..5035f6dada 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -6754,6 +6754,7 @@ static void ppc_cpu_realize(DeviceState *dev, Error *= *errp) { CPUState *cs =3D CPU(dev); PowerPCCPU *cpu =3D POWERPC_CPU(dev); + CPUPPCState *env =3D &cpu->env; PowerPCCPUClass *pcc =3D POWERPC_CPU_GET_CLASS(cpu); Error *local_err =3D NULL; =20 @@ -6785,6 +6786,10 @@ static void ppc_cpu_realize(DeviceState *dev, Error = **errp) =20 pcc->parent_realize(dev, errp); =20 + if (env_cpu(env)->nr_threads > 1) { + env->flags |=3D POWERPC_FLAG_SMT; + } + return; =20 unrealize: diff --git a/target/ppc/translate.c b/target/ppc/translate.c index b6bab4c234..72270c2163 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -227,6 +227,26 @@ struct opc_handler_t { void (*handler)(DisasContext *ctx); }; =20 +static inline bool gen_serialize(DisasContext *ctx) +{ + if (tb_cflags(ctx->base.tb) & CF_PARALLEL) { + /* Restart with exclusive lock. */ + gen_helper_exit_atomic(cpu_env); + ctx->base.is_jmp =3D DISAS_NORETURN; + return false; + } + return true; +} + +static inline bool gen_serialize_core(DisasContext *ctx) +{ + if (ctx->flags & POWERPC_FLAG_SMT) { + return gen_serialize(ctx); + } + + return true; +} + /* SPR load/store helpers */ static inline void gen_load_spr(TCGv t, int reg) { --=20 2.40.1 From nobody Wed May 1 15:26:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1685496282; cv=none; d=zohomail.com; s=zohoarc; b=HKPzwxm3uoijeKSJpoeI4yDD2sW7F3QleCEk3kJVXB2P2oGs7XZUCWOEqaHIXMIHq84zMl6sl2BcvhHg6JWqA/WVmmWFZ/1aLvF1/lr0VsBNqVAaaynHm8n0APxjGR+tOfoBHeGE4vyF5QcLuno1uLL7cEAM87NGpJOZNkshowI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1685496282; 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=7THcHMeqIyfPDBU+S2ZRpKhWMc/+eotNl8S7aVC4rm4=; b=ZWpaWNZWuuLbWuRkICFkbbuRx9OC9Qc8L9ouFD7EwdUCPFwlLzc6vVZltiTUoiWnAPXCeSKdc/PLK8s1NVkys/ODP5MCmRs4n6vKF6TmJobOqXVYcu/jzS2PYqMubYDS4cdq0Eouf7IS6n/1HmvFmN6PJ1O8EdW5jMGEcpEKymk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1685496282829448.7889626908719; Tue, 30 May 2023 18:24:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q4AYs-0004X4-8H; Tue, 30 May 2023 21:23:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q4AYq-0004Vr-BR; Tue, 30 May 2023 21:23:36 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q4AYo-0005GL-Iz; Tue, 30 May 2023 21:23:35 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1b011cffef2so45547075ad.3; Tue, 30 May 2023 18:23:33 -0700 (PDT) Received: from wheely.local0.net ([203.221.142.9]) by smtp.gmail.com with ESMTPSA id 9-20020a170902c10900b00186a2274382sm10928840pli.76.2023.05.30.18.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 18:23:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685496212; x=1688088212; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7THcHMeqIyfPDBU+S2ZRpKhWMc/+eotNl8S7aVC4rm4=; b=ZslYyHF33StMioJuRIC07q8xcLeoD5lw1ixs2bCQFj2ptub8T2g+87eujDG1M43t0R SH4Uqx/KOJYarUY27VYO1PZrC3bvEf5WufiNN2LashOQ3Mm0xBjI3ANtW6DyX2EvmUXv +0ZYpeBSdSRBKSQJdSwb/wj2sl8BHhR5r0EVkeI8n/qwb4olfSrVmz/AdhrUxU/y6vGT mPHkssGF4kkV9zz9E2l+VBbnJrzPEjcIh3pYhXig1oTMY2z8EbW774uSML73DvZW67XU 4YnipRdYOGA2qDOjZxBU8n29F/75VBXcxbDA0dfCOYyV7NKwKXBjQtn1hgtXEhY7II7a Lx8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685496212; x=1688088212; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7THcHMeqIyfPDBU+S2ZRpKhWMc/+eotNl8S7aVC4rm4=; b=ibr6B3B2BLks9pNYt6xbhKant6s3KrHyE5nz71BIv/g5JfAgXkBX8cFtb0AmWmhJb4 /ACyE8Zrhk8dBe3iCN16QPmXaXMGR6Dpc8/Pv90g5JIBVBXZjzTQxSARMNNQTlkZ2qTj 0KFWV1QmPKDHDtZtQv0eXqNY24IWr6tP7EUzP9TQM8eSaw/I08XO990sWhVXCio5jkya 6kthbzlLRreTffFLQJcL0huRfjWnRjd9DpB3nKT3mWZjg+vi5GG0CHCFHLiPAJq8Vfgi cJjgtYldPMudUblfNdW0/CFckEDweIdllJ92h8jsAOC4UTwbkgO1zB1Ku+VqDCRRAd5K hgAQ== X-Gm-Message-State: AC+VfDwBMksSF8W13IIxnGj18GFFLymlamQE85RMkLHMUa/bAxxmoxVE kOT/evgyjCU+UGLbHj/bLg8SU5EnVKQ= X-Google-Smtp-Source: ACHHUZ4R2l0HMqF1lGJOzt9qUolOColSV0oHUROpvBLFihSUzIzYbtpGEu97Ogyyi7Hjd2G0iyz6FA== X-Received: by 2002:a17:903:22c2:b0:1b0:5a41:db40 with SMTP id y2-20020a17090322c200b001b05a41db40mr4579380plg.50.1685496212074; Tue, 30 May 2023 18:23:32 -0700 (PDT) From: Nicholas Piggin To: qemu-ppc@nongnu.org Cc: Nicholas Piggin , qemu-devel@nongnu.org, Daniel Henrique Barboza Subject: [RFC PATCH 3/5] target/ppc: Add support for SMT CTRL register Date: Wed, 31 May 2023 11:23:11 +1000 Message-Id: <20230531012313.19891-4-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531012313.19891-1-npiggin@gmail.com> References: <20230531012313.19891-1-npiggin@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::62a; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1685496283774100006 Content-Type: text/plain; charset="utf-8" A relatively simple case to begin with, CTRL is a SMT shared register where reads and writes need to synchronise against state changes by other threads in the core. Atomic serialisation operations are used to achieve this. Signed-off-by: Nicholas Piggin --- target/ppc/helper.h | 2 ++ target/ppc/misc_helper.c | 33 +++++++++++++++++++++++++++++++++ target/ppc/translate.c | 18 +++++++++++++++++- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/target/ppc/helper.h b/target/ppc/helper.h index 38efbc351c..fda40b8a60 100644 --- a/target/ppc/helper.h +++ b/target/ppc/helper.h @@ -704,6 +704,8 @@ DEF_HELPER_3(store_dcr, void, env, tl, tl) =20 DEF_HELPER_2(load_dump_spr, void, env, i32) DEF_HELPER_2(store_dump_spr, void, env, i32) +DEF_HELPER_3(spr_write_CTRL, void, env, i32, tl) + DEF_HELPER_4(fscr_facility_check, void, env, i32, i32, i32) DEF_HELPER_4(msr_facility_check, void, env, i32, i32, i32) DEF_HELPER_FLAGS_1(load_tbl, TCG_CALL_NO_RWG, tl, env) diff --git a/target/ppc/misc_helper.c b/target/ppc/misc_helper.c index 40ddc5c08c..ffe54a4310 100644 --- a/target/ppc/misc_helper.c +++ b/target/ppc/misc_helper.c @@ -43,6 +43,39 @@ void helper_store_dump_spr(CPUPPCState *env, uint32_t sp= rn) env->spr[sprn]); } =20 +void helper_spr_write_CTRL(CPUPPCState *env, uint32_t sprn, + target_ulong val) +{ + CPUState *cs =3D env_cpu(env); + CPUState *ccs; + uint32_t nr_threads =3D cs->nr_threads; + uint32_t core_id =3D env->spr[SPR_PIR] & ~(nr_threads - 1); + uint32_t run =3D val & 1; + uint32_t ts, ts_mask; + + assert(sprn =3D=3D SPR_CTRL); + assert(core_id =3D=3D env->spr[SPR_PIR] - env->spr[SPR_TIR]); + + env->spr[sprn] &=3D ~1U; + env->spr[sprn] |=3D run; + + ts_mask =3D ~(1U << (8 + env->spr[SPR_TIR])); + ts =3D run << (8 + env->spr[SPR_TIR]); + + CPU_FOREACH(ccs) { + CPUPPCState *cenv =3D &POWERPC_CPU(ccs)->env; + uint32_t ccore_id =3D cenv->spr[SPR_PIR] & ~(nr_threads - 1); + + assert(ccore_id =3D=3D cenv->spr[SPR_PIR] - cenv->spr[SPR_TIR]); + + if (ccore_id =3D=3D core_id) { + cenv->spr[sprn] &=3D ts_mask; + cenv->spr[sprn] |=3D ts; + } + } +} + + #ifdef TARGET_PPC64 static void raise_hv_fu_exception(CPUPPCState *env, uint32_t bit, const char *caller, uint32_t cause, diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 72270c2163..31821f92f5 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -443,7 +443,7 @@ void spr_write_generic32(DisasContext *ctx, int sprn, i= nt gprn) #endif } =20 -void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn) +static void spr_write_CTRL_ST(DisasContext *ctx, int sprn, int gprn) { /* This does not implement >1 thread */ TCGv t0 =3D tcg_temp_new(); @@ -452,6 +452,22 @@ void spr_write_CTRL(DisasContext *ctx, int sprn, int g= prn) tcg_gen_shli_tl(t1, t0, 8); /* Duplicate the bit in TS */ tcg_gen_or_tl(t1, t1, t0); gen_store_spr(sprn, t1); +} + +void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn) +{ + if (!(ctx->flags & POWERPC_FLAG_SMT)) { + spr_write_CTRL_ST(ctx, sprn, gprn); + goto out; + } + + if (!gen_serialize(ctx)) { + return; + } + + gen_helper_spr_write_CTRL(cpu_env, tcg_constant_i32(sprn), + cpu_gpr[gprn]); +out: spr_store_dump_spr(sprn); =20 /* --=20 2.40.1 From nobody Wed May 1 15:26:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1685496272; cv=none; d=zohomail.com; s=zohoarc; b=Wzuhx/TOMPC9YyNXXQtlYxHYWHLfMUidKqxpI+PH5/+qq2hGbgZTLaqG0AvI1YQ3RZTyOeH5WEoPKvs+HyOaTCuEb/yvUIjboCBs9QUPbEmvNFT1niE/KbWlcOSSGln+dUw9pHtDljyCIlHqQhniYCjNPWE/bpoO+7npiW3g+2c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1685496272; 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=NNhHuSY/DQfWNHVO+TsUqgs7kbd9/63cyFch/lJ9/DY=; b=DTN4mBN5VHTwLbWg/3iV5tHUoTs3RxvY2sry5YySYDRxvP7lpV5F+Dvq6BmiRYUkU+/rgf4uCl0g2r1xq1YI8EYUfBFf9tur4f+VAKc6tWQKzCOXt4YWl1IVm/lqyEIclbXSmNT8dTWd09NR8pifTE9RZd+yBjP9UOvpJ9lVTTI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168549627290724.591583353689884; Tue, 30 May 2023 18:24:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q4AYu-0004gW-QJ; Tue, 30 May 2023 21:23:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q4AYt-0004bX-DE; Tue, 30 May 2023 21:23:39 -0400 Received: from mail-oi1-x22a.google.com ([2607:f8b0:4864:20::22a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q4AYr-0005GW-Cs; Tue, 30 May 2023 21:23:39 -0400 Received: by mail-oi1-x22a.google.com with SMTP id 5614622812f47-3980f2df1e7so3044737b6e.1; Tue, 30 May 2023 18:23:36 -0700 (PDT) Received: from wheely.local0.net ([203.221.142.9]) by smtp.gmail.com with ESMTPSA id 9-20020a170902c10900b00186a2274382sm10928840pli.76.2023.05.30.18.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 18:23:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685496215; x=1688088215; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NNhHuSY/DQfWNHVO+TsUqgs7kbd9/63cyFch/lJ9/DY=; b=GjZ/XYIsV5I9OQcjkBsk8HgpM/P5pZa25N/yDKAjuPtFhqPacSuK4aBSsymypzbwrc dy//FhdmgJ474UUpGSuC0KO1K4+bTnG9YiJbNztkn6Mg8YJBsmN2bhr6/aI+Ef+D7hTa uHE1yYUawIlwriLcDSjB/pFQNq6B5TshtQp1jQia/gztZojXt7Gcra6nmQ1vimVvYD58 MjsvG4m2u+pG14RJm9ON5NcrIrLvpMXUO0I2ExCETHAsP1gMo3nyMa0pvSLnfyEYiuRL E5rZzsgeURNUmUVr5nFM/1/C6mr0QlRG7jwNI66+nQEaglVWSXemBRdQzYGPN4Kv7gOy T9qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685496215; x=1688088215; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NNhHuSY/DQfWNHVO+TsUqgs7kbd9/63cyFch/lJ9/DY=; b=jlaDKgecfWgrjPnQhdrxykiydbXTODE3+qWL1d8M/SKlA6nTNTJu+L/5a+RxCr9SzH 8jaj06LCNE+fKlL/ZgvUajaKHnvrvrRYu9ooi+oKAyBKLc+ngOCYu6qQhIPe7ybf70qK ejKcOpSuB1ra/fiqfOn1EPIxjpYkQSsHwwGlBEEDI3hi5lGqnL7SH16J6jYCb21oCNW/ mlgkipvNSVhWfJK4hz9HKLRsZ+GMNfapB0oJM2iYJpaxY/hVKMiWv1SITHTMMonkR9e1 /JMJyUI/hf/bHWjdeMTeL/jYZ3DY1voq95kKQjvqakGYys5sToNb15hCAHGcL0FLw+nD RmKg== X-Gm-Message-State: AC+VfDyeTu6qUJk9Cd3tDYUihkkcjZ9vEzFqyVjpu6F/uPp9MDRmg0+s RxY2HW1fuVfJyJg9//FnQSO7yZSwFto= X-Google-Smtp-Source: ACHHUZ4WzLPy+r0Oj74F87vJ+F9B/lEuvTDsC0DlDG3AJBmbqpARjoV4NTEyNG5XrrFgB9BUBC2PPg== X-Received: by 2002:a05:6808:118e:b0:398:2cfa:85e7 with SMTP id j14-20020a056808118e00b003982cfa85e7mr3125973oil.11.1685496215408; Tue, 30 May 2023 18:23:35 -0700 (PDT) From: Nicholas Piggin To: qemu-ppc@nongnu.org Cc: Nicholas Piggin , qemu-devel@nongnu.org, Daniel Henrique Barboza Subject: [RFC PATCH 4/5] target/ppc: Add msgsnd/p and DPDES SMT support Date: Wed, 31 May 2023 11:23:12 +1000 Message-Id: <20230531012313.19891-5-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531012313.19891-1-npiggin@gmail.com> References: <20230531012313.19891-1-npiggin@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::22a; envelope-from=npiggin@gmail.com; helo=mail-oi1-x22a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1685496273707100003 Content-Type: text/plain; charset="utf-8" Doorbells in SMT need to coordinate msgsnd/msgclr and DPDES access from multiple threads that affect the same state. Signed-off-by: Nicholas Piggin --- hw/ppc/ppc.c | 6 ++ include/hw/ppc/ppc.h | 1 + target/ppc/cpu.h | 7 +- target/ppc/excp_helper.c | 86 +++++++++++++------ target/ppc/gdbstub.c | 2 +- target/ppc/helper.h | 2 +- target/ppc/misc_helper.c | 60 +++++++++++-- target/ppc/translate.c | 8 ++ .../ppc/translate/processor-ctrl-impl.c.inc | 2 +- 9 files changed, 140 insertions(+), 34 deletions(-) diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index 80b4706db2..e30853413b 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -1434,6 +1434,12 @@ int ppc_cpu_pir(PowerPCCPU *cpu) return env->spr_cb[SPR_PIR].default_value; } =20 +int ppc_cpu_tir(PowerPCCPU *cpu) +{ + CPUPPCState *env =3D &cpu->env; + return env->spr_cb[SPR_PIR].default_value; +} + PowerPCCPU *ppc_get_vcpu_by_pir(int pir) { CPUState *cs; diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h index 02af03ada2..e095c002dc 100644 --- a/include/hw/ppc/ppc.h +++ b/include/hw/ppc/ppc.h @@ -6,6 +6,7 @@ void ppc_set_irq(PowerPCCPU *cpu, int n_IRQ, int level); PowerPCCPU *ppc_get_vcpu_by_pir(int pir); int ppc_cpu_pir(PowerPCCPU *cpu); +int ppc_cpu_tir(PowerPCCPU *cpu); =20 /* PowerPC hardware exceptions management helpers */ typedef void (*clk_setup_cb)(void *opaque, uint32_t freq); diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index b594408a8d..b04b309c71 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1056,7 +1056,12 @@ FIELD(FPSCR, FI, FPSCR_FI, 1) =20 #define DBELL_TYPE_DBELL_SERVER (0x05 << DBELL_TYPE_SHIFT) =20 -#define DBELL_BRDCAST PPC_BIT(37) +/* XXX: make sure this does not break BookE */ +#define DBELL_BRDCAST_MASK PPC_BITMASK(37, 38) +#define DBELL_BRDCAST_SHIFT 25 +#define DBELL_BRDCAST_SUBPROC (0x1 << DBELL_BRDCAST_SHIFT) +#define DBELL_BRDCAST_CORE (0x2 << DBELL_BRDCAST_SHIFT) + #define DBELL_LPIDTAG_SHIFT 14 #define DBELL_LPIDTAG_MASK (0xfff << DBELL_LPIDTAG_SHIFT) #define DBELL_PIRTAG_MASK 0x3fff diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 4925996cf3..5fc2e17269 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -3085,7 +3085,7 @@ void helper_msgsnd(target_ulong rb) PowerPCCPU *cpu =3D POWERPC_CPU(cs); CPUPPCState *cenv =3D &cpu->env; =20 - if ((rb & DBELL_BRDCAST) || (cenv->spr[SPR_BOOKE_PIR] =3D=3D pir))= { + if ((rb & DBELL_BRDCAST_MASK) || (cenv->spr[SPR_BOOKE_PIR] =3D=3D = pir)) { ppc_set_irq(cpu, irq, 1); } } @@ -3104,6 +3104,16 @@ static bool dbell_type_server(target_ulong rb) return (rb & DBELL_TYPE_MASK) =3D=3D DBELL_TYPE_DBELL_SERVER; } =20 +static inline bool dbell_type_bcast_core(target_ulong rb) +{ + return (rb & DBELL_BRDCAST_MASK) =3D=3D DBELL_BRDCAST_CORE; +} + +static inline bool dbell_type_bcast_subproc(target_ulong rb) +{ + return (rb & DBELL_BRDCAST_MASK) =3D=3D DBELL_BRDCAST_SUBPROC; +} + void helper_book3s_msgclr(CPUPPCState *env, target_ulong rb) { if (!dbell_type_server(rb)) { @@ -3113,32 +3123,40 @@ void helper_book3s_msgclr(CPUPPCState *env, target_= ulong rb) ppc_set_irq(env_archcpu(env), PPC_INTERRUPT_HDOORBELL, 0); } =20 -static void book3s_msgsnd_common(int pir, int irq) +void helper_book3s_msgsnd(CPUPPCState *env, target_ulong rb) { - CPUState *cs; - - qemu_mutex_lock_iothread(); - CPU_FOREACH(cs) { - PowerPCCPU *cpu =3D POWERPC_CPU(cs); - CPUPPCState *cenv =3D &cpu->env; + int pir =3D rb & DBELL_PROCIDTAG_MASK; + int brdcast =3D rb & DBELL_BRDCAST_MASK; + CPUState *cs, *ccs; + PowerPCCPU *cpu; =20 - /* TODO: broadcast message to all threads of the same processor */ - if (cenv->spr_cb[SPR_PIR].default_value =3D=3D pir) { - ppc_set_irq(cpu, irq, 1); - } + if (!dbell_type_server(rb)) { + return; } - qemu_mutex_unlock_iothread(); -} =20 -void helper_book3s_msgsnd(target_ulong rb) -{ - int pir =3D rb & DBELL_PROCIDTAG_MASK; + cpu =3D ppc_get_vcpu_by_pir(pir); + if (!cpu) { + return; + } + cs =3D CPU(cpu); =20 - if (!dbell_type_server(rb)) { + if (cs->nr_threads =3D=3D 1 || !brdcast) { + ppc_set_irq(cpu, PPC_INTERRUPT_HDOORBELL, 1); return; } =20 - book3s_msgsnd_common(pir, PPC_INTERRUPT_HDOORBELL); + /* WHy does iothread need to be locked for walking CPU list? */ + /* Answer seems to be because ppc irq handling needs it, but it now ta= kes + * the lock itself if needed. Could remove this then. + */ + qemu_mutex_lock_iothread(); + THREAD_SIBLING_FOREACH(cs, ccs) { + PowerPCCPU *ccpu =3D POWERPC_CPU(ccs); + if (cpu !=3D ccpu) { + ppc_set_irq(ccpu, PPC_INTERRUPT_HDOORBELL, 1); + } + } + qemu_mutex_unlock_iothread(); } =20 #if defined(TARGET_PPC64) @@ -3154,22 +3172,42 @@ void helper_book3s_msgclrp(CPUPPCState *env, target= _ulong rb) } =20 /* - * sends a message to other threads that are on the same + * sends a message to another thread on the same * multi-threaded processor */ void helper_book3s_msgsndp(CPUPPCState *env, target_ulong rb) { - int pir =3D env->spr_cb[SPR_PIR].default_value; + CPUState *cs =3D env_cpu(env); + PowerPCCPU *cpu =3D POWERPC_CPU(cs); + CPUState *ccs; + uint32_t nr_threads =3D cs->nr_threads; + int ttir =3D rb & PPC_BITMASK(57, 63); =20 helper_hfscr_facility_check(env, HFSCR_MSGP, "msgsndp", HFSCR_IC_MSGP); =20 - if (!dbell_type_server(rb)) { + if (!dbell_type_server(rb) || ttir >=3D nr_threads) { + return; + } + + if (nr_threads =3D=3D 1) { + ppc_set_irq(cpu, PPC_INTERRUPT_DOORBELL, 1); return; } =20 - /* TODO: TCG supports only one thread */ + /* WHy does iothread need to be locked for walking CPU list? */ + qemu_mutex_lock_iothread(); + THREAD_SIBLING_FOREACH(cs, ccs) { + PowerPCCPU *ccpu =3D POWERPC_CPU(ccs); + uint32_t thread_id =3D ppc_cpu_tir(ccpu); + + if (ttir =3D=3D thread_id) { + ppc_set_irq(ccpu, PPC_INTERRUPT_DOORBELL, 1); + qemu_mutex_unlock_iothread(); + return; + } + } =20 - book3s_msgsnd_common(pir, PPC_INTERRUPT_DOORBELL); + assert(0); } #endif /* TARGET_PPC64 */ =20 diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index ca39efdc35..f0304e5bb6 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -117,7 +117,7 @@ void ppc_maybe_bswap_register(CPUPPCState *env, uint8_t= *mem_buf, int len) * regs and PC, MSR, CR, and so forth. We hack round this by giving * the FP regs zero size when talking to a newer gdb. */ - +/* XXX: read/write dpdes correctly */ int ppc_cpu_gdb_read_register(CPUState *cs, GByteArray *buf, int n) { PowerPCCPU *cpu =3D POWERPC_CPU(cs); diff --git a/target/ppc/helper.h b/target/ppc/helper.h index fda40b8a60..5ce49c7ebc 100644 --- a/target/ppc/helper.h +++ b/target/ppc/helper.h @@ -690,7 +690,7 @@ DEF_HELPER_FLAGS_3(store_sr, TCG_CALL_NO_RWG, void, env= , tl, tl) =20 DEF_HELPER_1(msgsnd, void, tl) DEF_HELPER_2(msgclr, void, env, tl) -DEF_HELPER_1(book3s_msgsnd, void, tl) +DEF_HELPER_2(book3s_msgsnd, void, env, tl) DEF_HELPER_2(book3s_msgclr, void, env, tl) #endif =20 diff --git a/target/ppc/misc_helper.c b/target/ppc/misc_helper.c index ffe54a4310..ca84f1b134 100644 --- a/target/ppc/misc_helper.c +++ b/target/ppc/misc_helper.c @@ -192,14 +192,38 @@ void helper_store_pcr(CPUPPCState *env, target_ulong = value) */ target_ulong helper_load_dpdes(CPUPPCState *env) { + CPUState *cs =3D env_cpu(env); + CPUState *ccs; + uint32_t nr_threads =3D cs->nr_threads; + uint32_t core_id =3D env->spr[SPR_PIR] & ~(nr_threads - 1); target_ulong dpdes =3D 0; =20 + assert(core_id =3D=3D env->spr[SPR_PIR] - env->spr[SPR_TIR]); + helper_hfscr_facility_check(env, HFSCR_MSGP, "load DPDES", HFSCR_IC_MS= GP); =20 - /* TODO: TCG supports only one thread */ - if (env->pending_interrupts & PPC_INTERRUPT_DOORBELL) { - dpdes =3D 1; + if (nr_threads =3D=3D 1) { + if (env->pending_interrupts & PPC_INTERRUPT_DOORBELL) { + dpdes =3D 1; + } + return dpdes; + } + + qemu_mutex_lock_iothread(); + CPU_FOREACH(ccs) { + CPUPPCState *cenv =3D &POWERPC_CPU(ccs)->env; + uint32_t ccore_id =3D cenv->spr[SPR_PIR] & ~(nr_threads - 1); + uint32_t thread_id =3D cenv->spr[SPR_TIR]; + + assert(ccore_id =3D=3D cenv->spr[SPR_PIR] - cenv->spr[SPR_TIR]); + + if (ccore_id =3D=3D core_id) { + if (cenv->pending_interrupts & PPC_INTERRUPT_DOORBELL) { + dpdes |=3D (0x1 << thread_id); + } + } } + qemu_mutex_unlock_iothread(); =20 return dpdes; } @@ -207,17 +231,41 @@ target_ulong helper_load_dpdes(CPUPPCState *env) void helper_store_dpdes(CPUPPCState *env, target_ulong val) { PowerPCCPU *cpu =3D env_archcpu(env); + CPUState *cs =3D env_cpu(env); + CPUState *ccs; + uint32_t nr_threads =3D cs->nr_threads; + uint32_t core_id =3D env->spr[SPR_PIR] & ~(nr_threads - 1); + + assert(core_id =3D=3D env->spr[SPR_PIR] - env->spr[SPR_TIR]); =20 helper_hfscr_facility_check(env, HFSCR_MSGP, "store DPDES", HFSCR_IC_M= SGP); =20 - /* TODO: TCG supports only one thread */ - if (val & ~0x1) { + if (val & ~(nr_threads - 1)) { qemu_log_mask(LOG_GUEST_ERROR, "Invalid DPDES register value " TARGET_FMT_lx"\n", val); + val &=3D ~(nr_threads - 1); + /* Ignore the invalid bits */ + } + + if (nr_threads =3D=3D 1) { + /* XXX: don't need iothread lock? */ + ppc_set_irq(cpu, PPC_INTERRUPT_DOORBELL, val & 0x1); return; } =20 - ppc_set_irq(cpu, PPC_INTERRUPT_DOORBELL, val & 0x1); + qemu_mutex_lock_iothread(); + CPU_FOREACH(ccs) { + CPUPPCState *cenv =3D &POWERPC_CPU(ccs)->env; + uint32_t ccore_id =3D cenv->spr[SPR_PIR] & ~(nr_threads - 1); + uint32_t thread_id =3D cenv->spr[SPR_TIR]; + + assert(ccore_id =3D=3D cenv->spr[SPR_PIR] - cenv->spr[SPR_TIR]); + + if (ccore_id =3D=3D core_id) { + ppc_set_irq(cpu, PPC_INTERRUPT_DOORBELL, val & (0x1 << thread_= id)); + } + } + qemu_mutex_unlock_iothread(); } #endif /* defined(TARGET_PPC64) */ =20 diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 31821f92f5..0aa49323d3 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -820,11 +820,19 @@ void spr_write_pcr(DisasContext *ctx, int sprn, int g= prn) /* DPDES */ void spr_read_dpdes(DisasContext *ctx, int gprn, int sprn) { + if (!gen_serialize_core(ctx)) { + return; + } + gen_helper_load_dpdes(cpu_gpr[gprn], cpu_env); } =20 void spr_write_dpdes(DisasContext *ctx, int sprn, int gprn) { + if (!gen_serialize_core(ctx)) { + return; + } + gen_helper_store_dpdes(cpu_env, cpu_gpr[gprn]); } #endif diff --git a/target/ppc/translate/processor-ctrl-impl.c.inc b/target/ppc/tr= anslate/processor-ctrl-impl.c.inc index cc7a50d579..7dfbcd781f 100644 --- a/target/ppc/translate/processor-ctrl-impl.c.inc +++ b/target/ppc/translate/processor-ctrl-impl.c.inc @@ -59,7 +59,7 @@ static bool trans_MSGSND(DisasContext *ctx, arg_X_rb *a) =20 #if !defined(CONFIG_USER_ONLY) if (is_book3s_arch2x(ctx)) { - gen_helper_book3s_msgsnd(cpu_gpr[a->rb]); + gen_helper_book3s_msgsnd(cpu_env, cpu_gpr[a->rb]); } else { gen_helper_msgsnd(cpu_gpr[a->rb]); } --=20 2.40.1 From nobody Wed May 1 15:26:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1685496263; cv=none; d=zohomail.com; s=zohoarc; b=OQRUj21i1PuGM2lv29Aa7wVFMC9EaihS3v9s6Cs9i77Mf3JY1C0ZRiEh7CS+XPuNnKgMKIoECZars/XEzXxRajkY+PhnY6oNS/M9bVr1h0Y6Nwv4kSCUamhF0ZvJ7GBKWiGjlBrlwVEU82MqoQg8RtnhrsXu3AGFLJzQw566bYQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1685496263; 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=iaJPnkMdqEyXleUkWVpoAwGBUt7AFKQl6C5a9llnJ3I=; b=SRcOZDJCQXc59J/L6CKYPq+k8qrYhTSSJlLEIQzcHseaAaFuJYmM6Qsm7ojW/idJMLSuOi55fjeOg5F6OamCTI/XtfIPA1xKupjEHO/Oy7dlpbx12AbvmWTX2PwwJ6U1hZhTCIyJ0e6zEa7jMr/jRF2v9fa7dD7ZS3lcjZ0aK34= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16854962636811015.6632401781354; Tue, 30 May 2023 18:24:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q4AYy-0004ov-8l; Tue, 30 May 2023 21:23:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q4AYw-0004ha-14; Tue, 30 May 2023 21:23:42 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q4AYu-0005Gq-H3; Tue, 30 May 2023 21:23:41 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1b04949e5baso21531345ad.0; Tue, 30 May 2023 18:23:39 -0700 (PDT) Received: from wheely.local0.net ([203.221.142.9]) by smtp.gmail.com with ESMTPSA id 9-20020a170902c10900b00186a2274382sm10928840pli.76.2023.05.30.18.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 18:23:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685496218; x=1688088218; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iaJPnkMdqEyXleUkWVpoAwGBUt7AFKQl6C5a9llnJ3I=; b=hKOPP/ymGwlx81QecaRffmdnigWjGmdtZ/cJh1ndlwMLQRjxa2e1h48d/qhsrQrW9d EuMGBsQBC90MhrOXPIsScIvj0lu7gDmSD7Z1VtPmSMdkZ+xdldHp2jnbEX7pLasHL9Od anIcezHUFhJxP3QLzeobhraUyOa5ZIGv+PTOGHST3sbGhzVW8JNmqOcEB5b7cMoDFIta RoOZuzjw17BnBbBJO7wGQ/j76s+o+hSbSLtIAG1UOlzCRRg+Xb3XXlBe+PwhwCvnjHng FulfI5sexhQisjjSB2n9fgtFzWDiOFZJIbVb7yU4us83E/HKpX8mqbsrRCb76rCTwDIT +2XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685496218; x=1688088218; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iaJPnkMdqEyXleUkWVpoAwGBUt7AFKQl6C5a9llnJ3I=; b=YdwOL6GUW1IG7SAGi4yETLReTeZjtWjyInLBNqcpSkoJyUl8R563IN0iqUQRuLjHiF MJTT4DV+c8g+e5/3hjZNpJjzWNpWCi6O/F2ke8rZzmjNwwmtsmNNCVAGPD/ODJZOA+ZS 8nfdAe/oEMmvPZsFXESfVVvjXHKrHGVd/qcOfy8dCXRRPo04BJ7uweBxR06X9v2662Co afNSVA2eDlFxll62+89VljZLJtJQfW5BqjkUflZ/zvhfDy+nx97WnnZvNzPPbmyFpaou oSUyjzgDM9Lfh4ZwfDwaCSLv7HU26gtmxhSgCehIYndTnl9Pr5mcoK1ConNQk/4oQX/D L83A== X-Gm-Message-State: AC+VfDy/Tp3z/tqOMfJ81PURzFgflisyTQ6gfo4rxxpJObjcsmYdcSr3 qXtRbUQuNRVflGkb2tVlTMPTLVknXzM= X-Google-Smtp-Source: ACHHUZ4CGoAgqdvju4OeJ1upj8cYN87WOuK+hi/TErnkXa2mq84lfwj2Htt/AxPFAPtbCy2C3mqoZw== X-Received: by 2002:a17:902:e744:b0:1af:a349:3f0d with SMTP id p4-20020a170902e74400b001afa3493f0dmr4802042plf.23.1685496218382; Tue, 30 May 2023 18:23:38 -0700 (PDT) From: Nicholas Piggin To: qemu-ppc@nongnu.org Cc: Nicholas Piggin , qemu-devel@nongnu.org, Daniel Henrique Barboza Subject: [RFC PATCH 5/5] spapr: Allow up to 8 threads SMT configuration Date: Wed, 31 May 2023 11:23:13 +1000 Message-Id: <20230531012313.19891-6-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230531012313.19891-1-npiggin@gmail.com> References: <20230531012313.19891-1-npiggin@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::62a; envelope-from=npiggin@gmail.com; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1685496265502100001 Content-Type: text/plain; charset="utf-8" TCG now supports multi-threaded configuration at least enough for pseries to be functional enough to boot Linux. This requires PIR and TIR be set, because that's how sibling thread matching is done. Signed-off-by: Nicholas Piggin --- hw/ppc/spapr.c | 4 ++-- hw/ppc/spapr_cpu_core.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index dcb7f1c70a..11074cefea 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2524,8 +2524,8 @@ static void spapr_set_vsmt_mode(SpaprMachineState *sp= apr, Error **errp) int ret; unsigned int smp_threads =3D ms->smp.threads; =20 - if (!kvm_enabled() && (smp_threads > 1)) { - error_setg(errp, "TCG cannot support more than 1 thread/core " + if (!kvm_enabled() && (smp_threads > 8)) { + error_setg(errp, "TCG cannot support more than 8 threads/core " "on a pseries machine"); return; } diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 9b88dd549a..f35ee600f1 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -255,7 +255,7 @@ static void spapr_cpu_core_unrealize(DeviceState *dev) } =20 static bool spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr, - SpaprCpuCore *sc, Error **errp) + SpaprCpuCore *sc, int thread_nr, Error **er= rp) { CPUPPCState *env =3D &cpu->env; CPUState *cs =3D CPU(cpu); @@ -267,6 +267,9 @@ static bool spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMa= chineState *spapr, cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); kvmppc_set_papr(cpu); =20 + env->spr_cb[SPR_PIR].default_value =3D cs->cpu_index; + env->spr_cb[SPR_TIR].default_value =3D thread_nr; + /* Set time-base frequency to 512 MHz. vhyp must be set first. */ cpu_ppc_tb_init(env, SPAPR_TIMEBASE_FREQ); =20 @@ -337,7 +340,7 @@ static void spapr_cpu_core_realize(DeviceState *dev, Er= ror **errp) for (i =3D 0; i < cc->nr_threads; i++) { sc->threads[i] =3D spapr_create_vcpu(sc, i, errp); if (!sc->threads[i] || - !spapr_realize_vcpu(sc->threads[i], spapr, sc, errp)) { + !spapr_realize_vcpu(sc->threads[i], spapr, sc, i, errp)) { spapr_cpu_core_unrealize(dev); return; } --=20 2.40.1