From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567158; cv=none; d=zohomail.com; s=zohoarc; b=oAGV0eNRe8lL8mJIowpVPJy0e9m6gYO7XuMCvPjnWxPX6bPlWabZ+qcQ8SDjLnWdoeb0ztPwqulSwCUufbqlcKVS7Qd53iqSAaZCI2tQpA0+5hY5B1Q7luaz1QeejSruwe7l1bBOhuFHNcDUZkEWefOcMq64AGEfYKhRzjRhLXg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567158; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PO0Xi+l8mZtLQEAvQVUzx/DN6qW1/Pe1V+/XNJEzQZI=; b=bF6XbJcWZm6CcOdz3nclPhOatP8hQMoV/DkGHUwaOnEy4AEE7YUhkrDO9rAX+cI9JMWZ2z9YjTeKZqBpp/l/6fWrrDWdk3rGVT0jnYwttcvJKj17V+5yxSkqfC+geRQ7ufM2+SS45WVk35ITmbvbltdtx/V+jPzrC9jRHIVWKbw= 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 1758567157992344.95845310346476; Mon, 22 Sep 2025 11:52:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbe-0004f2-44; Mon, 22 Sep 2025 14:49:46 -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 1v0lbV-0004dV-5Q for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:38 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbP-00043D-Mz for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:36 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-77da29413acso5013614b3a.1 for ; Mon, 22 Sep 2025 11:49:29 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566968; x=1759171768; darn=nongnu.org; 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=PO0Xi+l8mZtLQEAvQVUzx/DN6qW1/Pe1V+/XNJEzQZI=; b=VhbsvFzFPdDRAF1snKzIe9PUajBFEmXDClLnQsEkOAK62HjAycgjiu3wA6TlC9IH8c 6FxUaRoYc2lpDPOyvP5lKWEoeiRXf6ay5CbMC0AGIIeCUNkp8uxE39gmCrKpF4PDTYjl YGInA2Fuf7gRILmrw42QPguUCiMR1xlmG9fUwwq/tc2MB/lPDm1FojU6VyvjLlPavVTQ w72d3/DZ/aHCKAUQlzaZ6TspJbgUJPHceZQk6Gb+zJH1PrfTetusZLfD3O53pIvdpZq0 zw8jXH0CScHJlGbOXBkTp0kTL7706lD0Nl8WpFxVgNlCmIr2lhlml9JWqFwFOnBdppmk gwDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566968; x=1759171768; 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=PO0Xi+l8mZtLQEAvQVUzx/DN6qW1/Pe1V+/XNJEzQZI=; b=u1gn0rKAt3pdb6MBF/FvWOwyYsi1KVwzQnYSgTueEEmYO7THnyLtQY1LaOCahfdxwA oG4PHYZ3IKSagOYDjJvQZFZlIaDtyo8rHZyotunbo3hWwHM6GMwRnDCssasWcs47Xlt8 tn5cwAbPUGJ2tlCPFh6jiVFdasVp7A5Njjnn9VtqwfY51m70S2XK6tJkY8j6GeTDlFX3 +dpJgME1zMdzpO5ZnSXEGI2dkpT+dBqkD7bnWLDGalrXocFq6ZAxf2w7MakcH8R05TVx NBotGkDCBnd93jKcF5Vqa8JpIntiDOaH3ocW41SyQi96avxDPGLgl7de3rZy+bAeJRgY ewYA== X-Gm-Message-State: AOJu0Yzk3JyL/ySvM62gR4tJfpvKtI7QhiMBdVYKNZwYOqm2fuCD85vY n+39qu3Qh/XX8FrZXhbndnWJuOaW3lAG9sUF0Tce7tGsn4cIA81pO/O0NyIZZDJf9Cyvd+p4hL/ CZ3Y4 X-Gm-Gg: ASbGncv3dOJTZb2a/7vliQpnLZAbuLIC3k+wetO+fVzZDSZ4jJAdnMS4mtvvnf0AC+T tfc9hFQXvjOb0h6lroZCtdzhCbYpo19mNGAj/p3iAy6ErJGxCqM8dQFGuIs77R/9Wr1xnFr99UJ eco+r+LLep1xgwmx457P1bmPjI6N7cPLLhwye+Xm8NfDTycUDWB41qloJILrHC63HCt8X9JrRt8 ZkVV21Nu9tX/6BlfHsC7CWxoD5K2p8RO3iih6ZNcAsTDtvlXjcwl+64nN5rRvvHrHA3jlr/Tc3F Vbe+IsLBGjmcCBeicYAsXxPXr3Bt6OZEsRsHTZNfFBGguddCP95/s37ilGvYrGiUaMdgdV+QWkl QSrHz8/xt2RQjyr4Y8Gyfey6YLjsq X-Google-Smtp-Source: AGHT+IFAoWDE2Xo5VUCA3sTCW37h4xh9J8gZ12D9tXkpg4J86+p1egZF12lbfBiVGMzhlPTGj2OHLQ== X-Received: by 2002:a05:6a00:188d:b0:76e:2eff:7ae9 with SMTP id d2e1a72fcca58-77e4d224dfdmr16519530b3a.12.1758566967868; Mon, 22 Sep 2025 11:49:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 01/76] target/arm: Add isar feature test for FEAT_S1PIE, FEAT_S2PIE Date: Mon, 22 Sep 2025 11:48:09 -0700 Message-ID: <20250922184924.2754205-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567158869116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu-features.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 512eeaf551..30226814bb 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -929,6 +929,16 @@ static inline bool isar_feature_aa64_sctlr2(const ARMI= SARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64MMFR3, SCTLRX) !=3D 0; } =20 +static inline bool isar_feature_aa64_s1pie(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, S1PIE) !=3D 0; +} + +static inline bool isar_feature_aa64_s2pie(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, S2PIE) !=3D 0; +} + static inline bool isar_feature_aa64_pmuv3p1(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64DFR0, PMUVER) >=3D 4 && --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567257; cv=none; d=zohomail.com; s=zohoarc; b=YjZ2wPNu7SVzeQz/xY8vJcUIVIK8p/w/xSyXTgmhVK9bNo6iin9USaBSqXsJjwWMydqZppg7Tsuy93JlyuhiPDvHQk78ocVsKqDSlisKOunIiGhaxGI+9Lp34/dRa9DAvgw1LNrZB1/HGASwHk/zoTrm88wwXwJo1BkQDQXaScM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567257; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zNYeSBUI+ChSA2MN6MhEMZp6PedkQrBC3yc/qlTcbfM=; b=HL8B6UJk/EdSL1itznxIRO6PsdIHfMk7UWNVsjJ/Rd265bivaWshejKc1IbhDH+5lJ8RfxmyyYEcvVBFRZtA/MnNtoM7NPZBD8n5djdlGJtCkwXgHMkeJ49XjfNPjBiJN36+bhke5IB5tJ+xhmbu6KYeyCU+jx6WRv8AryPiSRg= 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 1758567257322505.2827926828885; Mon, 22 Sep 2025 11:54:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbf-0004g6-6W; Mon, 22 Sep 2025 14:49:47 -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 1v0lbU-0004dP-IM for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:38 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbQ-00043e-Hi for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:34 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-77f318e12a6so995977b3a.2 for ; Mon, 22 Sep 2025 11:49:31 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566970; x=1759171770; darn=nongnu.org; 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=zNYeSBUI+ChSA2MN6MhEMZp6PedkQrBC3yc/qlTcbfM=; b=C8zULNPnBYfQ7fET+ThH/lTdOTQ+1N6qbtIvyCYs6dwUUlwV4brp0cxbLy7Xmb0bv1 XhvcTAF8nabJIA8BV7JYeL8+zZByFnkAMVX/LAkhSc9MjWJci9x6TMyKTGJO2F3NYijd kxKXkJ0thitERLW9OoDLb45VAxOZZI0ge43pTL2oAUY+iIiHU0ttHsRsueBhiFCNXn40 31olUERn6lObtMU9ERYjFCBAoHu5cGjBAgC8kwllq1AetcqBmypGwAe/B1nSS+nEhpUW NWWt272JQdqBteVcWjtOI8KkRNp/2PgKxLvHrxBKA6KPQV6QqYcjH+ucicTpwR2//YJz NUoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566970; x=1759171770; 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=zNYeSBUI+ChSA2MN6MhEMZp6PedkQrBC3yc/qlTcbfM=; b=CHnqhaKLkKoEOYjrDHyzJpuCafTNwRF0x7D/A/YwoCwB1QBALevr+CeQczNHHOR7zO cA7gA/vXwfmhUWPJKgdT7LbvN+4/MqQFChvKapAnZrq6h+0jWRa7KAnOIT8YriZl2hDm DNCbWe+B8ZuqQyTLalu9HLfLUVjKESvWmFDW23b0xPKIB8dbS6jBmX87LgSGVADVc8u4 Tent9b58GaFRbQTwWxydWdDlSQN91MXJt79hXLvnNfInZKXmgoeLB80oSscRGJTsVBYH EeI6U8tPbmHpzCB2xcs6Th714SoSRQUREwi/k8ZqiNoYWdac4ZN7K6P/oAAnodAuB3+t R8Rg== X-Gm-Message-State: AOJu0Yz2zRc5v3tZKO2N+yq9mT/5UUjE4Urgwl006fNF+1hV2M1b8QTZ JAkWbyIG87uEq2EG61C4Ciz35zPN0GBp2lweK4xHSqdYkn6P2OnT0pQKORmrCPgk2tD7ucjFfD/ oMji0 X-Gm-Gg: ASbGnct5obWfcu1msYoWiR23s3F/KVVxiA+NchG0MhKUJqVoDeHdPA9/usTe5NdTvLo Fr7VfE1BRjdtrJY57Nun/QQ4+jJs8TYhJbDTHXDPTRNsVILnXbjqqXppATUg8kWFYSXrO4lEMrV W3YeSLOS+pNxIanGPyjbyswp5T/Q9f+YhymzUr7asHxux8zrT1RrpD11H1FYCJw8jH9iE+NCEe4 dBOREOvotPF0WxImxQ3+EzD0WfBMd9HFXb5xQkvxOQAcLVmb3K+G9zIiu9MIemO6m3Vucn34cLO OUaJXJB8FrjKRMPikJvx9Pz7BdhX0gkv3t3T2Y/7z/PACwg8kq7LHYAMz2T8GZn14Z5ZmnrMyEg yt3K9dT2Dx5rgUjVgSiRZ3FKAPAzn X-Google-Smtp-Source: AGHT+IH+EoRSG+hmD/8rJwDIR/miQuHIJVEbjBkhqUdph9DB9fZK/YU5WLlm12KB+AVO9Ij5lPx9PQ== X-Received: by 2002:a05:6a00:1ad4:b0:77f:324a:6037 with SMTP id d2e1a72fcca58-77f324a7a52mr5595642b3a.7.1758566969337; Mon, 22 Sep 2025 11:49:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 02/76] target/arm: Enable TCR2_ELx.PIE Date: Mon, 22 Sep 2025 11:48:10 -0700 Message-ID: <20250922184924.2754205-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567258022116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/helper.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/arm/helper.c b/target/arm/helper.c index c60da6013d..5c3805eaff 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -5891,8 +5891,12 @@ static CPAccessResult tcr2_el1_access(CPUARMState *e= nv, const ARMCPRegInfo *ri, static void tcr2_el1_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) { + ARMCPU *cpu =3D env_archcpu(env); uint64_t valid_mask =3D 0; =20 + if (cpu_isar_feature(aa64_s1pie, cpu)) { + valid_mask |=3D TCR2_PIE; + } value &=3D valid_mask; raw_write(env, ri, value); } @@ -5900,8 +5904,12 @@ static void tcr2_el1_write(CPUARMState *env, const A= RMCPRegInfo *ri, static void tcr2_el2_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) { + ARMCPU *cpu =3D env_archcpu(env); uint64_t valid_mask =3D 0; =20 + if (cpu_isar_feature(aa64_s1pie, cpu)) { + valid_mask |=3D TCR2_PIE; + } value &=3D valid_mask; raw_write(env, ri, value); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567086; cv=none; d=zohomail.com; s=zohoarc; b=VYYPALfB8y6I3EcZJOuv/1yWdnDJGYaToc0g7bsJ78l3/xoFAKbBVN5gQ6/dHy07tQOQM3xdPlRPzz5uyBZflwaAJJXiBws6MZkNKlyYyXlXYRHo6hG1joqMUn3kxTuhZwVl1SSzY5weDsYFI+Xi4xQpf7ygRpOZTEx46ZMh6do= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567086; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/Ae/t6hzONsT5/GVAYs0ALRObTE3DUmpSmj5C52nHn8=; b=JTNrSbRwc8fHsYb6YX2chVSbyacGKYLl2hQQz5Rb6Fsshdlp/ngZUcdDXB4szIlZYzy+Sv3Guvr8ICTJHJ9GhsI33i16BcMrgFDlt/XCv7XLhCi8sduNovQOatevNvpEzVs4bevvH3K5JZBoEeUxhyZEBbb+vn6f2XC3pyGmfnY= 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 1758567086605752.5904621195084; Mon, 22 Sep 2025 11:51:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbe-0004fZ-PI; Mon, 22 Sep 2025 14:49:46 -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 1v0lbV-0004da-Kj for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:38 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbR-00043k-IL for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:37 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-77f454c57dbso789823b3a.2 for ; Mon, 22 Sep 2025 11:49:31 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566970; x=1759171770; darn=nongnu.org; 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=/Ae/t6hzONsT5/GVAYs0ALRObTE3DUmpSmj5C52nHn8=; b=nr0KZ2ndL28tyrad620w1PtssBQwk4CUtxnQYMSpFsCrLnsAdVvxvNHjYYf7dZul0n oQ4V2TrGWjBjj8N5qv46ItHEo7cYNs0oGtaM+MN59ZvSJm2saQtkgSdOEDoXZTbk53nu 1BYzhIJ76pl1q6401uQSt6wdhwf2hNLDwSU41dgVG/f1FpfuNTZaO1DOkbDD9h9AblT/ StHASXMhdfd5aBpLeLd8qf91SmFZNvs7aX6bBLTo1B1CPqAK+M9x3Q2j+rfnRjghmZuz 3swygF9X78M3/SP+g0+werUqq3uW3cUgWmjJM+YO3KPuLf4ZU0rFFWl2HyCrfE7x7N26 RV+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566970; x=1759171770; 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=/Ae/t6hzONsT5/GVAYs0ALRObTE3DUmpSmj5C52nHn8=; b=jv3az+i6s9WzgW8UOhbLUcNBSohgDXTJEFKJnyD1Xct4hgEe1D/t2y4TmyR0V2cyvK 8b1HaQhHvvQx2eXBnU2AWPNP0f/SIZTd9Z3kTPPmEkwNNrJxArXR9yQ218KfkcoiZMqC Tl9ukMugsIi5LhXoJ0AWZn8+BR3Apj0NJ9Zu7J9JrukG+RFC3NoiYKhPQwIwkwaa5Fcz nkKCVKHN1dyx2xNegH61PsiXL0k7xp1lx045IjYbkLkbG20kEqmDw2TOVG1he+mz/7F1 QBONjRFoz2BL/WF4JDVvBccKP6/u8fQtjRedyMBOYWprTGPgrU+5TLCAgOFUBIVp09JX 0Ypg== X-Gm-Message-State: AOJu0YyfaTjKjoYFeqZzZ3HVq+x2arBNGuRxPUz1+iPnZhR8FfjgCH+h YpyaC9HhpUI7hVkf92DcI2k6B4C+O+2yuWLIewjdmmCKEnR0xoIX5fxm9rk9FIoqLRjwPhOTTD5 dfOsy X-Gm-Gg: ASbGncttKxQC8cpG+y4HYCu07IVN6YU/6d8OG5CeFTm/fF/UaLX4So9JfhfB+6AeJWI 0y3nb1eqBcXDww/SJEKCPwtrr1moG5N40s6+ZqgzToR/Wg21tOyE3yi4X9LMYHIsJpB3MAd8RCs Fo2r2nM8SLnvlwoRYhR3XEw8z2nKAGzvREynFMtPrUVq6rAxAwp5AmYdYYvExkxDMh3RKva6I0N AbZCVgcD7JRGdcxGemWomaBhiSn/8IUJX1Pjin6SVfWUb/n4vUWe4N8CBBMO5fBFtA9hnaQG20I q205Q/m0M97nls3pwhLbWHOcO7ZMB5WzkOnNODhzd7c3cdfvuJy+QWLosziz9PCBcSiMfsLsB2Y b+BxGi/EOkubvKh0WLyDfzM5MT880 X-Google-Smtp-Source: AGHT+IE2fHqa2fOmIRSiwEhRLdZZWK4Cs9ajQYmXwB5EKRsDOo9K6MJUPsbouYE652yQCTtQ8S2KGw== X-Received: by 2002:a05:6a00:84b:b0:77f:23dd:1e20 with SMTP id d2e1a72fcca58-77f23dd228cmr9995397b3a.24.1758566970441; Mon, 22 Sep 2025 11:49:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 03/76] target/arm: Implement PIR_ELx, PIRE0_ELx, S2PIR_EL2 registers Date: Mon, 22 Sep 2025 11:48:11 -0700 Message-ID: <20250922184924.2754205-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567088090116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 2 ++ target/arm/cpu.h | 4 +++ target/arm/cpu.c | 4 +++ target/arm/helper.c | 69 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 57fde5f57a..f48c4df30f 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -781,6 +781,8 @@ typedef enum FGTBit { DO_BIT(HFGRTR, ERRIDR_EL1), DO_REV_BIT(HFGRTR, NSMPRI_EL1), DO_REV_BIT(HFGRTR, NTPIDR2_EL0), + DO_REV_BIT(HFGRTR, NPIRE0_EL1), + DO_REV_BIT(HFGRTR, NPIR_EL1), =20 /* Trap bits in HDFGRTR_EL2 / HDFGWTR_EL2, starting from bit 0. */ DO_BIT(HDFGRTR, DBGBCRN_EL1), diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d5534e3580..d17252f734 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -368,6 +368,9 @@ typedef struct CPUArchState { uint64_t tcr2_el[3]; uint64_t vtcr_el2; /* Virtualization Translation Control. */ uint64_t vstcr_el2; /* Secure Virtualization Translation Control. = */ + uint64_t pir_el[4]; /* PIRE0_EL1, PIR_EL1, PIR_EL2, PIR_EL3 */ + uint64_t pire0_el2; + uint64_t s2pir_el2; uint32_t c2_data; /* MPU data cacheable bits. */ uint32_t c2_insn; /* MPU instruction cacheable bits. */ union { /* MMU domain access control register @@ -1720,6 +1723,7 @@ static inline void xpsr_write(CPUARMState *env, uint3= 2_t val, uint32_t mask) #define SCR_ENTP2 (1ULL << 41) #define SCR_TCR2EN (1ULL << 43) #define SCR_SCTLR2EN (1ULL << 44) +#define SCR_PIEN (1ULL << 45) #define SCR_GPF (1ULL << 48) #define SCR_NSE (1ULL << 62) =20 diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 5aee4e6a91..d4bc2e6a92 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -635,6 +635,10 @@ void arm_emulate_firmware_reset(CPUState *cpustate, in= t target_el) if (cpu_isar_feature(aa64_sctlr2, cpu)) { env->cp15.scr_el3 |=3D SCR_SCTLR2EN; } + if (cpu_isar_feature(aa64_s1pie, cpu) || + cpu_isar_feature(aa64_s2pie, cpu)) { + env->cp15.scr_el3 |=3D SCR_PIEN; + } } =20 if (target_el =3D=3D 2) { diff --git a/target/arm/helper.c b/target/arm/helper.c index 5c3805eaff..c0b499946c 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -770,6 +770,10 @@ static void scr_write(CPUARMState *env, const ARMCPReg= Info *ri, uint64_t value) if (cpu_isar_feature(aa64_sctlr2, cpu)) { valid_mask |=3D SCR_SCTLR2EN; } + if (cpu_isar_feature(aa64_s1pie, cpu) || + cpu_isar_feature(aa64_s2pie, cpu)) { + valid_mask |=3D SCR_PIEN; + } } else { valid_mask &=3D ~(SCR_RW | SCR_ST); if (cpu_isar_feature(aa32_ras, cpu)) { @@ -5930,6 +5934,64 @@ static const ARMCPRegInfo tcr2_reginfo[] =3D { .fieldoffset =3D offsetof(CPUARMState, cp15.tcr2_el[2]) }, }; =20 +static CPAccessResult pien_access(CPUARMState *env, const ARMCPRegInfo *ri, + bool isread) +{ + if (arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_PIEN) + && arm_current_el(env) < 3) { + return CP_ACCESS_TRAP_EL3; + } + return CP_ACCESS_OK; +} + +static CPAccessResult pien_el1_access(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + CPAccessResult ret =3D access_tvm_trvm(env, ri, isread); + if (ret =3D=3D CP_ACCESS_OK) { + ret =3D pien_access(env, ri, isread); + } + return ret; +} + +static const ARMCPRegInfo s1pie_reginfo[] =3D { + { .name =3D "PIR_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .opc2 =3D 3, .crn =3D 10, .crm =3D 2, + .access =3D PL1_RW, .accessfn =3D pien_el1_access, + .fgt =3D FGT_NPIR_EL1, .nv2_redirect_offset =3D 0x2a0 | NV2_REDIR_NV= 1, + .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 10, 2, 3), + .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 10, 2, 3), + .fieldoffset =3D offsetof(CPUARMState, cp15.pir_el[1]) }, + { .name =3D "PIR_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 3, .crn =3D 10, .crm =3D 2, + .access =3D PL2_RW, .accessfn =3D pien_access, + .fieldoffset =3D offsetof(CPUARMState, cp15.pir_el[2]) }, + { .name =3D "PIR_EL3", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 6, .opc2 =3D 3, .crn =3D 10, .crm =3D 2, + .access =3D PL3_RW, + .fieldoffset =3D offsetof(CPUARMState, cp15.pir_el[3]) }, + { .name =3D "PIRE0_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .opc2 =3D 2, .crn =3D 10, .crm =3D 2, + .access =3D PL1_RW, .accessfn =3D pien_el1_access, + .fgt =3D FGT_NPIRE0_EL1, .nv2_redirect_offset =3D 0x290 | NV2_REDIR_= NV1, + .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 10, 2, 2), + .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 10, 2, 2), + .fieldoffset =3D offsetof(CPUARMState, cp15.pir_el[0]) }, + { .name =3D "PIRE0_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 2, .crn =3D 10, .crm =3D 2, + .access =3D PL2_RW, .accessfn =3D pien_access, + .fieldoffset =3D offsetof(CPUARMState, cp15.pire0_el2) }, +}; + +static const ARMCPRegInfo s2pie_reginfo[] =3D { + { .name =3D "S2PIR_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 5, .crn =3D 10, .crm =3D 2, + .access =3D PL2_RW, .accessfn =3D pien_access, + .nv2_redirect_offset =3D 0x2b0, + .fieldoffset =3D offsetof(CPUARMState, cp15.s2pir_el2) }, +}; + void register_cp_regs_for_features(ARMCPU *cpu) { /* Register all the coprocessor registers based on feature bits */ @@ -7160,6 +7222,13 @@ void register_cp_regs_for_features(ARMCPU *cpu) define_arm_cp_regs(cpu, tcr2_reginfo); } =20 + if (cpu_isar_feature(aa64_s1pie, cpu)) { + define_arm_cp_regs(cpu, s1pie_reginfo); + } + if (cpu_isar_feature(aa64_s2pie, cpu)) { + define_arm_cp_regs(cpu, s2pie_reginfo); + } + if (cpu_isar_feature(any_predinv, cpu)) { define_arm_cp_regs(cpu, predinv_reginfo); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567265; cv=none; d=zohomail.com; s=zohoarc; b=KX2ji6wdiO7669EK6sp8/MP+HlO40JfQZgU4aDg5Jao95hchciekY/45enX/fpn2wGHeNqiL++yz2KtNwkZ8QvZz2mX7PeDmBTsQgObPRIyj9no8k6k8255z3WMPTMyDJ4/9IUwpRSP5Zaj63lfg1TGc3at4vAGOC22SH0z0DLE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567265; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=usu7YBpSCdSYku4HM9JrcfIZ8CuetQgTTrUpbI5sQ3I=; b=W867mZDLf9SUOkTijsdfHqhnRZfo9Q8jlDxVIe8ltj1rveopUkzLBpOwmxbkoiWSDizUQVuECQfC8WKxF7gZKHeAVnirH0O1CaNNrGx2Cdc401Tv2HCcaLxb/4YaUwlCU9tBLEAruWcz2t6/W6s/5s9AVidiUeIOm7v4dhMjZZE= 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 1758567265229733.8861046109399; Mon, 22 Sep 2025 11:54:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbf-0004fe-1w; Mon, 22 Sep 2025 14:49:47 -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 1v0lbY-0004dt-DT for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:41 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbT-000441-Gb for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:39 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-77f2e960728so1970468b3a.2 for ; Mon, 22 Sep 2025 11:49:32 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566972; x=1759171772; darn=nongnu.org; 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=usu7YBpSCdSYku4HM9JrcfIZ8CuetQgTTrUpbI5sQ3I=; b=IKTx84AMUs0JouFXSYG0rhGgtmzF77MBB603x5QcLkjCYqepetsfxV+PXA12p514H+ FxZQ2FkCe5xjTQ6QRm4KKs5zbSIjVQE/OXJpjJ5mjo9/vgHEqCrRGkWdJHg5SwVZZ5xh ArLowqMEvh/1RVBwU76TpUGCJht7sCvVNmTajSm8ydXEqNuOCgQ/iksfueclEWMzQ0Mw TTFHHdAUaufwnoV02zEUp2EIHd0Ut3o97pltaa178ZwfZgUAZnph2Z7LSPJuz2eJ6y7j KMSyF9H72wzjvFkdW9tHLPiNhVfBm/Hdfn/VDRApKPf19Orra6HjY1suTxiH4ib9PMcc GCRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566972; x=1759171772; 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=usu7YBpSCdSYku4HM9JrcfIZ8CuetQgTTrUpbI5sQ3I=; b=dI+HolmcCmXC20qzo2DliIr4FktU5BKgny+VuXb9GzhSHdaI1Y9DtD/NIxz93PhZUM s1RwZBVamWonl72gUx5GYHTSz6dIUE/RMh1rdpnbBUQUjhOlfuE9pQHgwWPUVe8HJ3ep YKF2rV9xGF/bqn1Aqx1pxSN0ZmonHJvqsv+f7zTfCdQwZY727zBQPusAEMFIWK4BQx61 7GE3kILpmytvh1/YSxcSNuZmmJcyuf2zbG1UOiSN5OZk9dsE0uRlBxX5ktsv9zL8AjDb +GYCXVVazSb6Z83RBv89Ks9tvb+padS1hes28aLFwBdMba7Vxx/SRTVVaX8DI7FDGFwu eYHg== X-Gm-Message-State: AOJu0YxlQo1DRWdPBmEZrd2BxT3ok35A+Kc5qiErQslE4iMeW458Ysqx LHS0XAWXHRZCMBmZemNfUCZQ1p4SFCKdFK5CxavhNsdS204YBKdrmxfygfdJQrDrwBOuPYrGsDD rArAm X-Gm-Gg: ASbGncvFdXkLfMEHODG0MK8y/KcdDdbqkZut16KURdqzhQsVZINaalv3URcTUNR5IrR DrBF9CQyA4PQ5cu+/ScBm3dhkzNrJQU6or8NfJfJM1jRjbedpKLNGxcweYsI4TAfdJSj5WCa0oY zXdTh8Ea87PcevVfC6NA6AbDw7PmCsmsFnwVvcNS4WfZ0lODHdNW3vZ/XhVs8G8kRNDQ/ig3r6R gzyL4EJb9nFAwqSx0DCeTgF9yYTmLpOdHtHg1F2ygdkroAKqE5zcp+AL9CGExhvC9rvxOqLp+IF m0iWQRw5ic/L4fdUgZnz5NDrzrTA7Fwm+P3mh12v1+B787jiG2jeJRA+0VjiDrsHkZuAEQJ5fzV Li1L2Vn5DFMNDzwxJL1BvYmpDr9Rs X-Google-Smtp-Source: AGHT+IETVvMsCDlXvsd46szIOmlOkgvLZTrqXe3kGWBLJdkSm7XCSuaUvwXqPt0UkqMcz7IyDeJ//w== X-Received: by 2002:a05:6a00:139d:b0:772:fc2:be71 with SMTP id d2e1a72fcca58-77e4e8ab212mr15129226b3a.20.1758566971768; Mon, 22 Sep 2025 11:49:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 04/76] target/arm: Force HPD for stage2 translations Date: Mon, 22 Sep 2025 11:48:12 -0700 Message-ID: <20250922184924.2754205-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567266143116600 Content-Type: text/plain; charset="utf-8" Stage2 translations do not have hierarchial permissions. Setting HPD means we can eliminate an extra check against regime_is_stage2. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/helper.c | 7 +++++-- target/arm/ptw.c | 24 +++++++++++++----------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index c0b499946c..f64543dc78 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9383,8 +9383,11 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env,= uint64_t va, tsz =3D extract32(tcr, 0, 6); gran =3D tg0_to_gran_size(extract32(tcr, 14, 2)); if (stage2) { - /* VTCR_EL2 */ - hpd =3D false; + /* + * Stage2 does not have hierarchical permissions. + * Thus disabling them makes things easier during ptw. + */ + hpd =3D true; } else { hpd =3D extract32(tcr, 24, 1); } diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 6344971fa6..ebb260d54d 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1471,8 +1471,12 @@ static ARMVAParameters aa32_va_parameters(CPUARMStat= e *env, uint32_t va, } tsz =3D sextract32(tcr, 0, 4) + 8; select =3D 0; - hpd =3D false; epd =3D false; + /* + * Stage2 does not have hierarchical permissions. + * Thus disabling them makes things easier during ptw. + */ + hpd =3D true; } else if (el =3D=3D 2) { /* HTCR */ tsz =3D extract32(tcr, 0, 3); @@ -1978,16 +1982,14 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1= Translate *ptw, * except NSTable (which we have already handled). */ attrs =3D new_descriptor & (MAKE_64BIT_MASK(2, 10) | MAKE_64BIT_MASK(5= 0, 14)); - if (!regime_is_stage2(mmu_idx)) { - if (!param.hpd) { - attrs |=3D extract64(tableattrs, 0, 2) << 53; /* XN, PXN */ - /* - * The sense of AP[1] vs APTable[0] is reversed, as APTable[0]= =3D=3D 1 - * means "force PL1 access only", which means forcing AP[1] to= 0. - */ - attrs &=3D ~(extract64(tableattrs, 2, 1) << 6); /* !APT[0] =3D= > AP[1] */ - attrs |=3D extract32(tableattrs, 3, 1) << 7; /* APT[1] =3D>= AP[2] */ - } + if (!param.hpd) { + attrs |=3D extract64(tableattrs, 0, 2) << 53; /* XN, PXN */ + /* + * The sense of AP[1] vs APTable[0] is reversed, as APTable[0] =3D= =3D 1 + * means "force PL1 access only", which means forcing AP[1] to 0. + */ + attrs &=3D ~(extract64(tableattrs, 2, 1) << 6); /* !APT[0] =3D> AP= [1] */ + attrs |=3D extract32(tableattrs, 3, 1) << 7; /* APT[1] =3D> AP[= 2] */ } =20 ap =3D extract32(attrs, 6, 2); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568139; cv=none; d=zohomail.com; s=zohoarc; b=aVq1JPOhbvN59i+1+mZ/nV5YaYLGPQtd8slDgBtoi2cftNPjHkaSQbwvaWfCwhACJSIkJfyePFpf0XO/BgmsnwupvQfBUWTapb2FF1rdPOaGms+g6mVzgIL6ykOlpyAcEMECxB0f6GFJDQD9atFJ6YtFhchNnQdQdmPiWNVvDvg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568139; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PVdjjmeNl369fORWFFYrAmuAxl5OexK+Goh2FzAHrEY=; b=K58ls10n60eGD+Sbwe3BJealVCPuxgSyRuuEQlP9a5JKSg+aavjO5y5OhOuspBjG38WHaEeXCqcyUu0WOWE/Kjy/u0l39sxadU80cn2J+FWk13FLBzaqlVTOFsirfqbNW+XziiUwZPLDKk2YdnVinFNqNJPLyc7vx98P1FVNFsI= 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 1758568138876331.18907123471433; Mon, 22 Sep 2025 12:08:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbh-0004jF-1j; Mon, 22 Sep 2025 14:49:49 -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 1v0lba-0004ew-NA for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:43 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbU-00044O-BF for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:42 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-77ee6e252e5so2905073b3a.2 for ; Mon, 22 Sep 2025 11:49:34 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566973; x=1759171773; darn=nongnu.org; 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=PVdjjmeNl369fORWFFYrAmuAxl5OexK+Goh2FzAHrEY=; b=m5agun4KvHBgNcQVjdcCMf3eeYwOT5RY+5OZPMWqJ1NQJsAEUDIByyATq+OG9f8AKk 48jlgLpxAv72PeYyXrhE0LtrG1qm0oZcGo5RPjb8MNORVFvckXWfa3t/g9iS+Fj8G0yA PhTnQ82RPJseRSbo4xk2PkpqMQypTgcc+vkdvAZwp7G2LbxYx+AC+MLsitxiwCcAL/Ll +/fwfUOAFVRQTfj8vRXka3zO7cLsqPPM83rwPUsjSD+2Di8phHhc/tUTyM1WP1Si5fwg q/0dmynlmJnOrxjw9tkkV45O+wekAqgcEh7BKdje5JJdkku7GjnHYNANmlyMt/XvBb/C 01ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566973; x=1759171773; 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=PVdjjmeNl369fORWFFYrAmuAxl5OexK+Goh2FzAHrEY=; b=uCmnR67PBXnUk4X2FYJD0da2gIHlvgMxrfwY4uu7/oywjqLD9jI0L1lV+v/oQ5LIQZ tNSszvXVb2ZwrfbXKh1JMHVG8+97wsSjgUNYdfTOB7Z4hstYBTsw2ZN7NvBnxClTE6qZ 5ne7XR0MU/XCPOyNl4+N+L/SNUYHSVqXhCawsZS0ubwmiI4H6Cp+A5m3ctCfxWBTeVhg 6fd80bzkt62ndhYUXAIB/ErDaGDsNMjf9hMeySpEtvECIqTz11wrLisChLwJwxqOlKGH +p6mpG8jDIZ28p2QHZfsWe/K0mD+XJ27aJN/pxIb5c2mWIEExIyf0dVKqkeazHTmkK6g x3gg== X-Gm-Message-State: AOJu0Yw5pXbFL29uTSKNUyJglzQYym57UVishCgxZlrejiHs5xF51pSm 0SmaZPLtY+QpIlMWitd1YsyTY6o32IsgUWN2nG0tV9W4B5zV3eV55n1UcuOI8m14aqlFif8Jkka QjxdP X-Gm-Gg: ASbGncsIaIN031R3mHp7l7Z1Tnl//G0jBySGicG54r/1CqjyhXxxH9OYhZ80jQF/ZUs m4RSJy8OBLCn5NeUrYCDoEvgs+LRRK/B+rx5MKhAUm7QSiknz5wbFusKIS0bYPr5beBBnNf2+M8 KsaaSN3Pzg7R58xgJnsbFxL0Y3kSoW1rc+1K2my8PHvKTTNkMc5vL0YM+zbykVABYOItmfzi4LN SlIkJyduzzIJF0k2D5iS+27e/BW6sWRbB7pfLLbNuNJzHYLNOmUqvloMRqLRZH0XugWjbXCPxnu iXlqO2TiCGH8u6zfunnKHZUUi0ry//UyYvbWzCxQOwUk08BLFKv3Cpuw6aSi5p7Mb8N+GovieTe cGAGKeWK3+DM5o6mGnPOp4RP8XjTt X-Google-Smtp-Source: AGHT+IEOwp7yBrFpj2ykLOAsvcpYVsTDMi5AA+MwGHlNEj9aY/o6Wx17ebuMIC2GGn5J9WHXam2wMw== X-Received: by 2002:a05:6a00:c85:b0:77f:472b:bc73 with SMTP id d2e1a72fcca58-77f472bbe3amr2909312b3a.6.1758566972882; Mon, 22 Sep 2025 11:49:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 05/76] target/arm: Cache NV1 early in get_phys_addr_lpae Date: Mon, 22 Sep 2025 11:48:13 -0700 Message-ID: <20250922184924.2754205-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=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 @linaro.org) X-ZM-MESSAGEID: 1758568140675116600 Content-Type: text/plain; charset="utf-8" We were not using the correct security space in the existing call to nv_nv1_enabled, because it may have been modified for NSTable. Cache it early, as we will shortly need it elsewhere as well. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/ptw.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index ebb260d54d..d6d704e2a9 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -76,6 +76,8 @@ typedef struct S1Translate { * may be suppressed for debug or AT insns. */ uint8_t in_prot_check; + /* Cached EffectiveHCR_EL2_NVx() bit */ + bool in_nv1; bool out_rw; bool out_be; ARMSecuritySpace out_space; @@ -1641,12 +1643,6 @@ static bool lpae_block_desc_valid(ARMCPU *cpu, bool = ds, } } =20 -static bool nv_nv1_enabled(CPUARMState *env, S1Translate *ptw) -{ - uint64_t hcr =3D arm_hcr_el2_eff_secstate(env, ptw->in_space); - return (hcr & (HCR_NV | HCR_NV1)) =3D=3D (HCR_NV | HCR_NV1); -} - /** * get_phys_addr_lpae: perform one stage of page table walk, LPAE format * @@ -1698,6 +1694,16 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1T= ranslate *ptw, !arm_el_is_aa64(env, 1)); level =3D 0; =20 + /* + * Cache NV1 before we adjust ptw->in_space for NSTable. + * Note that this is only relevant for EL1&0, and that + * computing it would assert for ARMSS_Root. + */ + if (el =3D=3D 1) { + uint64_t hcr =3D arm_hcr_el2_eff_secstate(env, ptw->in_space); + ptw->in_nv1 =3D (hcr & (HCR_NV | HCR_NV1)) =3D=3D (HCR_NV | HC= R_NV1); + } + /* * If TxSZ is programmed to a value larger than the maximum, * or smaller than the effective minimum, it is IMPLEMENTATION @@ -2073,7 +2079,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, xn =3D extract64(attrs, 54, 1); pxn =3D extract64(attrs, 53, 1); =20 - if (el =3D=3D 1 && nv_nv1_enabled(env, ptw)) { + if (el =3D=3D 1 && ptw->in_nv1) { /* * With FEAT_NV, when HCR_EL2.{NV,NV1} =3D=3D {1,1}, the block= /page * descriptor bit 54 holds PXN, 53 is RES0, and the effective = value --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567466; cv=none; d=zohomail.com; s=zohoarc; b=B9vHmQzjHZbIeAw95G/pPNOGSrV9Ysi87F6Syse3MZKjkHK6fHGB203Bs12J68ecZhJ9CWZ1J6/UhrsvPvHuL7BY2UI0L9Ahsm9eqDyKon9Pa1NwTEltZc3ONcXxiOHltBa64AChS/uk0qS3B7DIE0VKOq2A8ifqc/JRMeTaJEg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567466; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GeDVjFb3QFb5yHp7aGr6QIEnzzZoZpmvfgcLzDSF2qM=; b=SW0bPgxSAw6NBGkVhVdTX7TKIGKoJmjUc8emtjqEbzHpVe+97uf9Edee6RgpDvAtsqNQJOSxZS1wa4wuuQeIExVdK2rxbbQF6k2omWz28RX1LjCXDW6h0+3S04ELgkHdlLWfGo2kQyL2YUpzgF40tZyCUYizO2v+olT2k64FeCY= 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 1758567466627476.146619171761; Mon, 22 Sep 2025 11:57:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbg-0004iP-FR; Mon, 22 Sep 2025 14:49:48 -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 1v0lbZ-0004e2-7p for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:41 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbV-00044h-2G for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:40 -0400 Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-77f41f819ebso974588b3a.2 for ; Mon, 22 Sep 2025 11:49:35 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566974; x=1759171774; darn=nongnu.org; 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=GeDVjFb3QFb5yHp7aGr6QIEnzzZoZpmvfgcLzDSF2qM=; b=wr3xDf6UqQbZW+TYaqzHQGo6/9MnYOzyiq+CfT3DKrzOwfAKTDlziGl53mCREvwGax gCs26K9mKQAm2dGgtJf5PfOIr80ZwTnj6TK4HdYwWn59x5QuHj3t4INA2wyZHiA0GW+Y 1iab/gxt0O0icswuVXcJyXuQTvrs0ZgVhQRXL4W9FEPhlveUx+RMfG85dkmeTob0OGO+ Ou+ECzZ8oqoHY2Eya7zmPGDMcBSYNLWYSMkB/UpbD9Dv5KbVlYa0G23X39x0sYnDoOjG SkbS6Lm5Az72UvVelROV8hRZkYXLm6Iq3csA8QFRcYZlaaG7hfO9fzb4zopNjUgho1kF mLSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566974; x=1759171774; 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=GeDVjFb3QFb5yHp7aGr6QIEnzzZoZpmvfgcLzDSF2qM=; b=TxONgnl75IznBX6EmWraRryN8rNyc6Nh7zuxnbZWLfoiAzMB4ciyrZWaOqAd8YC8Dd 36y1GeMyzTd5OcHJfkm4qKSXLSKz3wsYvYOVthV8hePsylBHs+Nevxr1pp8Yi+tBZSvK SCdsKDn+l2i6R+552FzehDhzwuHaCddtI+02bl3gw+UJP3SyYtDni5DmxWHx6iJYhirh ZHvXFDmbVX4fmKmSt5yvUjRWpdKJxLDDObrgdaIGLpX5v2ou7mFQjLdHlTaWFetgGlCF mbX+EhzP1gKC/UguIGIaPAWJRWt2j4eZzs5PCPzb6n9r3gcya4ofjRzyiUtHc8jE3Xd+ xMgw== X-Gm-Message-State: AOJu0Yw3MVgoukZi9w7U1Xz631KTGxmjxpenk5TJ9RNCyY03Hzvm01nV sF25EUE9Xic4EqgFlBpRK6OPixrhF20MO0Kq/2SRlk8qJqmOv7sBWaZ4USdPYPo2qE5B31cDf+I 5YuJ+ X-Gm-Gg: ASbGnct+Z9h94Kl6JiLDQT9cAuqKaAGCv9tAcdwPGzLc407FPCv67SOCMzgcb8jjqYd a39TQbOA6pzvfFFgxjkyVz4YZuZzmtU8cLwgkAncBbZw6gy4F7mp9Dbx0wqrY3iovhXGmtZCEAa RjMmdezAnPZuBWbsjupdFUkqgmOnPx1irPleyslrmWifMz1lsN1iUBkas7vhh9MNFC7pQ4QYlQZ TfPshBERMTzqZf71o3seUF3aKOEiA761Uw/dTRuo8/frQgozhQmECGINcIoEJL9B/4+oiXvrzcF 2d92yS7/gdHtbCtPNGRgSP1idaI0iL/HvrOuWtVYbJmVJ4PrDZsWYNf39YoELw5MnQpauNch5iJ HtY6EslTpcABI6PaTfGQJcD2FGfax X-Google-Smtp-Source: AGHT+IFjvZn/tzbQInVqrcT0+MESyQgeoosP4/eBV7g7bYlxPvDE9KdszICBtjaWfM6j2jlV9N9Ogw== X-Received: by 2002:a05:6a00:4c16:b0:77f:d23:a1f3 with SMTP id d2e1a72fcca58-77f0d23a2d7mr15922006b3a.6.1758566974348; Mon, 22 Sep 2025 11:49:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 06/76] target/arm: Populate PIE in aa64_va_parameters Date: Mon, 22 Sep 2025 11:48:14 -0700 Message-ID: <20250922184924.2754205-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567468613116600 Content-Type: text/plain; charset="utf-8" Select the PIE bit for the translation regime. With PIE, the PTE layout changes, forcing HPD. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 3 ++- target/arm/helper.c | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index b1263e4750..b7a1b69561 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1486,7 +1486,7 @@ static inline int arm_granule_bits(ARMGranuleSize gra= n) =20 /* * Parameters of a given virtual address, as extracted from the - * translation control register (TCR) for a given regime. + * translation controls for a given regime. */ typedef struct ARMVAParameters { unsigned tsz : 8; @@ -1501,6 +1501,7 @@ typedef struct ARMVAParameters { bool ha : 1; bool hd : 1; ARMGranuleSize gran : 2; + bool pie : 1; } ARMVAParameters; =20 /** diff --git a/target/arm/helper.c b/target/arm/helper.c index f64543dc78..1111a16330 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9372,11 +9372,12 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env= , uint64_t va, bool el1_is_aa32) { uint64_t tcr =3D regime_tcr(env, mmu_idx); - bool epd, hpd, tsz_oob, ds, ha, hd; + bool epd, hpd, tsz_oob, ds, ha, hd, pie =3D false; int select, tsz, tbi, max_tsz, min_tsz, ps, sh; ARMGranuleSize gran; ARMCPU *cpu =3D env_archcpu(env); bool stage2 =3D regime_is_stage2(mmu_idx); + int r_el =3D regime_el(env, mmu_idx); =20 if (!regime_has_2_ranges(mmu_idx)) { select =3D 0; @@ -9388,8 +9389,17 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env,= uint64_t va, * Thus disabling them makes things easier during ptw. */ hpd =3D true; + pie =3D extract64(tcr, 36, 1) && cpu_isar_feature(aa64_s2pie, = cpu); } else { hpd =3D extract32(tcr, 24, 1); + if (r_el =3D=3D 3) { + pie =3D (extract64(tcr, 35, 1) + && cpu_isar_feature(aa64_s1pie, cpu)); + } else { + pie =3D ((env->cp15.tcr2_el[2] & TCR2_PIE) + && (!arm_feature(env, ARM_FEATURE_EL3) + || (env->cp15.scr_el3 & SCR_TCR2EN))); + } } epd =3D false; sh =3D extract32(tcr, 12, 2); @@ -9429,7 +9439,13 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env,= uint64_t va, regime_is_user(env, mmu_idx)) { epd =3D true; } + + pie =3D ((env->cp15.tcr2_el[r_el] & TCR2_PIE) + && (!arm_feature(env, ARM_FEATURE_EL3) + || (env->cp15.scr_el3 & SCR_TCR2EN)) + && (r_el =3D=3D 2 || (arm_hcrx_el2_eff(env) & HCRX_TCR2EN))= ); } + hpd |=3D pie; =20 gran =3D sanitize_gran_size(cpu, gran, stage2); =20 @@ -9508,6 +9524,7 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, = uint64_t va, .ha =3D ha, .hd =3D ha && hd, .gran =3D gran, + .pie =3D pie, }; } =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567212; cv=none; d=zohomail.com; s=zohoarc; b=IuKCk1Z/WqKpOoPq9TnKYZNOVdZLINuYOyOHSC76s5UrrmWExUynqeTFjpGE1LTXhLY19Hu/uZpjjUG7R8EWOqVDS7Za83IF115oipUmaS3CSlTDlizLni7UoETCxz0WHdijwT6vVlsy8rzQtaZ3+tIlNbjvBM8T/2gGqWAEwo8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567212; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Og9JNUSJhtxcO4q7du8DvVfoQI0JDprhWczIVzB4Jaw=; b=M7vSEkXVY6Ny5rOLBhOzIofEFCMkUbYtpEJVRrYdR/xKlTTqtOv4g6v0AT5dWOCD2N55DwrH5/se41h6TI1RBKW3TaqZsG8HoZkXyxMTb7+kwbggt1TfZFV0bKX4GX6mWK9qGgnUiXDoeyYrVFHEniEUhaooX4+772VSxI5BK74= 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 1758567212987493.0129529717228; Mon, 22 Sep 2025 11:53:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbk-0004lJ-PQ; Mon, 22 Sep 2025 14:49:52 -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 1v0lbf-0004gh-OQ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:47 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbW-00044q-Hq for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:47 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-77f3580ab80so1571227b3a.2 for ; Mon, 22 Sep 2025 11:49:37 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566976; x=1759171776; darn=nongnu.org; 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=Og9JNUSJhtxcO4q7du8DvVfoQI0JDprhWczIVzB4Jaw=; b=LGbNeFMdYP1Dt2Tvr/h/fZ4btB1ZqG9xED/DvHP8g+1Ta2blqm6p4UOXISjYBYyw28 PhUqUMwbGxNeGmHghUO65mFzX5jTFL9mvaTZG6yQsZwvoT4k3MngNbYnN4EnLos5Lrsi 99rS02Z7T2eLkR72Qz7WCuH0ZuGouPFDH8hqdtqh1RjHHfZIC7lLP9A95vREcPvyxU18 Akq+EpGt+xh/278sDRfKL+g4zfGO1Nb/CZ2rO8ypKDgoFdGrtb+dNp9/YXGjhwcK9kte VSRieX7kIlB/j41Ja0R6s6F3ZryyEf/RemSvz1niUlrF2qVJlND3lipn9IUql289qAFY qQVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566976; x=1759171776; 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=Og9JNUSJhtxcO4q7du8DvVfoQI0JDprhWczIVzB4Jaw=; b=nxSc3Yc5z0gOn1OgQI+jWK44AITsFxIE+vPbdC9ApI64V6e1KHj941VpASpkXQmNu8 Nvp185mBi4TLJ8uXnJPkvqoza0Vt/nVAuw6kpgn/PaoHWbpz27s2AdFlqpL4s7DECNGd W9bog8cEWufngGyrjRwDPlrJyuwlcq+a0qPLNd3jG4tvNWlviwHzsvex2202cAv7v1Qo YFbJim9PEDBfwGFzeWq1yTpE8p6ZN5rzJRLdqlQemaOijRkpINGyfnq3dUsaFyw/bIaL p6+ztcigeBGKXePteH9gbREQEq2d//NUayPJRNDGkIfFCcbFdo29GHCn9JuQQ/notGHn eG8A== X-Gm-Message-State: AOJu0YyfyE456j36dW4Go9RZpuqBHbRgtcnId0dCpO/EdTrOHTfyaDFV uyEJpMbpcP7lcanC3EXrdW8bZ1sbqobwT02Jv6yUVZoXqfoEYuwSRqmIvJNwu1jXQEzblXg0dV2 3PVoG X-Gm-Gg: ASbGncvC/Xwm5inrZF6SF13LBjz60Vil1eRMl32wPp6wZ1d1xeD1GCip6oC0qUqNtkw QRpLrxxlg6S0nZxzQ+HSqgp3R/lybd+VYe6dRD92inMKgl5nc4DH9fDjpBAjdRwQoprmcs0602c RqYaJk4IeuPUaf80kLhMTHZCR4cpKx5XiCnyJpjAN/BOajs9WxPNy9wNPYCPuwAfkPf4RGvLUik s61S5DCTeuKgTT20z2QX+o/smr/+8qHGRpqYFYDMXZindYPamx09oh4YVn/9CaE+ZgfAFtkJdan Ibg/iZAjEDXrrUD+pdmeoCm/OBWmIjarjSWeMVC3stZJKomgMupFyqzJt3T8i3EJ6jqND68M18X o/HfrMAjEDKYT/BS7KoVDsJUwkaN+ X-Google-Smtp-Source: AGHT+IGdWYZL90qwpY09ICZdypBV24pVOOo/K8jdSfx+E4CZvwPzjpIGQ+J5lVLJ3HlG+kic6iBBTg== X-Received: by 2002:a05:6a20:a10c:b0:246:7032:2c1d with SMTP id adf61e73a8af0-2cfdfe1be61mr116046637.23.1758566975680; Mon, 22 Sep 2025 11:49:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 07/76] target/arm: Implement get_S1prot_indirect Date: Mon, 22 Sep 2025 11:48:15 -0700 Message-ID: <20250922184924.2754205-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567213662116600 Content-Type: text/plain; charset="utf-8" This approximately corresponds to AArch64.S1IndirectBasePermissions and the tail of AArch64.S1ComputePermissions which applies WXN. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/ptw.c | 169 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 143 insertions(+), 26 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index d6d704e2a9..4fb4436db1 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1448,6 +1448,106 @@ static int get_S1prot(CPUARMState *env, ARMMMUIdx m= mu_idx, bool is_aa64, return prot_rw | PAGE_EXEC; } =20 +/* Extra page permission bits, during get_S1prot_indirect only. */ +#define PAGE_GCS (1 << 3) +#define PAGE_WXN (1 << 4) +#define PAGE_OVERLAY (1 << 5) +QEMU_BUILD_BUG_ON(PAGE_RWX & (PAGE_GCS | PAGE_WXN | PAGE_OVERLAY)); + +static int get_S1prot_indirect(CPUARMState *env, S1Translate *ptw, + ARMMMUIdx mmu_idx, int pi_index, int po_ind= ex, + ARMSecuritySpace in_pa, ARMSecuritySpace ou= t_pa) +{ + static const uint8_t perm_table[16] =3D { + /* 0 */ PAGE_OVERLAY, /* no access */ + /* 1 */ PAGE_OVERLAY | PAGE_READ, + /* 2 */ PAGE_OVERLAY | PAGE_EXEC, + /* 3 */ PAGE_OVERLAY | PAGE_READ | PAGE_EXEC, + /* 4 */ PAGE_OVERLAY, /* reserved */ + /* 5 */ PAGE_OVERLAY | PAGE_READ | PAGE_WRITE, + /* 6 */ PAGE_OVERLAY | PAGE_READ | PAGE_WRITE | PAGE_EXEC | PAGE_W= XN, + /* 7 */ PAGE_OVERLAY | PAGE_READ | PAGE_WRITE | PAGE_EXEC, + /* 8 */ PAGE_READ, + /* 9 */ PAGE_READ | PAGE_GCS, + /* A */ PAGE_READ | PAGE_EXEC, + /* B */ 0, /* reserved */ + /* C */ PAGE_READ | PAGE_WRITE, + /* D */ 0, /* reserved */ + /* E */ PAGE_READ | PAGE_WRITE | PAGE_EXEC, + /* F */ 0, /* reserved */ + }; + + uint32_t el =3D regime_el(env, mmu_idx); + uint64_t pir =3D env->cp15.pir_el[el]; + uint64_t pire0 =3D 0; + int perm; + + if (el < 3) { + if (arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_PIEN)) { + pir =3D 0; + } else if (el =3D=3D 2) { + pire0 =3D env->cp15.pire0_el2; + } else if (!ptw->in_nv1) { + pire0 =3D env->cp15.pir_el[0]; + } + } + perm =3D perm_table[extract64(pir, pi_index * 4, 4)]; + + if (regime_has_2_ranges(mmu_idx)) { + int p_perm =3D perm; + int u_perm =3D perm_table[extract64(pire0, pi_index * 4, 4)]; + + if ((p_perm & (PAGE_EXEC | PAGE_GCS)) && + (u_perm & (PAGE_WRITE | PAGE_GCS))) { + p_perm &=3D ~(PAGE_RWX | PAGE_GCS); + u_perm &=3D ~(PAGE_RWX | PAGE_GCS); + } + if ((u_perm & (PAGE_RWX | PAGE_GCS)) && regime_is_pan(env, mmu_idx= )) { + p_perm &=3D ~(PAGE_READ | PAGE_WRITE); + } + perm =3D regime_is_user(env, mmu_idx) ? u_perm : p_perm; + } + + if (in_pa !=3D out_pa) { + switch (in_pa) { + case ARMSS_Root: + /* + * R_ZWRVD: permission fault for insn fetched from non-Root, + * I_WWBFB: SIF has no effect in EL3. + */ + perm &=3D ~(PAGE_EXEC | PAGE_GCS); + break; + case ARMSS_Realm: + /* + * R_PKTDS: permission fault for insn fetched from non-Realm, + * for Realm EL2 or EL2&0. The corresponding fault for EL1&0 + * happens during any stage2 translation. + */ + if (el =3D=3D 2) { + perm &=3D ~(PAGE_EXEC | PAGE_GCS); + } + break; + case ARMSS_Secure: + if (env->cp15.scr_el3 & SCR_SIF) { + perm &=3D ~(PAGE_EXEC | PAGE_GCS); + } + break; + default: + /* Input NonSecure must have output NonSecure. */ + g_assert_not_reached(); + } + } + + if (perm & PAGE_WXN) { + perm &=3D ~PAGE_EXEC; + } + + /* TODO: FEAT_GCS */ + + return perm & PAGE_RWX; +} + static ARMVAParameters aa32_va_parameters(CPUARMState *env, uint32_t va, ARMMMUIdx mmu_idx) { @@ -1677,7 +1777,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, int32_t stride; int addrsize, inputsize, outputsize; uint64_t tcr =3D regime_tcr(env, mmu_idx); - int ap, xn, pxn; + int ap; uint32_t el =3D regime_el(env, mmu_idx); uint64_t descaddrmask; bool aarch64 =3D arm_el_is_aa64(env, el); @@ -2011,7 +2111,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, out_space =3D ARMSS_NonSecure; result->f.prot =3D get_S2prot_noexecute(ap); } else { - xn =3D extract64(attrs, 53, 2); + int xn =3D extract64(attrs, 53, 2); result->f.prot =3D get_S2prot(env, ap, xn, ptw->in_s1_is_el0); } =20 @@ -2027,7 +2127,6 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, int nse, ns =3D extract32(attrs, 5, 1); uint8_t attrindx; uint64_t mair; - int user_rw, prot_rw; =20 switch (out_space) { case ARMSS_Root: @@ -2076,33 +2175,51 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1= Translate *ptw, default: g_assert_not_reached(); } - xn =3D extract64(attrs, 54, 1); - pxn =3D extract64(attrs, 53, 1); =20 - if (el =3D=3D 1 && ptw->in_nv1) { + if (param.pie) { + int pi =3D extract64(attrs, 6, 1) + | (extract64(attrs, 51, 1) << 1) + | (extract64(attrs, 53, 2) << 2); + int po =3D extract64(attrs, 60, 3); /* - * With FEAT_NV, when HCR_EL2.{NV,NV1} =3D=3D {1,1}, the block= /page - * descriptor bit 54 holds PXN, 53 is RES0, and the effective = value - * of UXN is 0. Similarly for bits 59 and 60 in table descript= ors - * (which we have already folded into bits 53 and 54 of attrs). - * AP[1] (descriptor bit 6, our ap bit 0) is treated as 0. - * Similarly, APTable[0] from the table descriptor is treated = as 0; - * we already folded this into AP[1] and squashing that to 0 d= oes - * the right thing. + * Note that we modified ptw->in_space earlier for NSTable, but + * result->f.attrs retains a copy of the original security spa= ce. */ - pxn =3D xn; - xn =3D 0; - ap &=3D ~1; - } + result->f.prot =3D get_S1prot_indirect(env, ptw, mmu_idx, pi, = po, + result->f.attrs.space, + out_space); + } else { + int xn =3D extract64(attrs, 54, 1); + int pxn =3D extract64(attrs, 53, 1); + int user_rw, prot_rw; =20 - user_rw =3D simple_ap_to_rw_prot_is_user(ap, true); - prot_rw =3D simple_ap_to_rw_prot_is_user(ap, false); - /* - * Note that we modified ptw->in_space earlier for NSTable, but - * result->f.attrs retains a copy of the original security space. - */ - result->f.prot =3D get_S1prot(env, mmu_idx, aarch64, user_rw, prot= _rw, - xn, pxn, result->f.attrs.space, out_sp= ace); + if (el =3D=3D 1 && ptw->in_nv1) { + /* + * With FEAT_NV, when HCR_EL2.{NV,NV1} =3D=3D {1,1}, + * the block/page descriptor bit 54 holds PXN, + * 53 is RES0, and the effective value of UXN is 0. + * Similarly for bits 59 and 60 in table descriptors + * (which we have already folded into bits 53 and 54 of at= trs). + * AP[1] (descriptor bit 6, our ap bit 0) is treated as 0. + * Similarly, APTable[0] from the table descriptor is trea= ted + * as 0; we already folded this into AP[1] and squashing + * that to 0 does the right thing. + */ + pxn =3D xn; + xn =3D 0; + ap &=3D ~1; + } + + user_rw =3D simple_ap_to_rw_prot_is_user(ap, true); + prot_rw =3D simple_ap_to_rw_prot_is_user(ap, false); + /* + * Note that we modified ptw->in_space earlier for NSTable, but + * result->f.attrs retains a copy of the original security spa= ce. + */ + result->f.prot =3D get_S1prot(env, mmu_idx, aarch64, + user_rw, prot_rw, xn, pxn, + result->f.attrs.space, out_space); + } =20 /* Index into MAIR registers for cache attributes */ attrindx =3D extract32(attrs, 2, 3); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567196; cv=none; d=zohomail.com; s=zohoarc; b=mhr7vPB18MNmnpdmFCOeNBHaHsJmemZZX445MIxrJfLlz2OZWQM4H/h3cR6J7ewwWAx6Ua3yHmsKs+keZoNqFHmX7FMrSMBiyeoTlg+KqyQ2Fags/RlBNaTQ/4g7EQwOHQ5PfRZV5d5ssRTSQHWpQh6Yn7Fp0vtybXiMbJtbqlo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567196; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=w2rBRozKEd87zp0jXWm3YMjmof4kQNhr2ot0ultU52Y=; b=IgPSa5GbFMsm2cdpTDLghnovHPU7N2VpuwOnb4So+/8vAae32VWMrGK0GMzZEs42SmAgGnXip+WpnSO7MOp0QkzvnW9oSaMZMiHmFJO4hjpUgPRE+0+PrWEVIyTqMJl23RhOVjlHKoAVXA6VXNdCBIUggnovlW+nUffk+FekEJM= 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 1758567196770498.23130881958843; Mon, 22 Sep 2025 11:53:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbj-0004ju-HV; Mon, 22 Sep 2025 14:49:51 -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 1v0lbf-0004fU-Ex for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:47 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbW-00045Z-IF for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:43 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-77f41086c11so1129101b3a.0 for ; Mon, 22 Sep 2025 11:49:38 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566977; x=1759171777; darn=nongnu.org; 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=w2rBRozKEd87zp0jXWm3YMjmof4kQNhr2ot0ultU52Y=; b=vm25QWfmp1ZbnIH9B4CuHAjkAXuOznUr2gCCM7QGEJDtq2tHdm0Wal8Gh+xCZLN4nO MTjRe4I0vZaiAAKVrwFxiYSXWfBHtH8pIskPnonwCTUDsspAAmsCPNgGbGeAIb6Zgn2N AShxKfoFvEeALwZ+tzXJQTZvr+du5B2DQ0JfZQX4qAbDMFwpT+bOINSJK+Yex1rWmLDE V5axznxaQcMvx2+qyPT1WOJwPJelYcxtbo/7ifTnr38oIRvQTnutSJn5PGd3VUX/istz s2+4DezHEPcgvb/c/LGslKoVA75djce4tPff8T1ipQs6fmi5yV83CPwfpsNcsUaoUUm5 U2rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566977; x=1759171777; 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=w2rBRozKEd87zp0jXWm3YMjmof4kQNhr2ot0ultU52Y=; b=aKkMfuagYDn4U/24ka7GIDNT6pyP8H6vHXkc5c+zpUOmqitx7x2ZJkQtwUBMvhbj5y iW1RDysJf8Ht2Xv9KbZqPqWvAfPzkjbJnWKrck4b8Cx12ickfdLYI38I+ZS62yWRDF1a Rkcq9o7hjEKT6NxFmYtoNsIPefbQ7rkACWabkVGT7JrP73dxKTBh0FpIxTMewhdntzWE cbT3XAeRrCbHOKwki6PDnE2kEU3FcS2p+0yKtt7hX9KzY5OlX7C0TEFyw16M1T3fBxEw OAnJQ48dU+MHsSnXzrvxZtBAECf2960TeGtlONm+5o0hFCLC8Uw6bOZ3HiFcFrpJZL9d CvUg== X-Gm-Message-State: AOJu0Yw+wa1qScd6SYsk7iHnb9YVmRAzIlX+k6lugdyXfCMIkhOuwEoy R2uhFmRRJnC6k+XMi6jmOBIWffEaEswI3V7DBF77brmGvx1e9Y9eMTdN3Jv3e6uNsLz+vIsuR0B GDoLr X-Gm-Gg: ASbGncurL3rUWlMjdae1TNh8iBS2yd7kHWZbiT2WiCrTIhaVEEQ5d8Kry3tjaxR2gxd VapqfBjAUa+R8A59enh+DNdu4yKcswd/sDGTK6V9nsjo6lDP6H433tofnLpw8QqklNtaxZDYIJB 8/FA2ateTtEikEDDD/MN+xfUVfKsWLKm3PsGS3WNKZR5l77AIIaR/CKmEgP0JuSN46FpxxZXfhL ZhMU2m23u8lhTulUls0K8eOIeTV+bNnMJhnlOXSlh/ia5VnZFsliakdPGYdSXVzeWzPsvoTmmvq wnoeFlXFFHpwMy/odl8rU6Dmr2TOmQ6bJSVmcjFyrYpkM6N39IspSyURTS0q2Q334VFPAzvxHAo onf1twJ0qbBhV9CcC8OFqOe0Jmnjyhl0bC1n0Q1w= X-Google-Smtp-Source: AGHT+IGcZkuu58nGoulniswH9n8OgRK7reB6bHSUbs+eDGr5jRp99dCxcIRVIJjF9ZIXfJycucRD3g== X-Received: by 2002:a05:6a00:2194:b0:77f:2978:30b0 with SMTP id d2e1a72fcca58-77f29783c90mr7096659b3a.11.1758566976669; Mon, 22 Sep 2025 11:49:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 08/76] target/arm: Implement get_S2prot_indirect Date: Mon, 22 Sep 2025 11:48:16 -0700 Message-ID: <20250922184924.2754205-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567197478116600 Content-Type: text/plain; charset="utf-8" Move the stage2 permissions for normal accesses to GetPhysAddrResult.s2prot. Put the stage2 permissions for page table walking in CPUTLBEntryFull.prot. This allows the permission checks in S1_ptw_translate and arm_casq_ptw to see the right permission. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 7 ++++ target/arm/ptw.c | 81 +++++++++++++++++++++++++++++++----------- 2 files changed, 68 insertions(+), 20 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index b7a1b69561..aa41054af0 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1572,6 +1572,13 @@ typedef struct ARMCacheAttrs { typedef struct GetPhysAddrResult { CPUTLBEntryFull f; ARMCacheAttrs cacheattrs; + /* + * For ARMMMUIdx_Stage2*, the protection installed into f.prot + * is the result for AccessType_TTW, i.e. the page table walk itself. + * The protection installed info s2prot is the one to be merged + * with the stage1 protection. + */ + int s2prot; } GetPhysAddrResult; =20 /** diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 4fb4436db1..6dcd3adbdf 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1280,7 +1280,7 @@ do_fault: * @xn: XN (execute-never) bits * @s1_is_el0: true if this is S2 of an S1+2 walk for EL0 */ -static int get_S2prot_noexecute(int s2ap) +static int get_S2prot(CPUARMState *env, int s2ap, int xn, bool s1_is_el0) { int prot =3D 0; =20 @@ -1290,12 +1290,6 @@ static int get_S2prot_noexecute(int s2ap) if (s2ap & 2) { prot |=3D PAGE_WRITE; } - return prot; -} - -static int get_S2prot(CPUARMState *env, int s2ap, int xn, bool s1_is_el0) -{ - int prot =3D get_S2prot_noexecute(s2ap); =20 if (cpu_isar_feature(any_tts2uxn, env_archcpu(env))) { switch (xn) { @@ -1327,6 +1321,44 @@ static int get_S2prot(CPUARMState *env, int s2ap, in= t xn, bool s1_is_el0) return prot; } =20 +static int get_S2prot_indirect(CPUARMState *env, GetPhysAddrResult *result, + int pi_index, int po_index, bool s1_is_el0) +{ + /* Last index is (priv, unpriv, ttw) */ + static const uint8_t perm_table[16][3] =3D { + /* 0 */ { 0, 0, 0 }, /* no access */ + /* 1 */ { 0, 0, 0 }, /* reserved */ + /* 2 */ { PAGE_READ, PAGE_READ, PAGE_READ | PAGE_WRITE }, + /* 3 */ { PAGE_READ, PAGE_READ, PAGE_READ | PAGE_WRITE }, + /* 4 */ { PAGE_WRITE, PAGE_WRITE, 0 }, + /* 5 */ { 0, 0, 0 }, /* reserved */ + /* 6 */ { PAGE_READ, PAGE_READ, PAGE_READ | PAGE_WRITE }, + /* 7 */ { PAGE_READ, PAGE_READ, PAGE_READ | PAGE_WRITE }, + /* 8 */ { PAGE_READ, PAGE_READ, PAGE_READ }, + /* 9 */ { PAGE_READ, PAGE_READ | PAGE_EXEC, PAGE_READ }, + /* A */ { PAGE_READ | PAGE_EXEC, PAGE_READ, PAGE_READ }, + /* B */ { PAGE_READ | PAGE_EXEC, PAGE_READ | PAGE_EXEC, PAGE_READ = }, + /* C */ { PAGE_READ | PAGE_WRITE, + PAGE_READ | PAGE_WRITE, + PAGE_READ | PAGE_WRITE }, + /* D */ { PAGE_READ | PAGE_WRITE, + PAGE_READ | PAGE_WRITE | PAGE_EXEC, + PAGE_READ | PAGE_WRITE }, + /* E */ { PAGE_READ | PAGE_WRITE | PAGE_EXEC, + PAGE_READ | PAGE_WRITE, + PAGE_READ | PAGE_WRITE }, + /* F */ { PAGE_READ | PAGE_WRITE | PAGE_EXEC, + PAGE_READ | PAGE_WRITE | PAGE_EXEC, + PAGE_READ | PAGE_WRITE }, + }; + + uint64_t pir =3D (env->cp15.scr_el3 & SCR_PIEN ? env->cp15.s2pir_el2 := 0); + int s2pi =3D extract64(pir, pi_index * 4, 4); + + result->f.prot =3D perm_table[s2pi][2]; + return perm_table[s2pi][s1_is_el0]; +} + /* * Translate section/page access permissions to protection flags * @env: CPUARMState @@ -1777,7 +1809,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, int32_t stride; int addrsize, inputsize, outputsize; uint64_t tcr =3D regime_tcr(env, mmu_idx); - int ap; + int ap, prot; uint32_t el =3D regime_el(env, mmu_idx); uint64_t descaddrmask; bool aarch64 =3D arm_el_is_aa64(env, el); @@ -2101,6 +2133,18 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1T= ranslate *ptw, ap =3D extract32(attrs, 6, 2); out_space =3D ptw->in_space; if (regime_is_stage2(mmu_idx)) { + if (param.pie) { + int pi =3D extract64(attrs, 6, 1) + | (extract64(attrs, 51, 1) << 1) + | (extract64(attrs, 53, 2) << 2); + int po =3D extract64(attrs, 60, 3); + prot =3D get_S2prot_indirect(env, result, pi, po, ptw->in_s1_i= s_el0); + } else { + int xn =3D extract64(attrs, 53, 2); + prot =3D get_S2prot(env, ap, xn, ptw->in_s1_is_el0); + /* Install TTW permissions in f.prot. */ + result->f.prot =3D prot & (PAGE_READ | PAGE_WRITE); + } /* * R_GYNXY: For stage2 in Realm security state, bit 55 is NS. * The bit remains ignored for other security states. @@ -2109,11 +2153,9 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1T= ranslate *ptw, */ if (out_space =3D=3D ARMSS_Realm && extract64(attrs, 55, 1)) { out_space =3D ARMSS_NonSecure; - result->f.prot =3D get_S2prot_noexecute(ap); - } else { - int xn =3D extract64(attrs, 53, 2); - result->f.prot =3D get_S2prot(env, ap, xn, ptw->in_s1_is_el0); + prot &=3D ~PAGE_EXEC; } + result->s2prot =3D prot; =20 result->cacheattrs.is_s2_format =3D true; result->cacheattrs.attrs =3D extract32(attrs, 2, 4); @@ -2185,9 +2227,8 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, * Note that we modified ptw->in_space earlier for NSTable, but * result->f.attrs retains a copy of the original security spa= ce. */ - result->f.prot =3D get_S1prot_indirect(env, ptw, mmu_idx, pi, = po, - result->f.attrs.space, - out_space); + prot =3D get_S1prot_indirect(env, ptw, mmu_idx, pi, po, + result->f.attrs.space, out_space); } else { int xn =3D extract64(attrs, 54, 1); int pxn =3D extract64(attrs, 53, 1); @@ -2216,10 +2257,10 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1= Translate *ptw, * Note that we modified ptw->in_space earlier for NSTable, but * result->f.attrs retains a copy of the original security spa= ce. */ - result->f.prot =3D get_S1prot(env, mmu_idx, aarch64, - user_rw, prot_rw, xn, pxn, - result->f.attrs.space, out_space); + prot =3D get_S1prot(env, mmu_idx, aarch64, user_rw, prot_rw, x= n, pxn, + result->f.attrs.space, out_space); } + result->f.prot =3D prot; =20 /* Index into MAIR registers for cache attributes */ attrindx =3D extract32(attrs, 2, 3); @@ -2265,7 +2306,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, result->f.tlb_fill_flags =3D 0; } =20 - if (ptw->in_prot_check & ~result->f.prot) { + if (ptw->in_prot_check & ~prot) { fi->type =3D ARMFault_Permission; goto do_fault; } @@ -3463,7 +3504,7 @@ static bool get_phys_addr_twostage(CPUARMState *env, = S1Translate *ptw, fi->s2addr =3D ipa; =20 /* Combine the S1 and S2 perms. */ - result->f.prot &=3D s1_prot; + result->f.prot =3D s1_prot & result->s2prot; =20 /* If S2 fails, return early. */ if (ret) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567109; cv=none; d=zohomail.com; s=zohoarc; b=g4SF3dEQXiq7m+03LssZ2b/QcqEE+J3keeBDro/IRX11D2q55T17DAn+iP/2xIy8AyGNEmgx3GibYoh2ZU1g/h70Afs+oddP+x0ZlrSX/fUlCpFsbLQov5FAKFgygQoQmphw1Ok7+om8mksUUuNnI3hbMoGwBxk44w0JjAJGvUs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567109; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qtUZ/Uu6kwNI+zAAOhv8j6MlV2cWVEsAAEi36fFJ9wU=; b=SEE1JZmPVhqhnP8S2hTmnhgO2JgyDDnC4Ly81tiTMWsQNScBchdtSMd0BkC0257dfXhrRFDgjsm55Su6qoXME/kHli3lagETjL0HPxsoDDowxMKXkG8Qweh+/y2oQzCe4Dsghhn8P5nzj/I7O0XOFZfhXBa6rFU3q5Za9JILrc8= 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 1758567109524629.5027205400517; Mon, 22 Sep 2025 11:51:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbk-0004kd-FU; Mon, 22 Sep 2025 14:49:52 -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 1v0lbf-0004gg-NH for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:47 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbY-000464-HA for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:47 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-77dedf198d4so5063582b3a.0 for ; Mon, 22 Sep 2025 11:49:38 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566978; x=1759171778; darn=nongnu.org; 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=qtUZ/Uu6kwNI+zAAOhv8j6MlV2cWVEsAAEi36fFJ9wU=; b=OjDWBZMBLjnpJc7x6Aa4QgdSzygtjvRhUpowCykKcdF/9fRqJ4sdQHV3eIb7F+GsVn q3Fg0i+yttFksUw28ORI69sG4/BYFqBpzhc8M1cD3WAz8z7ZzFcsXlc0bK6q7pRbw+SZ jDaSKX7iYBwvfzcIF3joFtQd5I1mfrgpvBCtI7AdidzrweaUAP8vJMIASv0VOXFwWM/b j8sDrLwx6qcZVyWKcY0snGv71L8POmLLXzw6F9t8nt39i1B2+TwVaSsUl9wsjAGYLRlX 87VhMpDtAfC5Kda5jEMxT5nNJS2M6N043X+paHsK2pIfGXwBlmQD8HwjC5b094PtvFT5 RYEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566978; x=1759171778; 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=qtUZ/Uu6kwNI+zAAOhv8j6MlV2cWVEsAAEi36fFJ9wU=; b=APLNyfbdIv4qluwfzNavljD0RBb7v12Tf3ZPfBamC8LQOIzDYwssLkKC+70C+uoJkE sKqQHjYuFbcWGdupzUGLKHEqv6cvq+v+UxBUAKwSiebK6jgaiFSRqmIe7FwIa8NUlFJk KS+z0MK6jRPw/59fVGqBV19NnpIRDshxwYvSOEtAeTXp0jgVO1MrPfRlUqMMFwa4LRhG tzQMbAP4rsvnYFISTpxgNSB+Lyhu+3VSzXmVhqd4mTevuvcZDdbaRUFjKpvmsslWrux0 wywXlK79cG4dgxZhZs3bWHZr9qgXmQ06QsOI4pG/buqeNW7QAmQ+B+gqBiFDDQNMoQQd r/Hw== X-Gm-Message-State: AOJu0YwTh6jkj5RDOL+AC6UxytS/1N5OB+nVf+h1szw/iLZqZFq+QyDh Lmp3XWYQaXMH6KAIS7UlPx3chZM7uTZPJhkwu53eMJMEyVwSut+/qKz9arEHnUMF0cKPyQSkLd5 xaXcp X-Gm-Gg: ASbGnct4qabVt3iY5ZZZKeIUQIbn5vqeT4CPtzJvx8ux30Ona25zsfuS7dfw+lWn4vp SELL2hwhY5PxgopM8SN5sZclaLMM4ndCOXH0LJAaz2b75Ho6CdapGz2p9cAiT625smD6WY7y1OJ hUAiq/kfg38J3CvL/4jA1DbJu50apbzNHMlqeM0fOaOEK5zmWCOtT+CX92wAzXwj6ewhsfkSNdr hSTuvQ4HOMIAw1kFFlrcbiO3J3THIuo20j+rdQwrseZ9xjceqI8C/NKKeLP7/gh8jkZYYJ+dFjF iRyXca5iSmN+HDRgl1RfmxEaOdMKSY0QdjYEv8HsPc7J1s1txygjLE15smZi0EfZmcKqObnNf40 B8bFUT6p0coKgw22o17dh+5UX2lpT X-Google-Smtp-Source: AGHT+IESM/forMLR2F+S29Rci4k5HQuQ8p3sORu0O/CLXi5/n/5F+jspnyzO2DfHSPetAMQXPz4UMw== X-Received: by 2002:a05:6a00:230a:b0:77f:3e56:c1c0 with SMTP id d2e1a72fcca58-77f3e56d116mr5522665b3a.32.1758566977707; Mon, 22 Sep 2025 11:49:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 09/76] target/arm: Expand CPUARMState.exception.syndrome to 64 bits Date: Mon, 22 Sep 2025 11:48:17 -0700 Message-ID: <20250922184924.2754205-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567110296116600 Content-Type: text/plain; charset="utf-8" This will be used for storing the ISS2 portion of the ESR_ELx registers in aarch64 state. Re-order the fsr member to eliminate two structure holes. Drop the comment about "if we implement EL2" since we have already done so. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu.h | 7 ++----- target/arm/helper.c | 2 +- target/arm/machine.c | 32 +++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d17252f734..4dd4c6d4bf 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -633,13 +633,10 @@ typedef struct CPUArchState { * entry process. */ struct { - uint32_t syndrome; /* AArch64 format syndrome register */ - uint32_t fsr; /* AArch32 format fault status register info */ + uint64_t syndrome; /* AArch64 format syndrome register */ uint64_t vaddress; /* virtual addr associated with exception, if a= ny */ + uint32_t fsr; /* AArch32 format fault status register info */ uint32_t target_el; /* EL the exception should be targeted for */ - /* If we implement EL2 we will also need to store information - * about the intermediate physical address for stage 2 faults. - */ } exception; =20 /* Information associated with an SError */ diff --git a/target/arm/helper.c b/target/arm/helper.c index 1111a16330..f66868f9ef 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9182,7 +9182,7 @@ void arm_cpu_do_interrupt(CPUState *cs) new_el); if (qemu_loglevel_mask(CPU_LOG_INT) && !excp_is_internal(cs->exception_index)) { - qemu_log_mask(CPU_LOG_INT, "...with ESR 0x%x/0x%" PRIx32 "\n", + qemu_log_mask(CPU_LOG_INT, "...with ESR 0x%x/0x%" PRIx64 "\n", syn_get_ec(env->exception.syndrome), env->exception.syndrome); } diff --git a/target/arm/machine.c b/target/arm/machine.c index 6666a0c50c..ce20b46f50 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -848,6 +848,23 @@ static const VMStateInfo vmstate_powered_off =3D { .put =3D put_power, }; =20 +static bool syndrome64_needed(void *opaque) +{ + ARMCPU *cpu =3D opaque; + return cpu->env.exception.syndrome > UINT32_MAX; +} + +static const VMStateDescription vmstate_syndrome64 =3D { + .name =3D "cpu/syndrome64", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D syndrome64_needed, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT64(env.exception.syndrome, ARMCPU), + VMSTATE_END_OF_LIST() + }, +}; + static int cpu_pre_save(void *opaque) { ARMCPU *cpu =3D opaque; @@ -1065,7 +1082,19 @@ const VMStateDescription vmstate_arm_cpu =3D { VMSTATE_UINT64(env.exclusive_val, ARMCPU), VMSTATE_UINT64(env.exclusive_high, ARMCPU), VMSTATE_UNUSED(sizeof(uint64_t)), - VMSTATE_UINT32(env.exception.syndrome, ARMCPU), + /* + * If any bits are set in the upper 32 bits of syndrome, + * then the cpu/syndrome64 subsection will override this + * with the full 64 bit state. + */ + { + .name =3D "env.exception.syndrome", + .version_id =3D 0, + .size =3D sizeof(uint32_t), + .info =3D &vmstate_info_uint32, + .flags =3D VMS_SINGLE, + .offset =3D offsetoflow32(ARMCPU, env.exception.syndrome), + }, VMSTATE_UINT32(env.exception.fsr, ARMCPU), VMSTATE_UINT64(env.exception.vaddress, ARMCPU), VMSTATE_TIMER_PTR(gt_timer[GTIMER_PHYS], ARMCPU), @@ -1098,6 +1127,7 @@ const VMStateDescription vmstate_arm_cpu =3D { &vmstate_serror, &vmstate_irq_line_state, &vmstate_wfxt_timer, + &vmstate_syndrome64, NULL } }; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567181; cv=none; d=zohomail.com; s=zohoarc; b=NJ69jMGBjlFDW/OXG5V6tcH7mE7XBWys9LOGLfHL84WODKugrb2kCrIL+XLr7K23ikJJvaCIrxjcnQFbhzmKhalRJw+W8oEqxMyKN5jx9MEz/UPWjHWQ6L+sQgaDsy/k11KuuS0mGm5eTzrRbWw38ZYYs+n8w5MpoBTHWh7+79I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567181; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5qYsKVv/0Yzl1Fc8tjOv531eP5nXOOQ3pSGhOVd0kDg=; b=lO3huKgavZKvqzdZIdLyqf3BVzH1sepY9k0/P9Xaj2MCsAKdWNLfotXiBaZ/+h7X/6bXK9663jWCOZ/a/AgYnnXwp7ACmx43HHpP45q9VYFVSETBoIu8ArqDQs2dnU5POcrmVNCBiJ2H7BRG4LBaj3rCueiIiLBEn7a0q6O+1hQ= 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 1758567181511446.1698338124578; Mon, 22 Sep 2025 11:53:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbk-0004kl-Hg; Mon, 22 Sep 2025 14:49:52 -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 1v0lbg-0004ie-Iu for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:48 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lba-00046J-Px for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:48 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-7704f3c46ceso4374479b3a.2 for ; Mon, 22 Sep 2025 11:49:41 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566979; x=1759171779; darn=nongnu.org; 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=5qYsKVv/0Yzl1Fc8tjOv531eP5nXOOQ3pSGhOVd0kDg=; b=pZrdmiMIkso0FIjmqoLxRAQQCcsThnrj3LpMZcX8YMecJoDk/MyeNWT2f3joHf+blC opA4g1Xw7oV15En5I190ddpA01lHfHsoveF2Wg0QqOoQjh2+4UtM/Fxcu2hpNBi3Iqx8 I3nh7HXfGl1H2WMBbDedNTcB301Ne/kuIgILJQjsVaPRFoGn1FJXG3rqp47h7If5+DnH 4XZteZ8UzHiyluCT/iYPW69lfVJCpeE1rMyW8wrfaqnPclNhsG1QL7JDcF+YhJL1Yjai WexAslM5nizOGNLcyaFoocxwJiKTcA7hZASHra0KqmM6OT9Fs7FrV9K1wU51Hy3AYROx /H4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566979; x=1759171779; 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=5qYsKVv/0Yzl1Fc8tjOv531eP5nXOOQ3pSGhOVd0kDg=; b=VAP3Gyh7DnluNMhrYtYhHgG7VdHmcUjo8Q2OSLrtG1vG1AmHN0hnFO3qcAz6sftDXL yCIy2rQT2Nw8xPyGqn6u7NVFoe/EF94sBvaeiQPKcSyBMgIzolOlzC4gl3c+ZMDKbk06 lAkBz1D0Qzq03kj5ZOhCtYAobxNhndBGLMsob+RMpIUGvOS9PvHN5nhiRHV1rygEnJGR A1rid67+8EXT6wl/rx3LyeHrxlQdSKgTptj4EhLD5qoMXq4edBS5VshUH190dQsmPZLY UNLOp8hgNBikQckbrBwC+SlytrTBgWCMgmu6KbJNlXZEPft76thGiUhLhclaGPfcz3hA 5NUQ== X-Gm-Message-State: AOJu0YzS7/hn1xf2t/Jf4F5LGOf0QAkk04QVLJKKIDszCq/CVZMF9jJU XP7Njk7R1jI8fPiFTBxSaxbVefko4s04bwXnhp73EYczPnzQ9zHlcdCI3Wqx/lEyq43s/3I+nW6 SqsjL X-Gm-Gg: ASbGncsynieaApOPQ9Hq3dgbg2PldNSOLlz9RAnqyJ/9WgGMww7qGh4wb/56UNLKhqM oSkbobXtsDFNZDG9fH7UpympDOOlyNPQu/AAWSvLKJAMWhwCjbXSHz7e0+9a1rLJ4833NGqTk2M ZYVlYCseHC5gf588+eGteMeswC99cwsjB14Pxhs6wv0GSTPPMWkCRZ0GQaU3Epd5scwWAwq6kzQ O3DAU3WUJft4okKOB2T9w/4Zi3PeEfaA6h1kYK4zT/KPb2SbLL1HcKpUxk2B+tReTVHsfX37jz4 D46ZjpnZwINL2/r9Mejkqy/d7Adb4S/LC3mWNZwJqYCk3ficMRa0EDakIKj2Hw4iXipvrcZ+CE+ 9XzDhUw5vqBxWmdWQXG1wDUeHp/kc X-Google-Smtp-Source: AGHT+IGUOwMwENYtjwI4BovoztmW5nJb5378E6zXA1gZpZM4cCkZ6p0m0eKdHfsWz+x+zCboEQRO+g== X-Received: by 2002:a05:6a20:3ca7:b0:252:9bf:ad80 with SMTP id adf61e73a8af0-2cff12bbe5fmr115904637.54.1758566978885; Mon, 22 Sep 2025 11:49:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 10/76] target/arm: Expand syndrome parameter to raise_exception* Date: Mon, 22 Sep 2025 11:48:18 -0700 Message-ID: <20250922184924.2754205-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567183091116600 Content-Type: text/plain; charset="utf-8" Prepare for raising exceptions with 64-bit syndromes. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 6 +++--- target/arm/tcg-stubs.c | 2 +- target/arm/tcg/op_helper.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index aa41054af0..0ebcf566ec 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -304,14 +304,14 @@ FIELD(CNTHCTL, CNTPMASK, 19, 1) * and never returns because we will longjump back up to the CPU main loop. */ G_NORETURN void raise_exception(CPUARMState *env, uint32_t excp, - uint32_t syndrome, uint32_t target_el); + uint64_t syndrome, uint32_t target_el); =20 /* * Similarly, but also use unwinding to restore cpu state. */ G_NORETURN void raise_exception_ra(CPUARMState *env, uint32_t excp, - uint32_t syndrome, uint32_t target_e= l, - uintptr_t ra); + uint64_t syndrome, uint32_t target_el, + uintptr_t ra); =20 /* * For AArch64, map a given EL to an index in the banked_spsr array. diff --git a/target/arm/tcg-stubs.c b/target/arm/tcg-stubs.c index aac99b2672..aeeede8066 100644 --- a/target/arm/tcg-stubs.c +++ b/target/arm/tcg-stubs.c @@ -16,7 +16,7 @@ void write_v7m_exception(CPUARMState *env, uint32_t new_e= xc) g_assert_not_reached(); } =20 -void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome, +void raise_exception_ra(CPUARMState *env, uint32_t excp, uint64_t syndrome, uint32_t target_el, uintptr_t ra) { g_assert_not_reached(); diff --git a/target/arm/tcg/op_helper.c b/target/arm/tcg/op_helper.c index 5373e0e998..dd3700dc6f 100644 --- a/target/arm/tcg/op_helper.c +++ b/target/arm/tcg/op_helper.c @@ -46,7 +46,7 @@ int exception_target_el(CPUARMState *env) } =20 void raise_exception(CPUARMState *env, uint32_t excp, - uint32_t syndrome, uint32_t target_el) + uint64_t syndrome, uint32_t target_el) { CPUState *cs =3D env_cpu(env); =20 @@ -70,7 +70,7 @@ void raise_exception(CPUARMState *env, uint32_t excp, cpu_loop_exit(cs); } =20 -void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome, +void raise_exception_ra(CPUARMState *env, uint32_t excp, uint64_t syndrome, uint32_t target_el, uintptr_t ra) { CPUState *cs =3D env_cpu(env); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567558; cv=none; d=zohomail.com; s=zohoarc; b=OsmbYpdBidIYQive/F8YCirfyCg7YzdkygKDviLDNU13ZPvNA6hzahMVGMYIsZ/AIrVSlgZLLaHkeRR45CL4w0Q/sPajpSOEoJt3aX6fU52aO7ATDKrwADJ9nOMv+Z2dJW3Ob4Jz6W6EW85SGtFOWaFobL+uQTwgJOXgyi7jA+A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567558; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vHa9Qq8DX2Y49JZLrDTFTxWjUOJjulTertOrAzy3PWg=; b=CHiiCVzko8iIr2SYGoYUycqG0Z5S1xQg0NRBbJi8mhMG/0lCD78owQlc+sSLod44YHt/ASKXZ8ANEQ0qHdXN46ni9X5Jo7GcpC/+0QEPA/4mk99ZWjC86im0RQZVoJcSXWGix0awn4DcyU6X3q4oPDu1QwFHPjNQ5Yd4Z8ZltwA= 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 1758567558323247.32206800082133; Mon, 22 Sep 2025 11:59:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbn-0004nF-Cu; Mon, 22 Sep 2025 14:49:55 -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 1v0lbh-0004jV-7t for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:49 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbb-00046l-U6 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:48 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-77f3580ab80so1571324b3a.2 for ; Mon, 22 Sep 2025 11:49:41 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566980; x=1759171780; darn=nongnu.org; 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=vHa9Qq8DX2Y49JZLrDTFTxWjUOJjulTertOrAzy3PWg=; b=HvtmLkLWvmNG0YwO4LpZgag5VE/bDD7xS5hcHTeF8/GdBiEtDRfCwg/+WzBus9Ckxj i7EdYiXETr9XsYiOP5lVUUrRdNROxiTTRqFz6jatqRQnukXhK67PcX5fruBWv5PmeCKa 5X2YINW8AVO+1Els9BzxaLGKrfpUMYvGVAJxD3X60wRLFYD+qACEmPUz2QlMujFgDpPU 55vAfNbekagQYsSejmlkGHD4QvJeXjgp3WA9zcT0F9faMF8sj1IrIn5Tx4wLpKWTjoT2 OT280ldb234nOiDAFYDWW0LSKJmYjjFaE4KKRIyefz9eymx9SZ2FGmaOIkSd4ed7gmis xK1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566980; x=1759171780; 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=vHa9Qq8DX2Y49JZLrDTFTxWjUOJjulTertOrAzy3PWg=; b=GQVAxKi4DBGC2DsX7DYtKig91Tc+p9pQbw5dcXbFo19wllmkCs0C3ZZ+3mwPSR4yrJ 2t5kxFzCn9wOkeeHOHfttHFgsD+8MAdoF+R8x+e6Swr2v0r4xRzh341GDVu5UPgoxQtY XeCsNmBuONlQriuvxWTo636EZFgFBQ1ecR7TLsv/oNsIwDmBpmFZp+rOPjsWYfc7qbq9 a28+xV1zvS/NgpJuZmhR+hJ8rnaag57M5WHTFM2kG+xlo3XaEBvDWLqOHVzI/kIDcbgc CycCf8z/poX2LJqSVpDB7AAqdF/sNafT7FM2fycVHzxb/rIfVxPiZSdSNkyO00ILUDBk cejA== X-Gm-Message-State: AOJu0YxGfrg7n4M1kp7ZvqG7oxWjofxwekV3qzC6kQUJ2ceRU0Jn9GwZ jkcDjs1n8YwR1Dz8/fbY1JDujPXqlcqPT+gCHGBXYD09zRiz9nQmPgvNOzOHGCMDRscRV49FbHh hx3YD X-Gm-Gg: ASbGncvDOrokTmYu2BzQ3PBB3SEaPwU+UNrh+UueCWkCwdTzOEocYq65wrbgoX5mGoW T2hETaS0lFn2PUvJmr9uHoiCT8dMvPnuwlELXRMfVRjXI8iJiVCk65bruUYkQofzna8FwvNmFMa rvuuPwmAEJNqhKHfu+vuOPvcRsohyjXBtEaCaWy1QSWU8dFIYrISo7cSplnKPPNRs9Ubvlnkx38 5HI88Rl0l3C0Lb+asaAl/S7S+HFo9P1aNAsld8StPuOJmfdnY/xpkAXOhx8xUQ+sXg59rNf+T67 J6BJD0svUMnoSn5nZ/6C5f5DklVSEoJLIqVc3EgUQuGGzaxViQuKVtKuX5z7+0NESlzHkW2J0TR +Y/TRsC2bFLrW1pCZF8zDz5AcEBEw X-Google-Smtp-Source: AGHT+IHJsYnNFWBXHCk/DsBbSU7srgtH22rmEctqnSWc2gel5ho+VCgBm/B1SDqENf6SFRSnvBkbLQ== X-Received: by 2002:a05:6a20:431f:b0:2b7:949d:63da with SMTP id adf61e73a8af0-2cfdcfefdd7mr144350637.18.1758566980396; Mon, 22 Sep 2025 11:49:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 11/76] target/arm: Implement dirtybit check for PIE Date: Mon, 22 Sep 2025 11:48:19 -0700 Message-ID: <20250922184924.2754205-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567559679116600 Content-Type: text/plain; charset="utf-8" Both S1PIE and S2PIE have a bit to make software tracking of dirty pages easier. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 1 + target/arm/ptw.c | 16 ++++++++++++++++ target/arm/tcg/tlb_helper.c | 12 +++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 0ebcf566ec..a2ee5f8739 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -752,6 +752,7 @@ struct ARMMMUFaultInfo { bool s1ptw; bool s1ns; bool ea; + bool dirtybit; /* FEAT_S1PIE, FEAT_S2PIE */ }; =20 /** diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 6dcd3adbdf..be3629a745 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -2311,6 +2311,22 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1T= ranslate *ptw, goto do_fault; } =20 + /* S1PIE and S2PIE both have a bit for software dirty page tracking. */ + if (access_type =3D=3D MMU_DATA_STORE && param.pie) { + /* + * For S1PIE, bit 7 is nDirty and both HA and HD are checked. + * For S2PIE, bit 7 is Dirty and only HD is checked. + */ + bool bit7 =3D extract64(attrs, 7, 1); + if (regime_is_stage2(mmu_idx) + ? !bit7 && !param.hd + : bit7 && !(param.ha && param.hd)) { + fi->type =3D ARMFault_Permission; + fi->dirtybit =3D true; + goto do_fault; + } + } + /* If FEAT_HAFDBS has made changes, update the PTE. */ if (new_descriptor !=3D descriptor) { new_descriptor =3D arm_casq_ptw(env, descriptor, new_descriptor, p= tw, fi); diff --git a/target/arm/tcg/tlb_helper.c b/target/arm/tcg/tlb_helper.c index 23c72a99f5..ae2acd6727 100644 --- a/target/arm/tcg/tlb_helper.c +++ b/target/arm/tcg/tlb_helper.c @@ -24,13 +24,13 @@ bool arm_s1_regime_using_lpae_format(CPUARMState *env, = ARMMMUIdx mmu_idx) return regime_using_lpae_format(env, mmu_idx); } =20 -static inline uint32_t merge_syn_data_abort(uint32_t template_syn, +static inline uint64_t merge_syn_data_abort(uint32_t template_syn, ARMMMUFaultInfo *fi, unsigned int target_el, bool same_el, bool is_write, int fsc) { - uint32_t syn; + uint64_t syn; =20 /* * ISV is only set for stage-2 data aborts routed to EL2 and @@ -75,6 +75,10 @@ static inline uint32_t merge_syn_data_abort(uint32_t tem= plate_syn, /* Merge the runtime syndrome with the template syndrome. */ syn |=3D template_syn; } + + /* Form ISS2 at the top of the syndrome. */ + syn |=3D (uint64_t)fi->dirtybit << 37; + return syn; } =20 @@ -176,7 +180,9 @@ void arm_deliver_fault(ARMCPU *cpu, vaddr addr, int target_el =3D exception_target_el(env); int current_el =3D arm_current_el(env); bool same_el; - uint32_t syn, exc, fsr, fsc; + uint32_t exc, fsr, fsc; + uint64_t syn; + /* * We know this must be a data or insn abort, and that * env->exception.syndrome contains the template syndrome set --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567834; cv=none; d=zohomail.com; s=zohoarc; b=WQ0x0ss4IhvltL+ERkazidEvJJYZh14/UfQWN/iYgu32jw0exAlrVtzXr8S+9SEiY73R6skjToQXwpaFcLBR02ZISXh1Pk+UT5rD2R+3JwrF4B4g3LlPjmUPZ8E2GMJEskgwhhg3Q8lIZvQxvT1jDxFlrPUS1RIe+qpwGhpJixY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567834; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pjDdAknr01k7YxkbZX1BtFHr9eMT0hUzaWlnonFMe1U=; b=Fg7/ylUL1Jadx4PsyGu8jGXzXOSsn1jeXGFvBHHq4D0uOtq0DKIs4rRk4IKIJc65giHdS4oMukYv0hjQSndw6GVp8+X9LorTe6IIUhg5WZtOehAdR5m46lHG4HYqDzuyOZ4KPjJGA3gOgR5VdaGg8kFXCdeJNVKnYvQULwapRHE= 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 1758567834235209.4766000194412; Mon, 22 Sep 2025 12:03:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbo-0004oq-Il; Mon, 22 Sep 2025 14:49:56 -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 1v0lbh-0004jm-UY for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:50 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbe-00047U-48 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:49 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-77f169d8153so2465325b3a.3 for ; Mon, 22 Sep 2025 11:49:44 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566983; x=1759171783; darn=nongnu.org; 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=pjDdAknr01k7YxkbZX1BtFHr9eMT0hUzaWlnonFMe1U=; b=B8H8RuHzjKuMgtVt8c6UyZoPDC9PXzpNIQd2kgw1ng+ZM2ysuU+ep0YHoc/fAJxlnQ 2KgQBHKm0iEILPyTm5aS0hP3Y0SCWE2m8EGQ+MvEzGG4LRodbvR7/AJFTTTdu4em/v7R eVCyrSNIkFnQxkoOu1Zgjm44EShHnDtJjOF4MttVQh7BRH1+uxjLs9wVjqYen0OGC7dr JTyob8qpR0lAxibb13QMATA/seQ5coPBPN2najqW8HT+TctWELREz/X9GU/JywbJArHX OCvETn6sv5oKEGgHIMDUnNwfo8Lc0BzWFPhq0fXrRtjeeTZYBXxQR11ZAa132QgLBtRF pyzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566983; x=1759171783; 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=pjDdAknr01k7YxkbZX1BtFHr9eMT0hUzaWlnonFMe1U=; b=FtS8Fq7tgSUxoV3xZbMVzBsOHo/exW7xU6to8m+bThuiL/ElRLhRwPn1Y4bXLs+yBz NB+BQmnMOVQ4tpznBsNaz3DZtsjgggZCj+vw29gLMlJZEWDGbfrZxe0m1HweRRV8nCVD tk8ovX3phwRv0ItRipyrZ5px3u7wl5ucz00+rlpOXGx6FTUNhIC9Pnp1Epw7+k9glLAi srs3HKAOTehc6Tgy6XAzOkHlCr2L6yEDZVLl2FB5ugMQ6h3pCk0D0pEtv8gRxW2Lm/mk wdh8LD4f1ZGAbQ8VUFRjxhyIv7KjvHo+qa6HVSg+yVYgVG2Usu6osV4vgMiKCvMNxFad u9Jg== X-Gm-Message-State: AOJu0Yyf3rJXHEw1+msMcX4elgVhV/mtTk39mv1lSziDoPQMHBwFa4tD n94V2F4l5R1s6YPqm1t951P9ThfGO7nkXZyV1sAB5oVkckWnxaCGGfL54QU5C8mMqgHj3XnGm/Z pU45r X-Gm-Gg: ASbGncsbhxTeX6XCfD6YLsxUWJwmVXGkbaSh/DWV70TBHcJ+eylzEBhb4gx4S+vdIi0 TB3weMkmYwdQyJb96G6X3rDiZszGMAHMXFC0ufC65ju/7H2fCQ4HaT2RP3qF789gcTqI4cAy/Qz 5CIST5htqJ6BIiQdZheMXx/xfaA6ok2yM0Ru4w/9fc3ZLLl0SfukY2SJFcMVRCDbMbhRbgg1tUX t0SZJDtl7ORlmXfBrMxis3khmXgyCA6L/PbL2KGFyemN/i+k9J16LxnsBIP8sGRozxHW+MUVQpe wNNJAIgbt3RjsF2RkN2Op3AHb7vx5auovfU4HgT6ZICwTkJ85q022pmi9+iDwQ9v3SPBxtw4uNo Xwog+7FTZ742J1lzNCssv+oeWrRBX X-Google-Smtp-Source: AGHT+IG9l/E5qxoU415HfVm19C5uvxsbygJtQKbxCJJ7q9D7/rqC6pLuePWOnQuVt3LEXzJjlFjqBg== X-Received: by 2002:a05:6a00:b8b:b0:77f:2e62:1e32 with SMTP id d2e1a72fcca58-77f2e621f28mr7111628b3a.2.1758566982569; Mon, 22 Sep 2025 11:49:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 12/76] target/arm: Enable FEAT_S1PIE and FEAT_S2PIE on -cpu max Date: Mon, 22 Sep 2025 11:48:20 -0700 Message-ID: <20250922184924.2754205-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567835613116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/cpu64.c | 2 ++ docs/system/arm/emulation.rst | 2 ++ 2 files changed, 4 insertions(+) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index abef6a246e..76193826ce 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1253,6 +1253,8 @@ void aarch64_max_tcg_initfn(Object *obj) t =3D FIELD_DP64(t, ID_AA64MMFR3, TCRX, 1); /* FEAT_TCR2 */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SCTLRX, 1); /* FEAT_SCTLR2 */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPEC */ + t =3D FIELD_DP64(t, ID_AA64MMFR3, S1PIE, 1); /* FEAT_S1PIE */ + t =3D FIELD_DP64(t, ID_AA64MMFR3, S2PIE, 1); /* FEAT_S2PIE */ SET_IDREG(isar, ID_AA64MMFR3, t); =20 t =3D GET_IDREG(isar, ID_AA64ZFR0); diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 6b04c96c8c..94a6192fa9 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -122,6 +122,8 @@ the following architecture extensions: - FEAT_RME (Realm Management Extension) (NB: support status in QEMU is exp= erimental) - FEAT_RNG (Random number generator) - FEAT_RPRES (Increased precision of FRECPE and FRSQRTE) +- FEAT_S1PIE (Stage 1 permission indirections) +- FEAT_S2PIE (Stage 2 permission indirections) - FEAT_S2FWB (Stage 2 forced Write-Back) - FEAT_SB (Speculation Barrier) - FEAT_SCTLR2 (Extension to SCTLR_ELx) --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567144; cv=none; d=zohomail.com; s=zohoarc; b=SquyxnfQ6HSZdWS32O0FmP0uME+A8gW/hlzqnWohyDp0wuk1wxFbWHgJh/nEPbGR2BfEMboctVf0GT4wLkWwGnkSuBsUlwHNWmY1Gqr5LVAKMEOIGguOXBGtPgVbgLsZ6Df4eCrwpxhDxjIJ0QkeQUeD9Hr0xPigJO8L+zsGoW0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567144; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jxAP5qFgcbJbR3OKukr3gh9u6b8be93wd3OS1SsOQv8=; b=fd38GzggF8n6OlcT1sGx5o8bdQVD7yIFem9LlGwS7jtL/HiOPcd/k5sCQtFpwPhpkQvqiVsEepYJCrBWr11h8N/TFky3faRZ1zPLN3+Sz6a7mxolEMWPL9qzSz+vLIjNGlmeKjWQspH4P6QGE/HylxjmfIO5m2YMGR4rcnknWPc= 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 1758567144403549.136586272989; Mon, 22 Sep 2025 11:52:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbq-0004q7-4t; Mon, 22 Sep 2025 14:49:58 -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 1v0lbo-0004oQ-3E for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:56 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbf-00047u-PQ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:55 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-76e6cbb991aso3910917b3a.1 for ; Mon, 22 Sep 2025 11:49:46 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566985; x=1759171785; darn=nongnu.org; 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=jxAP5qFgcbJbR3OKukr3gh9u6b8be93wd3OS1SsOQv8=; b=PyCTedMg5P1ZVFxHyqhV184OQulNBudZY2SeX+SS+F+oVI6XKwusZgixpaXIEJvYLf rzjN0+d6WnTXByL8ScevhkDoJFoolUzdYxdmUhPOwkOM4xreWFSf/7R49BQy5aKULzUd n5ITEk9u8aPqpP00dAAUxLgxlRGI7yLVrOUEjGVCndOxIWuXtVtiyU/njxgJA0M4bQio Pz9IAhOs0m3PK59gzAyAIq1mqmQx/vRF7pBkxEHadjOHxr1vVOfQ1wc5Ii1QllFeKIO/ SVkv6qUlqipQi8FPP/0Q5NDFRVnGSxol8NKaOFxt8EQUukGcR5l0GGa8jJPPiFocGDnG NVTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566985; x=1759171785; 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=jxAP5qFgcbJbR3OKukr3gh9u6b8be93wd3OS1SsOQv8=; b=PxVwl8IY+pf+QvcbaW4gdrBwFbTK4jfEBa9xEOThst6jKfExO3ITghumlwSjQ1v2ad 5/PXCkY+slOAbAPZ78sstC5k0Y8GXcDwhrokhAKCw80uK+o6IjnvWnR8Jo54Hb7knQtW ktnO/OyTKOJZq+MjUaXeMI4ULq277WKXcXegR8V9+6WTdIltRYihGyz/fky7zSA7BnCQ jf5pmeoBXK/ZogszJkBmWsOWweDNi3gpZvFXIGL8qribZ34d2J3XysH6hIb9f2M251yn 8u/RNesU8Mcf0EThOtaVNeMMAfh4ys39O0kV1l6xpAcgeBMsEib9PVmc9hkfFVk1Rsgb XjaQ== X-Gm-Message-State: AOJu0YyXBwsNUn6SDa0kbmRB57VQAe53f5HNykkYYWx2HBG/RwKPx4yh zFGfyRW0D7wCiHzSSiIafd2XcGsCHbVLgxluP1w46jf1szPA0tNcTAA5Zg6bVUNvqzMokTgQTgS iuw+N X-Gm-Gg: ASbGncs/1RRlABBZT1NiHNQfv1pBzmpjJR9fy8k3mmCsRmGV/fXMCtPWiPl3JZ2bJs6 j9Q66VB7BbuF5esrhuJlw8ljbfB0zsyxW1t0BrwtEKhZqFa7YZn9YlF4ry9otceqqbUjfD71HlA p+5XZA/GVoM3mLfQGzH2EvWzXgj2aLQT2PakmpAtX1EW9tovnNN0Xrk5FOVcnBO2IFgr42xRbuA DYoaOb3Vs/Ae8uwb9P4sZrV6W31Hyb7c7ovnbp2ZSCGDECcnm/l7sH9gdWJFFM2dqFApbOLpxVI 7P1Ctn6JMDEyk3m2smOPRMi95rvZwDg3ui2ZUkBpTKIDD4d65SCeFCPbsWPh2NVvuylLurriARX CghD9lKHAV06K1xegLDzvpozgohHmJRX+PSOZqhs= X-Google-Smtp-Source: AGHT+IEeiHCt4dAEYJqkiBHlqD3yDF9rneUTY97nxwQHwCh9FZze5ex0WsL72T+SgScsy2L+Eczdxg== X-Received: by 2002:a05:6a20:7f95:b0:244:aefe:71fa with SMTP id adf61e73a8af0-2cff367ed2cmr91748637.37.1758566985046; Mon, 22 Sep 2025 11:49:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 13/76] include/hw/core/cpu: Introduce MMUIdxMap Date: Mon, 22 Sep 2025 11:48:21 -0700 Message-ID: <20250922184924.2754205-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567146988116600 Use a typedef instead of uint16_t directly when describing sets of mmu indexes. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/exec/cputlb.h | 32 ++++++++++++++++---------------- include/hw/core/cpu.h | 6 +++--- accel/tcg/cputlb.c | 30 +++++++++++++++--------------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h index 03ed7e2165..9bec0e7890 100644 --- a/include/exec/cputlb.h +++ b/include/exec/cputlb.h @@ -150,7 +150,7 @@ void tlb_flush_all_cpus_synced(CPUState *src_cpu); * MMU indexes. */ void tlb_flush_page_by_mmuidx(CPUState *cpu, vaddr addr, - uint16_t idxmap); + MMUIdxMap idxmap); =20 /** * tlb_flush_page_by_mmuidx_all_cpus_synced: @@ -165,7 +165,7 @@ void tlb_flush_page_by_mmuidx(CPUState *cpu, vaddr addr, * translations using the flushed TLBs. */ void tlb_flush_page_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr addr, - uint16_t idxmap); + MMUIdxMap idxmap); =20 /** * tlb_flush_by_mmuidx: @@ -176,7 +176,7 @@ void tlb_flush_page_by_mmuidx_all_cpus_synced(CPUState = *cpu, vaddr addr, * Flush all entries from the TLB of the specified CPU, for the specified * MMU indexes. */ -void tlb_flush_by_mmuidx(CPUState *cpu, uint16_t idxmap); +void tlb_flush_by_mmuidx(CPUState *cpu, MMUIdxMap idxmap); =20 /** * tlb_flush_by_mmuidx_all_cpus_synced: @@ -189,7 +189,7 @@ void tlb_flush_by_mmuidx(CPUState *cpu, uint16_t idxmap= ); * When this function returns, no CPUs will subsequently perform * translations using the flushed TLBs. */ -void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *cpu, uint16_t idxmap); +void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *cpu, MMUIdxMap idxmap); =20 /** * tlb_flush_page_bits_by_mmuidx @@ -201,11 +201,11 @@ void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *cp= u, uint16_t idxmap); * Similar to tlb_flush_page_mask, but with a bitmap of indexes. */ void tlb_flush_page_bits_by_mmuidx(CPUState *cpu, vaddr addr, - uint16_t idxmap, unsigned bits); + MMUIdxMap idxmap, unsigned bits); =20 /* Similarly, with broadcast and syncing. */ void tlb_flush_page_bits_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr ad= dr, - uint16_t idxmap, + MMUIdxMap idxmap, unsigned bits); =20 /** @@ -220,14 +220,14 @@ void tlb_flush_page_bits_by_mmuidx_all_cpus_synced(CP= UState *cpu, vaddr addr, * comparing only the low @bits worth of each virtual page. */ void tlb_flush_range_by_mmuidx(CPUState *cpu, vaddr addr, - vaddr len, uint16_t idxmap, + vaddr len, MMUIdxMap idxmap, unsigned bits); =20 /* Similarly, with broadcast and syncing. */ void tlb_flush_range_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr addr, vaddr len, - uint16_t idxmap, + MMUIdxMap idxmap, unsigned bits); #else static inline void tlb_flush_page(CPUState *cpu, vaddr addr) @@ -243,42 +243,42 @@ static inline void tlb_flush_all_cpus_synced(CPUState= *src_cpu) { } static inline void tlb_flush_page_by_mmuidx(CPUState *cpu, - vaddr addr, uint16_t idxmap) + vaddr addr, MMUIdxMap idxmap) { } =20 -static inline void tlb_flush_by_mmuidx(CPUState *cpu, uint16_t idxmap) +static inline void tlb_flush_by_mmuidx(CPUState *cpu, MMUIdxMap idxmap) { } static inline void tlb_flush_page_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr addr, - uint16_t idxma= p) + MMUIdxMap idxm= ap) { } static inline void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *cpu, - uint16_t idxmap) + MMUIdxMap idxmap) { } static inline void tlb_flush_page_bits_by_mmuidx(CPUState *cpu, vaddr addr, - uint16_t idxmap, + MMUIdxMap idxmap, unsigned bits) { } static inline void tlb_flush_page_bits_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr addr, - uint16_t idxmap, unsigned bi= ts) + MMUIdxMap idxmap, unsigned b= its) { } static inline void tlb_flush_range_by_mmuidx(CPUState *cpu, vaddr addr, - vaddr len, uint16_t idxmap, + vaddr len, MMUIdxMap idxmap, unsigned bits) { } static inline void tlb_flush_range_by_mmuidx_all_cpus_synced(CPUState *cpu, vaddr addr, vaddr len, - uint16_t idxm= ap, + MMUIdxMap idx= map, unsigned bits) { } diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index b01a0cffd6..a7038b8c07 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -198,10 +198,10 @@ struct CPUClass { }; =20 /* - * Fix the number of mmu modes to 16, which is also the maximum - * supported by the softmmu tlb api. + * Fix the number of mmu modes to 16. */ #define NB_MMU_MODES 16 +typedef uint16_t MMUIdxMap; =20 /* Use a fully associative victim tlb of 8 entries. */ #define CPU_VTLB_SIZE 8 @@ -306,7 +306,7 @@ typedef struct CPUTLBCommon { * mmu_idx N since the last time that mmu_idx was flushed. * Protected by tlb_c.lock. */ - uint16_t dirty; + MMUIdxMap dirty; /* * Statistics. These are not lock protected, but are read and * written atomically. This allows the monitor to print a snapshot diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 87e14bde4f..d324f33339 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -370,8 +370,8 @@ static void flush_all_helper(CPUState *src, run_on_cpu_= func fn, =20 static void tlb_flush_by_mmuidx_async_work(CPUState *cpu, run_on_cpu_data = data) { - uint16_t asked =3D data.host_int; - uint16_t all_dirty, work, to_clean; + MMUIdxMap asked =3D data.host_int; + MMUIdxMap all_dirty, work, to_clean; int64_t now =3D get_clock_realtime(); =20 assert_cpu_is_self(cpu); @@ -408,7 +408,7 @@ static void tlb_flush_by_mmuidx_async_work(CPUState *cp= u, run_on_cpu_data data) } } =20 -void tlb_flush_by_mmuidx(CPUState *cpu, uint16_t idxmap) +void tlb_flush_by_mmuidx(CPUState *cpu, MMUIdxMap idxmap) { tlb_debug("mmu_idx: 0x%" PRIx16 "\n", idxmap); =20 @@ -422,7 +422,7 @@ void tlb_flush(CPUState *cpu) tlb_flush_by_mmuidx(cpu, ALL_MMUIDX_BITS); } =20 -void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *src_cpu, uint16_t idxma= p) +void tlb_flush_by_mmuidx_all_cpus_synced(CPUState *src_cpu, MMUIdxMap idxm= ap) { const run_on_cpu_func fn =3D tlb_flush_by_mmuidx_async_work; =20 @@ -531,7 +531,7 @@ static void tlb_flush_page_locked(CPUState *cpu, int mi= dx, vaddr page) */ static void tlb_flush_page_by_mmuidx_async_0(CPUState *cpu, vaddr addr, - uint16_t idxmap) + MMUIdxMap idxmap) { int mmu_idx; =20 @@ -570,14 +570,14 @@ static void tlb_flush_page_by_mmuidx_async_1(CPUState= *cpu, { vaddr addr_and_idxmap =3D data.target_ptr; vaddr addr =3D addr_and_idxmap & TARGET_PAGE_MASK; - uint16_t idxmap =3D addr_and_idxmap & ~TARGET_PAGE_MASK; + MMUIdxMap idxmap =3D addr_and_idxmap & ~TARGET_PAGE_MASK; =20 tlb_flush_page_by_mmuidx_async_0(cpu, addr, idxmap); } =20 typedef struct { vaddr addr; - uint16_t idxmap; + MMUIdxMap idxmap; } TLBFlushPageByMMUIdxData; =20 /** @@ -599,7 +599,7 @@ static void tlb_flush_page_by_mmuidx_async_2(CPUState *= cpu, g_free(d); } =20 -void tlb_flush_page_by_mmuidx(CPUState *cpu, vaddr addr, uint16_t idxmap) +void tlb_flush_page_by_mmuidx(CPUState *cpu, vaddr addr, MMUIdxMap idxmap) { tlb_debug("addr: %016" VADDR_PRIx " mmu_idx:%" PRIx16 "\n", addr, idxm= ap); =20 @@ -618,7 +618,7 @@ void tlb_flush_page(CPUState *cpu, vaddr addr) =20 void tlb_flush_page_by_mmuidx_all_cpus_synced(CPUState *src_cpu, vaddr addr, - uint16_t idxmap) + MMUIdxMap idxmap) { tlb_debug("addr: %016" VADDR_PRIx " mmu_idx:%"PRIx16"\n", addr, idxmap= ); =20 @@ -715,8 +715,8 @@ static void tlb_flush_range_locked(CPUState *cpu, int m= idx, typedef struct { vaddr addr; vaddr len; - uint16_t idxmap; - uint16_t bits; + MMUIdxMap idxmap; + unsigned bits; } TLBFlushRangeData; =20 static void tlb_flush_range_by_mmuidx_async_0(CPUState *cpu, @@ -766,7 +766,7 @@ static void tlb_flush_range_by_mmuidx_async_1(CPUState = *cpu, } =20 void tlb_flush_range_by_mmuidx(CPUState *cpu, vaddr addr, - vaddr len, uint16_t idxmap, + vaddr len, MMUIdxMap idxmap, unsigned bits) { TLBFlushRangeData d; @@ -797,7 +797,7 @@ void tlb_flush_range_by_mmuidx(CPUState *cpu, vaddr add= r, } =20 void tlb_flush_page_bits_by_mmuidx(CPUState *cpu, vaddr addr, - uint16_t idxmap, unsigned bits) + MMUIdxMap idxmap, unsigned bits) { tlb_flush_range_by_mmuidx(cpu, addr, TARGET_PAGE_SIZE, idxmap, bits); } @@ -805,7 +805,7 @@ void tlb_flush_page_bits_by_mmuidx(CPUState *cpu, vaddr= addr, void tlb_flush_range_by_mmuidx_all_cpus_synced(CPUState *src_cpu, vaddr addr, vaddr len, - uint16_t idxmap, + MMUIdxMap idxmap, unsigned bits) { TLBFlushRangeData d, *p; @@ -847,7 +847,7 @@ void tlb_flush_range_by_mmuidx_all_cpus_synced(CPUState= *src_cpu, =20 void tlb_flush_page_bits_by_mmuidx_all_cpus_synced(CPUState *src_cpu, vaddr addr, - uint16_t idxmap, + MMUIdxMap idxmap, unsigned bits) { tlb_flush_range_by_mmuidx_all_cpus_synced(src_cpu, addr, TARGET_PAGE_S= IZE, --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567087; cv=none; d=zohomail.com; s=zohoarc; b=FGwjPwV3d/UHD/sE6kSGwOvf0FGunDtHiedVi1IDIjUx9oYzsw000W2AgwJekz/pxhPp9kl8jIO20HD0D8nnUrUoUfgLbgKIo+cxj+cae5pBdlpP1/Wu5eV+r+2lu0tnb3c2G8bisK+U8wL0bDzIgOptCQ7s0c0o+UL77AWacF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567087; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=itJOo7yOK2M+RLljfiwxs6NiYNiCxqgpNJLYncMVRhQ=; b=W0Tg/J/k+aPh2LiuOXj/M25nWgcJeZOeixCfhbuHX+DWAM1x1z1ECLCJ7RdZiyesiN+vI5oxCkY7NT0EdvDItkUjrPrf99zTF96MhlDyl0BdHBbIr8U8kMq2k52WOMN/usKr/vU80SKixPjva7WvMz6p8In+DLvQnKjNWXfoipk= 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 1758567087982928.8790079752401; Mon, 22 Sep 2025 11:51:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbm-0004nX-UA; Mon, 22 Sep 2025 14:49:54 -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 1v0lbj-0004k3-NN for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:51 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbg-00048T-QV for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:51 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-77f207d0891so1613372b3a.1 for ; Mon, 22 Sep 2025 11:49:48 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566986; x=1759171786; darn=nongnu.org; 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=itJOo7yOK2M+RLljfiwxs6NiYNiCxqgpNJLYncMVRhQ=; b=oOwEe9iFZuKXTrVVufISycHZrK0RASibGYbJBS1sZRK7Uhv3GzyawCPWC57neLkms9 x+3TEpInfkfcXIRnbiYWe8HjQGG6yLuwyeMNv2FfJzpLLRpYrAfwLjLQpOjRCsaBAHMi JiN7PC3dvZwTgn1jsObWIchW/ufEDC4a7zk5zvOqniorlItBLslOTu7XHQR5z97Mwp2I L2ntI/qf/BQmv/EG/RbFA43y64NBIFOUJqiO6u52yH4W5JvptI0LFAcKdzFGjbjlI5rx mNNx7fBbl4hlVt/spueSnj4pBfJ6QfI7qrNiyQJ6Bq31rKXHMmHz4d/XPEV9xMy0kr2b YRXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566986; x=1759171786; 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=itJOo7yOK2M+RLljfiwxs6NiYNiCxqgpNJLYncMVRhQ=; b=IbVcPAeC6li3AqOpJ8QuVnOOgTgT16uw8Xl0Ye7NygRuagLGUhutsPq1OSWHsP9U1d HHfKbxl7CF7XSKx/JsGIKKBiR1JtxG5qrTJQuj1LohYCDvU0RC+Am+3Y+fyBvCUBeUcB sJTTaPVzhb8yY3DAYkH83BvyrbZB+wCLKfU8SHlI532zSTTEv/qAc4UHnv+Qdt8q99dp PbW3lrkIJMJ5F4TUVEPzRF0uhhbqV+e9OnPwx/+hIjfSiX5+q5LefuTGuon6tBB2dAc8 IKAqvnFQlrrWTbKHPRO9VTsplVYjK74Oamv4k6hR/5XN15MHNTjpfihODp+vPcizWu4b opFw== X-Gm-Message-State: AOJu0Yxznux8fOi3d2SZfk0eri5MAjPJyrJRdT3aiSR5qRPYhCW3uN1Q HCePd7bejlMg8xdf8TNgPsuxi7iJ4xYDuz5il9jqF836MZ+pvU95nI2AKBxZE3F6mwKXe1naSbn Isj9c X-Gm-Gg: ASbGncvtovuskKWw+1gVRcgT6DSendttYSx1ijKxm9YT2hCfAsowBKlqZDHbFvrv17S BYgQUgi5B0gtUnzuSzhlrO0KMhloWdRpgvElLGRfnma7sYRt3LYKBQnBs9mAvqZw+SDHllSsPei Tp4eAhTcaQjFsoOFbf6/g6vBXDDovGX3pu/t9Wiz3ql/TgV7mu48BEZM5gmYSycaMyoQ5sWLp4y ZZcYLd2Au1S9Dj9M0YslhLDVzeVXR7aD+nY7Sny7vlHLQmtpSMeTMjPFanJ4PtRYEbyDCR1sAXH ZozJO5jC7+m9ubkGpBeuv5ArYpOGgIwBPWYaowmSWxm5IDqXJmhLCfgK2BhZLJiHxn+Yc5XrN54 luXJRQL4cCJ0EI81xn4EM3ThguaMTGcBeS13dKY0= X-Google-Smtp-Source: AGHT+IGMHkJkHlpYKOMqYn+0ytHaNsDioMGeY5EA+HGTNuG7yGkbNx8zPdKc6zkQ3bdrJusEvyqqpA== X-Received: by 2002:a05:6a20:a122:b0:279:90c2:f872 with SMTP id adf61e73a8af0-2cfd4836b81mr157201637.11.1758566986576; Mon, 22 Sep 2025 11:49:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 14/76] include/hw/core/cpu: Introduce cpu_tlb_fast Date: Mon, 22 Sep 2025 11:48:22 -0700 Message-ID: <20250922184924.2754205-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567090220116600 Encapsulate access to cpu->neg.tlb.f[] in a function. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/hw/core/cpu.h | 7 +++++++ accel/tcg/cputlb.c | 16 ++++++++-------- tcg/aarch64/tcg-target.c.inc | 2 +- tcg/arm/tcg-target.c.inc | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index a7038b8c07..30e335d7d0 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -594,6 +594,13 @@ static inline CPUArchState *cpu_env(CPUState *cpu) return (CPUArchState *)(cpu + 1); } =20 +#ifdef CONFIG_TCG +static inline CPUTLBDescFast *cpu_tlb_fast(CPUState *cpu, int mmu_idx) +{ + return &cpu->neg.tlb.f[mmu_idx]; +} +#endif + typedef QTAILQ_HEAD(CPUTailQ, CPUState) CPUTailQ; extern CPUTailQ cpus_queue; =20 diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index d324f33339..2a6aa01c57 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -129,7 +129,7 @@ static inline uint64_t tlb_addr_write(const CPUTLBEntry= *entry) static inline uintptr_t tlb_index(CPUState *cpu, uintptr_t mmu_idx, vaddr addr) { - uintptr_t size_mask =3D cpu->neg.tlb.f[mmu_idx].mask >> CPU_TLB_ENTRY_= BITS; + uintptr_t size_mask =3D cpu_tlb_fast(cpu, mmu_idx)->mask >> CPU_TLB_EN= TRY_BITS; =20 return (addr >> TARGET_PAGE_BITS) & size_mask; } @@ -138,7 +138,7 @@ static inline uintptr_t tlb_index(CPUState *cpu, uintpt= r_t mmu_idx, static inline CPUTLBEntry *tlb_entry(CPUState *cpu, uintptr_t mmu_idx, vaddr addr) { - return &cpu->neg.tlb.f[mmu_idx].table[tlb_index(cpu, mmu_idx, addr)]; + return &cpu_tlb_fast(cpu, mmu_idx)->table[tlb_index(cpu, mmu_idx, addr= )]; } =20 static void tlb_window_reset(CPUTLBDesc *desc, int64_t ns, @@ -292,7 +292,7 @@ static void tlb_flush_one_mmuidx_locked(CPUState *cpu, = int mmu_idx, int64_t now) { CPUTLBDesc *desc =3D &cpu->neg.tlb.d[mmu_idx]; - CPUTLBDescFast *fast =3D &cpu->neg.tlb.f[mmu_idx]; + CPUTLBDescFast *fast =3D cpu_tlb_fast(cpu, mmu_idx); =20 tlb_mmu_resize_locked(desc, fast, now); tlb_mmu_flush_locked(desc, fast); @@ -331,7 +331,7 @@ void tlb_init(CPUState *cpu) cpu->neg.tlb.c.dirty =3D 0; =20 for (i =3D 0; i < NB_MMU_MODES; i++) { - tlb_mmu_init(&cpu->neg.tlb.d[i], &cpu->neg.tlb.f[i], now); + tlb_mmu_init(&cpu->neg.tlb.d[i], cpu_tlb_fast(cpu, i), now); } } =20 @@ -342,7 +342,7 @@ void tlb_destroy(CPUState *cpu) qemu_spin_destroy(&cpu->neg.tlb.c.lock); for (i =3D 0; i < NB_MMU_MODES; i++) { CPUTLBDesc *desc =3D &cpu->neg.tlb.d[i]; - CPUTLBDescFast *fast =3D &cpu->neg.tlb.f[i]; + CPUTLBDescFast *fast =3D cpu_tlb_fast(cpu, i); =20 g_free(fast->table); g_free(desc->fulltlb); @@ -667,7 +667,7 @@ static void tlb_flush_range_locked(CPUState *cpu, int m= idx, unsigned bits) { CPUTLBDesc *d =3D &cpu->neg.tlb.d[midx]; - CPUTLBDescFast *f =3D &cpu->neg.tlb.f[midx]; + CPUTLBDescFast *f =3D cpu_tlb_fast(cpu, midx); vaddr mask =3D MAKE_64BIT_MASK(0, bits); =20 /* @@ -923,7 +923,7 @@ void tlb_reset_dirty(CPUState *cpu, uintptr_t start, ui= ntptr_t length) qemu_spin_lock(&cpu->neg.tlb.c.lock); for (mmu_idx =3D 0; mmu_idx < NB_MMU_MODES; mmu_idx++) { CPUTLBDesc *desc =3D &cpu->neg.tlb.d[mmu_idx]; - CPUTLBDescFast *fast =3D &cpu->neg.tlb.f[mmu_idx]; + CPUTLBDescFast *fast =3D cpu_tlb_fast(cpu, mmu_idx); unsigned int n =3D tlb_n_entries(fast); unsigned int i; =20 @@ -1316,7 +1316,7 @@ static bool victim_tlb_hit(CPUState *cpu, size_t mmu_= idx, size_t index, =20 if (cmp =3D=3D page) { /* Found entry in victim tlb, swap tlb and iotlb. */ - CPUTLBEntry tmptlb, *tlb =3D &cpu->neg.tlb.f[mmu_idx].table[in= dex]; + CPUTLBEntry tmptlb, *tlb =3D &cpu_tlb_fast(cpu, mmu_idx)->tabl= e[index]; =20 qemu_spin_lock(&cpu->neg.tlb.c.lock); copy_tlb_helper_locked(&tmptlb, tlb); diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index 3b088b7bd9..caf79c742d 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -1668,7 +1668,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext= *s, HostAddress *h, ldst->oi =3D oi; ldst->addr_reg =3D addr_reg; =20 - /* Load cpu->neg.tlb.f[mmu_idx].{mask,table} into {tmp0,tmp1}. */ + /* Load CPUTLBDescFast.{mask,table} into {tmp0,tmp1}. */ QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, mask) !=3D 0); QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) !=3D 8); tcg_out_insn(s, 3314, LDP, TCG_REG_TMP0, TCG_REG_TMP1, TCG_AREG0, diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 338c57b061..87ca66bb02 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -1421,7 +1421,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext= *s, HostAddress *h, ldst->oi =3D oi; ldst->addr_reg =3D addr; =20 - /* Load cpu->neg.tlb.f[mmu_idx].{mask,table} into {r0,r1}. */ + /* Load CPUTLBDescFast.{mask,table} into {r0,r1}. */ QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, mask) !=3D 0); QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, table) !=3D 4); tcg_out_ldrd_8(s, COND_AL, TCG_REG_R0, TCG_AREG0, fast_off); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568251; cv=none; d=zohomail.com; s=zohoarc; b=QSxSjeNqUru4qgWoe1bGXtluG/qDfNYXFlWvbuOKNI+oF7iUZwzXoBQP3vogfw4vUpscX5v2p6rSSlloT7qB//tKOMphNHCOEf/OanaT1iM3VRzMYSgo/z8glMphH7bqXS5ATJZf1JOtcN3nbWjRZ1syKalVD7fzst6SZHpP+wg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568251; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CRoS3UC8ynsEV5t3sfVyTe2E9WbHdc5gfYPgW1+H1wE=; b=cOYjRA0qt2y5uxcguLeiEgMs51HX9vVvyG4KE/rUI5Zwur/bvZ3q7N4U7pILnp6CvWnrvJ2cdoNFeooUWlInJXHmGAJoHCZSrBF3HD0Q9gyWJDhShPVKXyW/kKeQc5wgOEr41zZUV1WBqayhJvFT5tqpaVteUaovVrOscxSdGxY= 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 1758568251658375.2275979096403; Mon, 22 Sep 2025 12:10:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbs-0004rB-28; Mon, 22 Sep 2025 14:50:00 -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 1v0lbp-0004ph-AX for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:57 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbh-00048t-Hg for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:57 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-77f2c7ba550so1514539b3a.1 for ; Mon, 22 Sep 2025 11:49:48 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566987; x=1759171787; darn=nongnu.org; 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=CRoS3UC8ynsEV5t3sfVyTe2E9WbHdc5gfYPgW1+H1wE=; b=agncZOIFEXRV6BoZVmNDjFhystcd57uVpRQlwVbbLzZxWu8dxYQQv7whCQMdP5SZAs m8dxYTyHjpF0+Mjy6wKDfzxMDMPgRE8+CU+v9LrtJDIP7N39sYajTKd3w1k44CxPd5ie SDPgg8x3pIDpHr8VwlskpsljMG8LxxpRYtzTqMjvR/aokm9/kr2Xbi14TG3bUrZf3Jrw mVwoyhyoqTXHF7GGfOqvd5mBU34qdAvhj2USHhV+7rQQICZVu4BXSpTyvBU1T/yoQZuD 5Oe9WGr5JLn4F5XaAKC/A/osiWp4L2q9d65EUa71e/Ii7Xa22Oy9/q5L/7RDiUB2aRxq 7ByA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566987; x=1759171787; 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=CRoS3UC8ynsEV5t3sfVyTe2E9WbHdc5gfYPgW1+H1wE=; b=bbh9vfPz0UBh0auKtzgDPNuEwXH+4M7/rYAEb4q8xJo6DNoVxWIsWGxcFGxs6ImpUI 4nfDKxlXy0YIAy2BkKQDPNGTlUbnNpng3hXEIAgi9+WFpf4dzpoUO/nB9In2LA56BujZ HfLLIGSLPNDzRoMKBhMDQCvBqcD/AQ74jy2H5Dba65OjH5g6BtdmRgRsV1VLDeKNFJkB M4P7eK73eWuX758KnzgKMC1jY545EfihJ69C+mRSEtHxxcLC1agDZQBv03OiaZrhS/Ju k9u9AM4+itlkUxPyb/xVMNFc+yeRmUbFN4wdgR4f2gb7Ien5pzgF7Ich0xqSBuna9YI5 0dOA== X-Gm-Message-State: AOJu0YxNpshqqcVWa44kuShaq4rHzHJBrR04i6Upzqf8uhaPBgFoeZ1v cG7btpyxWxsyRmsOO3qy7AkgUV7aN++TR7gZW5R77BlpwiAAueNsnJX1G3FHPfmhIA1/Su6QgNN bBYPk X-Gm-Gg: ASbGncsTWc6Iy9xR1E1Xx+3I0qze8WJbgpCqe+ehwEY+gOSiVR5w0bJnupcF++VTeDE AkcSym5yq73LMhAiKWbYEbclXYdOumwimpvKonpEmfQRm/FjYNNUmZV2iVV02Jbx88QYwiXHBSQ L8etVg5ERjJSDQwkC8dBHGURBUZbz0IL3X4L6TPfdQ2LtWeAyCK7VOgy2eyrExy8VVb+EqIpbj8 VKDVLljKWs4IEgoPXefcSEWGHVvU1GTzu/n8XDIZkBj0niOwMqxE914K4pjtF24sgcI0VhX43Fe lLtwsWlLlHWrPT8NCQPoIyzFp3U+YUKeg0TVWnFUCGS3bOVASt+7PZtOnf+qYPg+K+ZfRpx2pV1 ZMFXImOqFaqq49bznOY6FRb/dDbJT X-Google-Smtp-Source: AGHT+IFQNqhco4itF03EKjOw3uvmKZWs6kr/zNFfVaHpdJUJzD/Uzstne/WFCk/fAKveIeRR+rWxrQ== X-Received: by 2002:a05:6a00:2190:b0:77d:52a1:ac6e with SMTP id d2e1a72fcca58-77e4eac6e2fmr16198998b3a.19.1758566987601; Mon, 22 Sep 2025 11:49:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 15/76] include/hw/core/cpu: Invert the indexing into CPUTLBDescFast Date: Mon, 22 Sep 2025 11:48:23 -0700 Message-ID: <20250922184924.2754205-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568253982116600 This array is within CPUNegativeOffsetState, which means the last element of the array has an offset from env with the smallest magnitude. This can be encoded into fewer bits when generating TCG fast path memory references. When we changed the NB_MMU_MODES to be a global constant, rather than a per-target value, we pessimized the code generated for targets which use only a few mmu indexes. By inverting the array index, we counteract that. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/hw/core/cpu.h | 11 ++++++++++- tcg/tcg.c | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 30e335d7d0..89fe937a6f 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -595,9 +595,18 @@ static inline CPUArchState *cpu_env(CPUState *cpu) } =20 #ifdef CONFIG_TCG +/* + * Invert the index order of the CPUTLBDescFast array so that lower + * mmu_idx have offsets from env with smaller magnitude. + */ +static inline int mmuidx_to_fast_index(int mmu_idx) +{ + return NB_MMU_MODES - 1 - mmu_idx; +} + static inline CPUTLBDescFast *cpu_tlb_fast(CPUState *cpu, int mmu_idx) { - return &cpu->neg.tlb.f[mmu_idx]; + return &cpu->neg.tlb.f[mmuidx_to_fast_index(mmu_idx)]; } #endif =20 diff --git a/tcg/tcg.c b/tcg/tcg.c index afac55a203..294762c283 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -425,7 +425,8 @@ static uintptr_t G_GNUC_UNUSED get_jmp_target_addr(TCGC= ontext *s, int which) static int __attribute__((unused)) tlb_mask_table_ofs(TCGContext *s, int which) { - return (offsetof(CPUNegativeOffsetState, tlb.f[which]) - + int fi =3D mmuidx_to_fast_index(which); + return (offsetof(CPUNegativeOffsetState, tlb.f[fi]) - sizeof(CPUNegativeOffsetState)); } =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568241; cv=none; d=zohomail.com; s=zohoarc; b=JxQp2itACjtAW+UeeoYhMVr+iWI+j1jo5O9MX9Ajxc/ooFKcmagggpiaRkuQ0vPAdQ0pA3q0GOfmlNiCXZmWHUFLx/NzwlyGm13Cro3iyBj9lXqsb7EObya9rcgx0TQjkpYo3XY4Yt2bP5PaoKNUVYJFxpp6epnhwRdCraykGag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568241; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UkNyZZYFhHeil9ygYrAE1UXkAwT1+GtqIOD2Xj8zAVs=; b=TPahnWClp0djET5j5luagIUNCU9HLAso55b7Gft3RVyXwZ4oVMMXCs9WPGi6WeGRh/6b7ZnJhs02oUl/Peif6gfkkdZZc89XF+IDfE2DlDxzbnbE8blKska22bIvxMECWErnZPzSTEJA2sMfGIzdLdT5V+zbOlyijfDxUpC1Ors= 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 1758568241704278.6849754490935; Mon, 22 Sep 2025 12:10:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbs-0004rk-UR; Mon, 22 Sep 2025 14:50:01 -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 1v0lbq-0004q9-3u for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:58 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbk-00049W-1I for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:57 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-77f32d99a97so1307006b3a.1 for ; Mon, 22 Sep 2025 11:49:50 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566989; x=1759171789; darn=nongnu.org; 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=UkNyZZYFhHeil9ygYrAE1UXkAwT1+GtqIOD2Xj8zAVs=; b=pEmx/1CjQrYB4tRZErGu10iyJd4tBiy3gAVsrdp4fHK3d+TL7Rk6DPAyh2aHdgtlMj BLl2o/jp/nOGgkqGMx6ax3jjwDTJzZi7VRW7kFOZrQONQLJWF/7BeMpyVVDC6nDuJqGQ uApR9NWYVJ5fnkUd+kG7L0d8gnX5pkxT1DHt45m1Efn+ZhwaC2S6bBq38AUznkMHiU7L pXJnK4HldLwaUNtSjJc72m7oazfBvPJcGnOIT70gE7b0fAbxDZj4SQo+U+TeiozSZUH8 ID/UvaJJ1LTf1AlYFSRLeg1Uszx6sn1sret8+q1W0li6V9rVyZBOvxtlQI8gqvWUa7PR gsWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566989; x=1759171789; 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=UkNyZZYFhHeil9ygYrAE1UXkAwT1+GtqIOD2Xj8zAVs=; b=p1MTYN8Z6j2cHqWTW8y6xUGHoJY1dUIRXshsaYyAp9eVh7OUx0MBBff0GnCBNkmtvE 9v/TstnreQn4KPACzB+Sfw0KK+2sMZpwSradUY+j/ph+n/5wyUD7V0NWnzhs1OE1Bd57 Xhf/pbuolefi1r9SDptpFnGP0LqutjXoUMPRBQ60SIk9712ncCtC2fskRvGt5RPVf9hT WdJ+jP/Nh/qJH1JZ9QJBv6SE4IevpiujGy8Ji/JHYt9owJjr1swDZB6iiRM299xJGgNQ 98gRh7Smqn97V1Io/aA/aG7ws5EGsQ1RA9oMyVHSj4LnnjebrzMHtqbSZGd80m+TDNHc B3kg== X-Gm-Message-State: AOJu0Yw6VhcpJ2gUWqWUIUVN4pwQlFNw6xbnKv9uGZvNRlNcaGynJP23 qlj7uq8dffw8gUmSX3boUOxttmE+8wHgLQbwhyzb4lLzjQC7Vp701fZZQlqoO/OUNZsBuna6i8u UjhUh X-Gm-Gg: ASbGncu1Hw+Am84OMoV3tokQuvkh2cdnb68PJ+V5VsM/K2cWAu+mDC/4YdEEZGTwXzA jMJC7wFPzNH/Itnj0VtKTOSWpefuY0dCWblu4ghYUgtDiisOew/sOa4c3U0zzB5gr83hAkfWOcY rqa2xmkfqwlXglFgfpdty37eacBNOoi0ogTD9qxyZerosIXWmbaB0ygYPzte7LFR9ARZpuVFl/0 4fpvlQE5DEe2hLgtuXVnDW3UITVVCkj5YeHJxX5Z1POwHmDdMudhQ03m58nm9HmmLEH8/p3rgz3 X883bdaN052Ao8zVqSbVgNDe4ZkOgu+tAedyWDTmQ56w+wZUAlvG6/xiSkKoLd7LnDw/vsIEoe5 sB7PEVdDweQSpbkUkP7aB1LHLND4mGRVtG5pRDeI= X-Google-Smtp-Source: AGHT+IFm1jQ14e/HafETcVxEpydEO9fijrVrhiivcFC1bIWbis5xgLtS+4+gXCP+oREyGCPRTMJXLg== X-Received: by 2002:a05:6a20:12c3:b0:2c5:d3c6:6a59 with SMTP id adf61e73a8af0-2cfe89915d1mr131708637.29.1758566988969; Mon, 22 Sep 2025 11:49:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 16/76] target/hppa: Adjust mmu indexes to begin with 0 Date: Mon, 22 Sep 2025 11:48:24 -0700 Message-ID: <20250922184924.2754205-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568243757116600 Content-Type: text/plain; charset="utf-8" This is a logical reversion of 2ad04500543, though there have been additions to the set of mmu indexes since then. The impetus to that original patch, "9-15 will use shorter assembler instructions when run on a x86-64 host" is now handled generically. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/hppa/cpu.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h index 11d59d11ca..672ab3750c 100644 --- a/target/hppa/cpu.h +++ b/target/hppa/cpu.h @@ -29,21 +29,21 @@ #include "qemu/interval-tree.h" #include "hw/registerfields.h" =20 -#define MMU_ABS_W_IDX 6 -#define MMU_ABS_IDX 7 -#define MMU_KERNEL_IDX 8 -#define MMU_KERNEL_P_IDX 9 -#define MMU_PL1_IDX 10 -#define MMU_PL1_P_IDX 11 -#define MMU_PL2_IDX 12 -#define MMU_PL2_P_IDX 13 -#define MMU_USER_IDX 14 -#define MMU_USER_P_IDX 15 +#define MMU_KERNEL_IDX 0 +#define MMU_KERNEL_P_IDX 1 +#define MMU_PL1_IDX 2 +#define MMU_PL1_P_IDX 3 +#define MMU_PL2_IDX 4 +#define MMU_PL2_P_IDX 5 +#define MMU_USER_IDX 6 +#define MMU_USER_P_IDX 7 +#define MMU_ABS_IDX 8 +#define MMU_ABS_W_IDX 9 =20 -#define MMU_IDX_MMU_DISABLED(MIDX) ((MIDX) < MMU_KERNEL_IDX) -#define MMU_IDX_TO_PRIV(MIDX) (((MIDX) - MMU_KERNEL_IDX) / 2) -#define MMU_IDX_TO_P(MIDX) (((MIDX) - MMU_KERNEL_IDX) & 1) -#define PRIV_P_TO_MMU_IDX(PRIV, P) ((PRIV) * 2 + !!(P) + MMU_KERNEL_IDX) +#define MMU_IDX_MMU_DISABLED(MIDX) ((MIDX) >=3D MMU_ABS_IDX) +#define MMU_IDX_TO_PRIV(MIDX) ((MIDX) / 2) +#define MMU_IDX_TO_P(MIDX) ((MIDX) & 1) +#define PRIV_P_TO_MMU_IDX(PRIV, P) ((PRIV) * 2 + !!(P)) =20 #define PRIV_KERNEL 0 #define PRIV_USER 3 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567272; cv=none; d=zohomail.com; s=zohoarc; b=QJjBah3GGEhRDnbFAAznPYi+I9N+30QfnmxtHoNGrhtPA4cySpXA2ZMwRzL6moshJK8yzr0iYpiLMVKCp0yfQP+QpyIAN0joGSltLcmgzLiv+YR3BDuMoud0ZGWlDQSw7VgKyC3iz1AGzeK3c8GojPwes0yd8Fk6tOqbs5vqt0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567272; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jHDom8RqSvFBhHj/9Q/rXAoVV+sGpC/X8GRYrjCGKNI=; b=GvF4KJbJktZaQH3nRSptEvQjhMtPnR/+Z7q+x/qYDV46et3TompcqVVABFLI3QVeFxUkuUbXNiNeoVtEr8u8OcIsocjbBO3uId7LGaWQDQi3c4HxOD9jKcr95iIp8FmXVe3LuKjBwhRRs25nYgatZYn3ENDTeeigFvKdRlg3TDA= 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 1758567272397724.5956329581467; Mon, 22 Sep 2025 11:54:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbv-0004vx-5o; Mon, 22 Sep 2025 14:50:03 -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 1v0lbt-0004ty-J0 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:01 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbk-0004A7-78 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:01 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-77f35113821so1180468b3a.0 for ; Mon, 22 Sep 2025 11:49:51 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566991; x=1759171791; darn=nongnu.org; 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=jHDom8RqSvFBhHj/9Q/rXAoVV+sGpC/X8GRYrjCGKNI=; b=jxjgyxTrxi4ch6+y574d+D88YSrJ10r2OJ5Nzd0PGlAi9bMVnNnYRwlMhNWdkAwric MbXxUw5HK2eBZswLI00V8gxTk+bfnn03PDUkavqo4maZ7kdAarmSbHD2aNq3xsB8aYTA QfuD2ubE0gYputbqXYOdZ7uouzuXsQkLCGMhWFFv4DKSIlDOQmiSuLtzTr7HMF0soyVT DDNt8goewOeZ+EB1dY+I7rNIfLiytdub+fxeSSdW8HcNe3ZbIvqLIl1WZtygwZswvu5u 000BrU70VfeEO8NQKvbMizBd2hjrPiBp4UT/KJ+SmK3xs24Qggc1EPx2MAj57Qg6BK4V xwuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566991; x=1759171791; 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=jHDom8RqSvFBhHj/9Q/rXAoVV+sGpC/X8GRYrjCGKNI=; b=gHH+1B6J5algT2v9FLn1TcSD6V3GvRur4G/6uxL7PpPh7c5p2UnMEC5BXGnWWCBwNN Bcjy+Bsljaohj0hNgjNndiBUUZd2yo9CTY66Q3yExmCJptUqxk9eM7uXgebem/UenGMe yyBd1pCVdq2TD3OvAmr8zwHSbZuHE3hI8KLAYzQecMy1U2xwbNJQ4aiY2pUuvujr2owD jjzNbOWF5Yt3UFq51FZcSvPXIgq0HFRCvLi7mmCRLfKORvxPIXIoHJIdXKyB0mVHcCJ6 Z4uszGLkN+qMSpUlkeKKBvAAsEg78jlwze/kznRsoOAq215OdgTDjY6qKIOcFkewpb6x GtNg== X-Gm-Message-State: AOJu0YzwHB70l9KMqMbX8hh40FADKf/kO3RIPbcjMq/KrRykLI+yprse 84FL6eQ7AKP5nj+aiT+j5rfwtPnQc3KjLvn6boS/+3XEWpKUT7+LzAVbeknSBNvuVWMOIKPOrs7 HnjEU X-Gm-Gg: ASbGncthJePZXqx4da1T5GJ5/KnsbCQMZTe0Ed1gMtGIYz1FF9fefdy95WmHj3lpPkw RqlC/RWtiR3r3b8H3GcgeF+WqOkR0ISKj7D8gjnwYOXWD1tHzYMBOKq20aUT8IHty0PZd4anZhR RY1nF4SME2/geW+2MG7tcMFiAWIx6mzqdGvcdVeXUCFOYON+Q3td4PZdtUCfOSIbv3tkI1zCp8g VPmg0huIzjfbCo7FQx+nseUnFlMrKse63bL6Jw46fKjFTQwlEGcho4ZXUZWG3MZFQNKmNrEKQvW ByDD31CAv+YecW9YsD4ywl+aohP3yYr4mKshaz2SwthfIqEsntctKzq/hvsLpFOq3Lwd81JoRu0 zoN+lky8W/7YYZVi/pEuXDEMKzz8U X-Google-Smtp-Source: AGHT+IELIj2e2AE/JlVor0L3U7eO0NDK4nbbxGLgfDon/xopz74lgCyuM74OCjNG/KHQNt70PFmhNw== X-Received: by 2002:a05:6a00:330f:b0:77e:74d8:c6e5 with SMTP id d2e1a72fcca58-77e74d8dda0mr14025097b3a.15.1758566990678; Mon, 22 Sep 2025 11:49:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 17/76] include/exec/memopidx: Adjust for 32 mmu indexes Date: Mon, 22 Sep 2025 11:48:25 -0700 Message-ID: <20250922184924.2754205-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567274172116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/exec/memopidx.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/exec/memopidx.h b/include/exec/memopidx.h index eb7f1591a3..66d9c58b3a 100644 --- a/include/exec/memopidx.h +++ b/include/exec/memopidx.h @@ -25,9 +25,10 @@ typedef uint32_t MemOpIdx; static inline MemOpIdx make_memop_idx(MemOp op, unsigned idx) { #ifdef CONFIG_DEBUG_TCG - assert(idx <=3D 15); + assert(idx <=3D 31); + assert(clz32(op) >=3D 5); #endif - return (op << 4) | idx; + return (op << 5) | idx; } =20 /** @@ -38,7 +39,7 @@ static inline MemOpIdx make_memop_idx(MemOp op, unsigned = idx) */ static inline MemOp get_memop(MemOpIdx oi) { - return oi >> 4; + return oi >> 5; } =20 /** @@ -49,7 +50,7 @@ static inline MemOp get_memop(MemOpIdx oi) */ static inline unsigned get_mmuidx(MemOpIdx oi) { - return oi & 15; + return oi & 31; } =20 #endif --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567542; cv=none; d=zohomail.com; s=zohoarc; b=ArubFq3JVZdBxb+y+L+iruXzoSlL/k4Ogc7mGt0kB4BoZ1yXxt7KVrb5hkGwnvU38kU1xXYZBFitu5LZECcEoPbHwkbLq9FhxHEHOq7u1RxFx+itONIGIfP0gqwJv5/N4oH+HHODbaeZZPLlG7tODFk8byC/+UQSwNyjyyN6w6w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567542; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dwXNsvpsI+ev3l1X0Dinc/JnjQKCdGo0MRhCsyBFRqA=; b=YQZY2kFxCqlyY1zyk7Nk/uzwHe9kTx7YzKR5MC/d3wP3Mg2hak5Uhp4H3rhp+oUegNNtX9Qut9npQGlLpqEfiZv/WIL0V4Q190utq26vu798XKE/ByChyrgkKi0OxpEoSO+PBAMSwjBREfz4Z/3ZtzxKd2Ls6zJqM6qN3DATdoA= 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 1758567542301872.5383585934042; Mon, 22 Sep 2025 11:59:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbw-0004wP-LR; Mon, 22 Sep 2025 14:50:04 -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 1v0lbr-0004qu-CS for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:59 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbm-0004AK-91 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:49:59 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-77e6495c999so3282777b3a.3 for ; Mon, 22 Sep 2025 11:49:52 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566992; x=1759171792; darn=nongnu.org; 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=dwXNsvpsI+ev3l1X0Dinc/JnjQKCdGo0MRhCsyBFRqA=; b=dKecoTV8MjKPczlOi194es4WtbUA3l1UF4WW1OlGjPmaXLlH62Uf/4LlpizkeZogmb PYv3RERNSgpxxdryjgf6L19NEjBgQqwkYLmgu3BupvnmmRDS3T/rQTZce1t7fa9WqPj8 VTDhFUYz85luGpWcZCnYCG2K7m/ylSCg6Kp8FwpvhGAkdFOz9gqyOkkyuAdrvshpDJUs mcwkoPSDGqrijKCFfpeyKMlvCSJZkEMFIex4hUQS69PX4Ktvn+4vEmlnFz9i3fO9hEcp P1F0vftvpOtKoJX8xZ1GX9X7iOFal8GWH7+fkH1ReNOEjpj1G4XOP6EJ7hah+de9GRxu WiXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566992; x=1759171792; 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=dwXNsvpsI+ev3l1X0Dinc/JnjQKCdGo0MRhCsyBFRqA=; b=nLK0TbBhtBDLMXNYqG/8mWh8iYOIrBbvnYCPIfg9Fe9ayIrzGL7g7VK4l+ra6utfi0 TB7FxyPJn1vLN9VdyLpwWK4ZEHkwmIrB3wmB6rksdlnYj2NR71bBJ1p7eRUs14lTjwxL 6ZY4FB/UG+rp4VOKPHwwG/5VC2RJWwM/CO56jJ0tyaaEVeur3oZ4w0+P6WjR0Fr2e2em RTa4a7flPE7dwj6ftJlhCeLF1ybA9YejU9BrfqwpaEo2mCfnHMvVozp+jy5nIVYFiPRp 48+CgM5JMv/VSWF9oUyfooc+LXh2/ez6F6bDkClUQPwGrZjSxVBRmmGXSDrrwaXY0gy7 z4dg== X-Gm-Message-State: AOJu0Yy5smTDQcNAGNmtZ7+Rb1R8licHItUvbN32dWv7/vALAH/Lj98p aJCKGvOhictIN39gmCNzKDyZlUsjYYMNUP11pM2oAdk9SdTFmfvy0iSCS162ns2KFqMhDycsGVs 3xRg5 X-Gm-Gg: ASbGncs2DG/ES5XAOefRM3Z2mlIb1FpyWOUhY0cwL+UFzMmKxlQsHbu6i7or/ZMbi7Z ID1IODnKB8BzX61uZLSAwd4dTpGngOoNyyg7E+ymq/QFpkj21htT0KkFQqDCJDyo1/y9E4S41BR zmJ7trz7xlpg6ww+cR8ZovY7ed9CM7aUqFGEP7AlLoXcqJkfjQSpe2kJQSkyWyWdkd99usu3/Ln 7t/t5shGTefpBZHz1IhmMWlr/cZE3zFh7QrGV9kyoer56FRWaDtIUdZnIUeOzRp5PPm6RoD4ri4 G+8DtTwIBFv4a22HtenHm69C+PptGfmBboRMrfEuDFBEEeQVEc8et2M8otLmuJPEv4STSPz9KjY LYfuS548RfkH6h53JnOVbQQi1RWKj X-Google-Smtp-Source: AGHT+IEPL0u1ll3ZFjgOMl2zDHZVPngTrnSqaXnTj4EuWS0ZeHoSKlrPdKDGDxgPAf6XLeyVIzYQcA== X-Received: by 2002:a05:6a00:3cd6:b0:77f:50df:df30 with SMTP id d2e1a72fcca58-77f50dfe612mr904881b3a.17.1758566991740; Mon, 22 Sep 2025 11:49:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 18/76] include/hw/core/cpu: Widen MMUIdxMap Date: Mon, 22 Sep 2025 11:48:26 -0700 Message-ID: <20250922184924.2754205-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567543397116600 Content-Type: text/plain; charset="utf-8" Widen MMUIdxMap to 32 bits. Do not yet expand NB_MMU_MODES, but widen the map type in preparation. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/hw/core/cpu.h | 2 +- accel/tcg/cputlb.c | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 89fe937a6f..83d6e9c24e 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -201,7 +201,7 @@ struct CPUClass { * Fix the number of mmu modes to 16. */ #define NB_MMU_MODES 16 -typedef uint16_t MMUIdxMap; +typedef uint32_t MMUIdxMap; =20 /* Use a fully associative victim tlb of 8 entries. */ #define CPU_VTLB_SIZE 8 diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 2a6aa01c57..416aaa1040 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -89,9 +89,6 @@ */ QEMU_BUILD_BUG_ON(sizeof(vaddr) > sizeof(run_on_cpu_data)); =20 -/* We currently can't handle more than 16 bits in the MMUIDX bitmask. - */ -QEMU_BUILD_BUG_ON(NB_MMU_MODES > 16); #define ALL_MMUIDX_BITS ((1 << NB_MMU_MODES) - 1) =20 static inline size_t tlb_n_entries(CPUTLBDescFast *fast) --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567092; cv=none; d=zohomail.com; s=zohoarc; b=nggDRsKxkr5Vzh6ifYyaMjeq7B/17Stv0F7AJr+vMuvvy9b0EIQVOar+efMyOLHPDV8A+LwAzD7vSOUevaMIG2Yw29uskf6QUIONx65Arromm85xSrdhGGE5ZbnIcwxEwhtzqgOF1Kpfthtpp/uxNjNTQaNruV87Agihp+dHZCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567092; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zYe+uePxsIsajaRDVH94tF9MgiBWjfYNGABEvljPCDU=; b=OJpbykUjE09x6vc5SgH6wjwDzkk48lnUp7QEeWBzbxSgSa5FKuh/J/wSv8bm2RzLkvJE38C8eCG0LDSpbxzDJBSZn6M9cyU9fSo530EDWmfTrUYvPyaW2yNUyWOIqpo8q0HQ3rwrlhlz16suc3wBepHr+Zycz1XJqYJVo0Z/l60= 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 1758567092816595.5781190873709; Mon, 22 Sep 2025 11:51:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lbx-0004ww-54; Mon, 22 Sep 2025 14:50:05 -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 1v0lbs-0004rm-RQ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:01 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbn-0004Am-EN for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:00 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-77f454c57dbso790209b3a.2 for ; Mon, 22 Sep 2025 11:49:54 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566993; x=1759171793; darn=nongnu.org; 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=zYe+uePxsIsajaRDVH94tF9MgiBWjfYNGABEvljPCDU=; b=Gybyav+SKO3X/k9j1CVitRCirhkCRjXDES67QnuVA+gFyC0RuLwGh6rDZ86IW170wz BcAYT+jF7G6wx4R/T/2NwueYtuaJ56DdjHY0t0sKz5KEN8Jq8p2lVqzKPFaC6hIrIN3Z 4flRg8Ao21S7pui3EVSOc87Xv8HDgknf7vSVSZbnIfxsH2jAwMfm0/ClNJ2XBSvO4LcW OSbL4bnrK7nKiNc3gOFCYX9qXY4JKHYU7H2V8rZkL0BCIXYbA9Tekvn/NP+/NxqDJ0Qg FZokyapxXgkndVPAphqPyX6ho/bjVFv0qUjOrKOFqK7s1TEY1Xj8hpGI92goFmn6GBUy Mb2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566993; x=1759171793; 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=zYe+uePxsIsajaRDVH94tF9MgiBWjfYNGABEvljPCDU=; b=oEqCKzdd7IVD16ffo3XVSO97ns1Vu0A347+yyQbZRwJvv0qSpAcOVjukDnYJC/rO7Y dpg2bKnfn7/SMo9uEwDhsKHG0EjbI/TXnHHvkGlXMbNoiXXBFH8NT32a5KgeHBFKYOf8 ydEvTmNSNRNg0x4Wp0bgzrJeqvoaneaKd4n8i4fqT9nJdU7RZKIoJpQEHnFy0m9GQ7eO d6A8uya2nhm5jjOE0wiHKtaTEHOR02bcdoJb0kG46z4J5zE3ulnWYiSBReI/+CjEoYNN tDPfjnCE15GftyC8VfbFnlHEV0n6lmUD4BlhoucbrQoLannT3XbLLq25DtjQzaBRpTPk Y0sg== X-Gm-Message-State: AOJu0YxF1/hiudvaMLMgltkkLsgC8tfnAAnPcKjNgWjpdIOWcpVeLgYa PAbNOpf2up6cJDn5f5qKycps+tZ3pYX42hayE3Qodm3UkMOf1uADwgqrr4y8N1KxUTD5CyMeNL3 aUqDX X-Gm-Gg: ASbGncsbYRcO/UYJ9yK1tE9oCQk6vZe1sUQsx3NODmZzSnAcbinPH0Uk9mJeoFl4qUR l2e87yCN7XCTI90xIvRjsIP6DDQTXMJnqkLouTjXgeImMo1tkmaj8bxDY3FT9o9sZ5ViN9dyLKn tQMV+DhkWYPnMNjHOgn+kstdmN0SVdAbhTeZCrpEqmZjOegg7eTuUIFQcFu0+047+L/KXqZvAM6 UO96kZJnhzGYCUSuIVaCKLaiZOndelKM87K1tja+H90o3JxBSyLLUiELl1jua71mfA0j4aC/f95 e0a0XCJpQn8nh5vehHLqZau+pHaVGRRKVeyriTVlIOBycPG7tjD/nQA040RFZ0sT2ZRDDv6JYyz l5fS1/mnQN4eI2dKe20jNCZzN5D7Z X-Google-Smtp-Source: AGHT+IHUdBUOr8L6LENtd/TenG6Rvo3QIwjnS4zjuO4gSQxxEjApqN5gzhEJt5U0vdbPHCpcVTCTOw== X-Received: by 2002:a05:6a00:85aa:b0:77f:1b15:6b0d with SMTP id d2e1a72fcca58-77f1b15721cmr11182923b3a.13.1758566992879; Mon, 22 Sep 2025 11:49:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 19/76] target/arm: Split out mmuidx.h from cpu.h Date: Mon, 22 Sep 2025 11:48:27 -0700 Message-ID: <20250922184924.2754205-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567094180116600 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu.h | 207 +----------------------------------------- target/arm/mmuidx.h | 216 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+), 206 deletions(-) create mode 100644 target/arm/mmuidx.h diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 4dd4c6d4bf..d5a45e9b43 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -33,6 +33,7 @@ #include "target/arm/multiprocessing.h" #include "target/arm/gtimer.h" #include "target/arm/cpu-sysregs.h" +#include "target/arm/mmuidx.h" =20 #define EXCP_UDEF 1 /* undefined instruction */ #define EXCP_SWI 2 /* software interrupt */ @@ -2705,212 +2706,6 @@ bool write_cpustate_to_list(ARMCPU *cpu, bool kvm_s= ync); =20 #define TYPE_ARM_HOST_CPU "host-" TYPE_ARM_CPU =20 -/* ARM has the following "translation regimes" (as the ARM ARM calls them): - * - * If EL3 is 64-bit: - * + NonSecure EL1 & 0 stage 1 - * + NonSecure EL1 & 0 stage 2 - * + NonSecure EL2 - * + NonSecure EL2 & 0 (ARMv8.1-VHE) - * + Secure EL1 & 0 stage 1 - * + Secure EL1 & 0 stage 2 (FEAT_SEL2) - * + Secure EL2 (FEAT_SEL2) - * + Secure EL2 & 0 (FEAT_SEL2) - * + Realm EL1 & 0 stage 1 (FEAT_RME) - * + Realm EL1 & 0 stage 2 (FEAT_RME) - * + Realm EL2 (FEAT_RME) - * + EL3 - * If EL3 is 32-bit: - * + NonSecure PL1 & 0 stage 1 - * + NonSecure PL1 & 0 stage 2 - * + NonSecure PL2 - * + Secure PL1 & 0 - * (reminder: for 32 bit EL3, Secure PL1 is *EL3*, not EL1.) - * - * For QEMU, an mmu_idx is not quite the same as a translation regime beca= use: - * 1. we need to split the "EL1 & 0" and "EL2 & 0" regimes into two mmu_i= dxes, - * because they may differ in access permissions even if the VA->PA ma= p is - * the same - * 2. we want to cache in our TLB the full VA->IPA->PA lookup for a stage= 1+2 - * translation, which means that we have one mmu_idx that deals with t= wo - * concatenated translation regimes [this sort of combined s1+2 TLB is - * architecturally permitted] - * 3. we don't need to allocate an mmu_idx to translations that we won't = be - * handling via the TLB. The only way to do a stage 1 translation with= out - * the immediate stage 2 translation is via the ATS or AT system insns, - * which can be slow-pathed and always do a page table walk. - * The only use of stage 2 translations is either as part of an s1+2 - * lookup or when loading the descriptors during a stage 1 page table = walk, - * and in both those cases we don't use the TLB. - * 4. we can also safely fold together the "32 bit EL3" and "64 bit EL3" - * translation regimes, because they map reasonably well to each other - * and they can't both be active at the same time. - * 5. we want to be able to use the TLB for accesses done as part of a - * stage1 page table walk, rather than having to walk the stage2 page - * table over and over. - * 6. we need separate EL1/EL2 mmu_idx for handling the Privileged Access - * Never (PAN) bit within PSTATE. - * 7. we fold together most secure and non-secure regimes for A-profile, - * because there are no banked system registers for aarch64, so the - * process of switching between secure and non-secure is - * already heavyweight. - * 8. we cannot fold together Stage 2 Secure and Stage 2 NonSecure, - * because both are in use simultaneously for Secure EL2. - * - * This gives us the following list of cases: - * - * EL0 EL1&0 stage 1+2 (aka NS PL0 PL1&0 stage 1+2) - * EL1 EL1&0 stage 1+2 (aka NS PL1 PL1&0 stage 1+2) - * EL1 EL1&0 stage 1+2 +PAN (aka NS PL1 P1&0 stage 1+2 +PAN) - * EL0 EL2&0 - * EL2 EL2&0 - * EL2 EL2&0 +PAN - * EL2 (aka NS PL2) - * EL3 (aka AArch32 S PL1 PL1&0) - * AArch32 S PL0 PL1&0 (we call this EL30_0) - * AArch32 S PL1 PL1&0 +PAN (we call this EL30_3_PAN) - * Stage2 Secure - * Stage2 NonSecure - * plus one TLB per Physical address space: S, NS, Realm, Root - * - * for a total of 16 different mmu_idx. - * - * R profile CPUs have an MPU, but can use the same set of MMU indexes - * as A profile. They only need to distinguish EL0 and EL1 (and - * EL2 for cores like the Cortex-R52). - * - * M profile CPUs are rather different as they do not have a true MMU. - * They have the following different MMU indexes: - * User - * Privileged - * User, execution priority negative (ie the MPU HFNMIENA bit may apply) - * Privileged, execution priority negative (ditto) - * If the CPU supports the v8M Security Extension then there are also: - * Secure User - * Secure Privileged - * Secure User, execution priority negative - * Secure Privileged, execution priority negative - * - * The ARMMMUIdx and the mmu index value used by the core QEMU TLB code - * are not quite the same -- different CPU types (most notably M profile - * vs A/R profile) would like to use MMU indexes with different semantics, - * but since we don't ever need to use all of those in a single CPU we - * can avoid having to set NB_MMU_MODES to "total number of A profile MMU - * modes + total number of M profile MMU modes". The lower bits of - * ARMMMUIdx are the core TLB mmu index, and the higher bits are always - * the same for any particular CPU. - * Variables of type ARMMUIdx are always full values, and the core - * index values are in variables of type 'int'. - * - * Our enumeration includes at the end some entries which are not "true" - * mmu_idx values in that they don't have corresponding TLBs and are only - * valid for doing slow path page table walks. - * - * The constant names here are patterned after the general style of the na= mes - * of the AT/ATS operations. - * The values used are carefully arranged to make mmu_idx =3D> EL lookup e= asy. - * For M profile we arrange them to have a bit for priv, a bit for negpri - * and a bit for secure. - */ -#define ARM_MMU_IDX_A 0x10 /* A profile */ -#define ARM_MMU_IDX_NOTLB 0x20 /* does not have a TLB */ -#define ARM_MMU_IDX_M 0x40 /* M profile */ - -/* Meanings of the bits for M profile mmu idx values */ -#define ARM_MMU_IDX_M_PRIV 0x1 -#define ARM_MMU_IDX_M_NEGPRI 0x2 -#define ARM_MMU_IDX_M_S 0x4 /* Secure */ - -#define ARM_MMU_IDX_TYPE_MASK \ - (ARM_MMU_IDX_A | ARM_MMU_IDX_M | ARM_MMU_IDX_NOTLB) -#define ARM_MMU_IDX_COREIDX_MASK 0xf - -typedef enum ARMMMUIdx { - /* - * A-profile. - */ - ARMMMUIdx_E10_0 =3D 0 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_0 =3D 1 | ARM_MMU_IDX_A, - ARMMMUIdx_E10_1 =3D 2 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_2 =3D 3 | ARM_MMU_IDX_A, - ARMMMUIdx_E10_1_PAN =3D 4 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_2_PAN =3D 5 | ARM_MMU_IDX_A, - ARMMMUIdx_E2 =3D 6 | ARM_MMU_IDX_A, - ARMMMUIdx_E3 =3D 7 | ARM_MMU_IDX_A, - ARMMMUIdx_E30_0 =3D 8 | ARM_MMU_IDX_A, - ARMMMUIdx_E30_3_PAN =3D 9 | ARM_MMU_IDX_A, - - /* - * Used for second stage of an S12 page table walk, or for descriptor - * loads during first stage of an S1 page table walk. Note that both - * are in use simultaneously for SecureEL2: the security state for - * the S2 ptw is selected by the NS bit from the S1 ptw. - */ - ARMMMUIdx_Stage2_S =3D 10 | ARM_MMU_IDX_A, - ARMMMUIdx_Stage2 =3D 11 | ARM_MMU_IDX_A, - - /* TLBs with 1-1 mapping to the physical address spaces. */ - ARMMMUIdx_Phys_S =3D 12 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_NS =3D 13 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_Root =3D 14 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_Realm =3D 15 | ARM_MMU_IDX_A, - - /* - * These are not allocated TLBs and are used only for AT system - * instructions or for the first stage of an S12 page table walk. - */ - ARMMMUIdx_Stage1_E0 =3D 0 | ARM_MMU_IDX_NOTLB, - ARMMMUIdx_Stage1_E1 =3D 1 | ARM_MMU_IDX_NOTLB, - ARMMMUIdx_Stage1_E1_PAN =3D 2 | ARM_MMU_IDX_NOTLB, - - /* - * M-profile. - */ - ARMMMUIdx_MUser =3D ARM_MMU_IDX_M, - ARMMMUIdx_MPriv =3D ARM_MMU_IDX_M | ARM_MMU_IDX_M_PRIV, - ARMMMUIdx_MUserNegPri =3D ARMMMUIdx_MUser | ARM_MMU_IDX_M_NEGPRI, - ARMMMUIdx_MPrivNegPri =3D ARMMMUIdx_MPriv | ARM_MMU_IDX_M_NEGPRI, - ARMMMUIdx_MSUser =3D ARMMMUIdx_MUser | ARM_MMU_IDX_M_S, - ARMMMUIdx_MSPriv =3D ARMMMUIdx_MPriv | ARM_MMU_IDX_M_S, - ARMMMUIdx_MSUserNegPri =3D ARMMMUIdx_MUserNegPri | ARM_MMU_IDX_M_S, - ARMMMUIdx_MSPrivNegPri =3D ARMMMUIdx_MPrivNegPri | ARM_MMU_IDX_M_S, -} ARMMMUIdx; - -/* - * Bit macros for the core-mmu-index values for each index, - * for use when calling tlb_flush_by_mmuidx() and friends. - */ -#define TO_CORE_BIT(NAME) \ - ARMMMUIdxBit_##NAME =3D 1 << (ARMMMUIdx_##NAME & ARM_MMU_IDX_COREIDX_M= ASK) - -typedef enum ARMMMUIdxBit { - TO_CORE_BIT(E10_0), - TO_CORE_BIT(E20_0), - TO_CORE_BIT(E10_1), - TO_CORE_BIT(E10_1_PAN), - TO_CORE_BIT(E2), - TO_CORE_BIT(E20_2), - TO_CORE_BIT(E20_2_PAN), - TO_CORE_BIT(E3), - TO_CORE_BIT(E30_0), - TO_CORE_BIT(E30_3_PAN), - TO_CORE_BIT(Stage2), - TO_CORE_BIT(Stage2_S), - - TO_CORE_BIT(MUser), - TO_CORE_BIT(MPriv), - TO_CORE_BIT(MUserNegPri), - TO_CORE_BIT(MPrivNegPri), - TO_CORE_BIT(MSUser), - TO_CORE_BIT(MSPriv), - TO_CORE_BIT(MSUserNegPri), - TO_CORE_BIT(MSPrivNegPri), -} ARMMMUIdxBit; - -#undef TO_CORE_BIT - -#define MMU_USER_IDX 0 - /* Indexes used when registering address spaces with cpu_address_space_ini= t */ typedef enum ARMASIdx { ARMASIdx_NS =3D 0, diff --git a/target/arm/mmuidx.h b/target/arm/mmuidx.h new file mode 100644 index 0000000000..5b9b4bc84f --- /dev/null +++ b/target/arm/mmuidx.h @@ -0,0 +1,216 @@ +/* + * QEMU Arm software mmu index definitions + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TARGET_ARM_MMUIDX_H +#define TARGET_ARM_MMUIDX_H + +/* + * Arm has the following "translation regimes" (as the Arm ARM calls them): + * + * If EL3 is 64-bit: + * + NonSecure EL1 & 0 stage 1 + * + NonSecure EL1 & 0 stage 2 + * + NonSecure EL2 + * + NonSecure EL2 & 0 (ARMv8.1-VHE) + * + Secure EL1 & 0 stage 1 + * + Secure EL1 & 0 stage 2 (FEAT_SEL2) + * + Secure EL2 (FEAT_SEL2) + * + Secure EL2 & 0 (FEAT_SEL2) + * + Realm EL1 & 0 stage 1 (FEAT_RME) + * + Realm EL1 & 0 stage 2 (FEAT_RME) + * + Realm EL2 (FEAT_RME) + * + EL3 + * If EL3 is 32-bit: + * + NonSecure PL1 & 0 stage 1 + * + NonSecure PL1 & 0 stage 2 + * + NonSecure PL2 + * + Secure PL1 & 0 + * (reminder: for 32 bit EL3, Secure PL1 is *EL3*, not EL1.) + * + * For QEMU, an mmu_idx is not quite the same as a translation regime beca= use: + * 1. we need to split the "EL1 & 0" and "EL2 & 0" regimes into two mmu_i= dxes, + * because they may differ in access permissions even if the VA->PA ma= p is + * the same + * 2. we want to cache in our TLB the full VA->IPA->PA lookup for a stage= 1+2 + * translation, which means that we have one mmu_idx that deals with t= wo + * concatenated translation regimes [this sort of combined s1+2 TLB is + * architecturally permitted] + * 3. we don't need to allocate an mmu_idx to translations that we won't = be + * handling via the TLB. The only way to do a stage 1 translation with= out + * the immediate stage 2 translation is via the ATS or AT system insns, + * which can be slow-pathed and always do a page table walk. + * The only use of stage 2 translations is either as part of an s1+2 + * lookup or when loading the descriptors during a stage 1 page table = walk, + * and in both those cases we don't use the TLB. + * 4. we can also safely fold together the "32 bit EL3" and "64 bit EL3" + * translation regimes, because they map reasonably well to each other + * and they can't both be active at the same time. + * 5. we want to be able to use the TLB for accesses done as part of a + * stage1 page table walk, rather than having to walk the stage2 page + * table over and over. + * 6. we need separate EL1/EL2 mmu_idx for handling the Privileged Access + * Never (PAN) bit within PSTATE. + * 7. we fold together most secure and non-secure regimes for A-profile, + * because there are no banked system registers for aarch64, so the + * process of switching between secure and non-secure is + * already heavyweight. + * 8. we cannot fold together Stage 2 Secure and Stage 2 NonSecure, + * because both are in use simultaneously for Secure EL2. + * + * This gives us the following list of cases: + * + * EL0 EL1&0 stage 1+2 (aka NS PL0 PL1&0 stage 1+2) + * EL1 EL1&0 stage 1+2 (aka NS PL1 PL1&0 stage 1+2) + * EL1 EL1&0 stage 1+2 +PAN (aka NS PL1 P1&0 stage 1+2 +PAN) + * EL0 EL2&0 + * EL2 EL2&0 + * EL2 EL2&0 +PAN + * EL2 (aka NS PL2) + * EL3 (aka AArch32 S PL1 PL1&0) + * AArch32 S PL0 PL1&0 (we call this EL30_0) + * AArch32 S PL1 PL1&0 +PAN (we call this EL30_3_PAN) + * Stage2 Secure + * Stage2 NonSecure + * plus one TLB per Physical address space: S, NS, Realm, Root + * + * for a total of 16 different mmu_idx. + * + * R profile CPUs have an MPU, but can use the same set of MMU indexes + * as A profile. They only need to distinguish EL0 and EL1 (and + * EL2 for cores like the Cortex-R52). + * + * M profile CPUs are rather different as they do not have a true MMU. + * They have the following different MMU indexes: + * User + * Privileged + * User, execution priority negative (ie the MPU HFNMIENA bit may apply) + * Privileged, execution priority negative (ditto) + * If the CPU supports the v8M Security Extension then there are also: + * Secure User + * Secure Privileged + * Secure User, execution priority negative + * Secure Privileged, execution priority negative + * + * The ARMMMUIdx and the mmu index value used by the core QEMU TLB code + * are not quite the same -- different CPU types (most notably M profile + * vs A/R profile) would like to use MMU indexes with different semantics, + * but since we don't ever need to use all of those in a single CPU we + * can avoid having to set NB_MMU_MODES to "total number of A profile MMU + * modes + total number of M profile MMU modes". The lower bits of + * ARMMMUIdx are the core TLB mmu index, and the higher bits are always + * the same for any particular CPU. + * Variables of type ARMMUIdx are always full values, and the core + * index values are in variables of type 'int'. + * + * Our enumeration includes at the end some entries which are not "true" + * mmu_idx values in that they don't have corresponding TLBs and are only + * valid for doing slow path page table walks. + * + * The constant names here are patterned after the general style of the na= mes + * of the AT/ATS operations. + * The values used are carefully arranged to make mmu_idx =3D> EL lookup e= asy. + * For M profile we arrange them to have a bit for priv, a bit for negpri + * and a bit for secure. + */ +#define ARM_MMU_IDX_A 0x10 /* A profile */ +#define ARM_MMU_IDX_NOTLB 0x20 /* does not have a TLB */ +#define ARM_MMU_IDX_M 0x40 /* M profile */ + +/* Meanings of the bits for M profile mmu idx values */ +#define ARM_MMU_IDX_M_PRIV 0x1 +#define ARM_MMU_IDX_M_NEGPRI 0x2 +#define ARM_MMU_IDX_M_S 0x4 /* Secure */ + +#define ARM_MMU_IDX_TYPE_MASK \ + (ARM_MMU_IDX_A | ARM_MMU_IDX_M | ARM_MMU_IDX_NOTLB) +#define ARM_MMU_IDX_COREIDX_MASK 0xf + +typedef enum ARMMMUIdx { + /* + * A-profile. + */ + ARMMMUIdx_E10_0 =3D 0 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_0 =3D 1 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_1 =3D 2 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_2 =3D 3 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_1_PAN =3D 4 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_2_PAN =3D 5 | ARM_MMU_IDX_A, + ARMMMUIdx_E2 =3D 6 | ARM_MMU_IDX_A, + ARMMMUIdx_E3 =3D 7 | ARM_MMU_IDX_A, + ARMMMUIdx_E30_0 =3D 8 | ARM_MMU_IDX_A, + ARMMMUIdx_E30_3_PAN =3D 9 | ARM_MMU_IDX_A, + + /* + * Used for second stage of an S12 page table walk, or for descriptor + * loads during first stage of an S1 page table walk. Note that both + * are in use simultaneously for SecureEL2: the security state for + * the S2 ptw is selected by the NS bit from the S1 ptw. + */ + ARMMMUIdx_Stage2_S =3D 10 | ARM_MMU_IDX_A, + ARMMMUIdx_Stage2 =3D 11 | ARM_MMU_IDX_A, + + /* TLBs with 1-1 mapping to the physical address spaces. */ + ARMMMUIdx_Phys_S =3D 12 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_NS =3D 13 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_Root =3D 14 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_Realm =3D 15 | ARM_MMU_IDX_A, + + /* + * These are not allocated TLBs and are used only for AT system + * instructions or for the first stage of an S12 page table walk. + */ + ARMMMUIdx_Stage1_E0 =3D 0 | ARM_MMU_IDX_NOTLB, + ARMMMUIdx_Stage1_E1 =3D 1 | ARM_MMU_IDX_NOTLB, + ARMMMUIdx_Stage1_E1_PAN =3D 2 | ARM_MMU_IDX_NOTLB, + + /* + * M-profile. + */ + ARMMMUIdx_MUser =3D ARM_MMU_IDX_M, + ARMMMUIdx_MPriv =3D ARM_MMU_IDX_M | ARM_MMU_IDX_M_PRIV, + ARMMMUIdx_MUserNegPri =3D ARMMMUIdx_MUser | ARM_MMU_IDX_M_NEGPRI, + ARMMMUIdx_MPrivNegPri =3D ARMMMUIdx_MPriv | ARM_MMU_IDX_M_NEGPRI, + ARMMMUIdx_MSUser =3D ARMMMUIdx_MUser | ARM_MMU_IDX_M_S, + ARMMMUIdx_MSPriv =3D ARMMMUIdx_MPriv | ARM_MMU_IDX_M_S, + ARMMMUIdx_MSUserNegPri =3D ARMMMUIdx_MUserNegPri | ARM_MMU_IDX_M_S, + ARMMMUIdx_MSPrivNegPri =3D ARMMMUIdx_MPrivNegPri | ARM_MMU_IDX_M_S, +} ARMMMUIdx; + +/* + * Bit macros for the core-mmu-index values for each index, + * for use when calling tlb_flush_by_mmuidx() and friends. + */ +#define TO_CORE_BIT(NAME) \ + ARMMMUIdxBit_##NAME =3D 1 << (ARMMMUIdx_##NAME & ARM_MMU_IDX_COREIDX_M= ASK) + +typedef enum ARMMMUIdxBit { + TO_CORE_BIT(E10_0), + TO_CORE_BIT(E20_0), + TO_CORE_BIT(E10_1), + TO_CORE_BIT(E10_1_PAN), + TO_CORE_BIT(E2), + TO_CORE_BIT(E20_2), + TO_CORE_BIT(E20_2_PAN), + TO_CORE_BIT(E3), + TO_CORE_BIT(E30_0), + TO_CORE_BIT(E30_3_PAN), + TO_CORE_BIT(Stage2), + TO_CORE_BIT(Stage2_S), + + TO_CORE_BIT(MUser), + TO_CORE_BIT(MPriv), + TO_CORE_BIT(MUserNegPri), + TO_CORE_BIT(MPrivNegPri), + TO_CORE_BIT(MSUser), + TO_CORE_BIT(MSPriv), + TO_CORE_BIT(MSUserNegPri), + TO_CORE_BIT(MSPrivNegPri), +} ARMMMUIdxBit; + +#undef TO_CORE_BIT + +#define MMU_USER_IDX 0 + +#endif /* TARGET_ARM_MMUIDX_H */ --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567382; cv=none; d=zohomail.com; s=zohoarc; b=UMpUN9RUbDscWggS/0Iiy52AqRcx0I2xErQQzyhS3+748yqiyv8Lto7jBeV7VU1G8O4APgmp+sWDK5mrvix0+2xu0HRxutDudP+1Ju3P19RrHM34zXMIJMR9Z4AyQshsPX6ZCMRMXnJTI0Pou/O4fGpVXMQqzROKyIfs/tM1OSA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567382; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BGgbkOYgstOm3FLiDI4TAuGXBCVfOMBg0ypvUcABhs8=; b=nVrRDFgTrTdzyniliyuXtqkDIxFFDhm6Zwr1nmfMLkTgdrvnzPI3+pM76ZS89rNOuXhitgRDK06XAmdAnOhBcmPvNlZ3P1yHfdRi/t7R8HH48La4nMt8Jue0BZ+NdBsx/F3YJt5i+0TV0aBvF70PzL4r2Dzb+Brzx/F3cAFDUh0= 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 1758567382673787.6984455905282; Mon, 22 Sep 2025 11:56:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcA-00056V-Na; Mon, 22 Sep 2025 14:50:18 -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 1v0lbx-0004xU-HJ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:08 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbo-0004Au-E2 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:05 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-77da29413acso5014123b3a.1 for ; Mon, 22 Sep 2025 11:49:55 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566994; x=1759171794; darn=nongnu.org; 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=BGgbkOYgstOm3FLiDI4TAuGXBCVfOMBg0ypvUcABhs8=; b=ZMpk7uo5CnwrCxE2xvV9kd3Z+Lj35CWm7V57kHOjafNpMNEW5CXwHNVLuXtMNMd1ly 7FIKvQBzDiH6lauAjN0BvNKQG06a1UbBL6mxz7n+LfASFLyH4Mo8Y3i4EaTGTDH+HUwg tRk3lE+UoGIQ0SpUNZsTImyIP2bqW8+pP28bwvnYcBY8CwjGiPSCyUQh0SGjao5TmfN3 s1MK8j/5A2Q21xmLRKGdt/c1ChkpFWzdR+6S4k81VxGtcuD5tW2QsOpoEUu/WDUKiqky q4NXnKR2VmJShVUGuLhE4QgO3ZimBXlnLGx/kqMcKMsEGlCENdlxYqB5ODiBUORDeqTX b7Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566994; x=1759171794; 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=BGgbkOYgstOm3FLiDI4TAuGXBCVfOMBg0ypvUcABhs8=; b=kKTNPIqzWlugsded0HWmRhnPUnlTDgOp7cDbpXoU/cvurct8DD1tcoZYt1o8nXr6MV IYMnvb5dmbNBNsuO3uUerl0IzfApPQTS98qh/s4ZY3ePfGPSMAk+2VHy4Mpab7rhSMsJ WhrettYb1OO2BBykaZ01V9kTXOcJoTaVLThNV4v6vad1yemTngYpA70G5zVWq18/Gvuh xDU2bmzOke9StwkCBcX0IuC20vqYvPgSjE+gt8PErkYaj93dWutqNOcOZWoLQxdD2fcJ m6RiW0asW5gZjIFTooJ34pSgwuwC7SopSXlTaa2E2j8nUT6cBoOGrkrd0ci4ao3oK8CA AiIg== X-Gm-Message-State: AOJu0Yx7LvQJuf6qcEor2Bq36GHZMejoHDxQXYNrr/kAf1VftnCMv8Yb n0L7IJlsXPwhBpYYrKh5dMemWfPkrS7+cwpfsb+hYfBQHlVwg1KmKP0NJ0PKFFfTGtHKJVFtwc3 3rr+7 X-Gm-Gg: ASbGncs2NetlioM/VAP3wBuuSLt4heUtZrynTmrbsMRG4xU7j79vOlryzsOVkpnpoXW 8YaRRKhHfmqBEynTt3X48+w7FxGYewMyaHVqgK/BuGRtqBrnLY2sfwW+lc3ieeIRJKFCHImvoOm 9mgLDoxsE9Esndk99dpboiV/bkF/J2Kr8RWbu/GUuVyIieBdAS4595MB+91HQXh6aqouS3mHTXc EHBFSaPAJ5KQ6lXE5q0/LKrI8JVeHO4ADCuaiJ9f2jNDm7GkzhRTCZh3iMShQ+uGbZwzLVK4XGO s0MZdfgv5OYnZYoySYRFpSYV7aE1sGWZ/38EndC08SjUpvGnZ2qbA/7HfYlBD7yp1Faw/p9fSou UEwI10EyyOgb+BGkQmd+SF2PLWVb+ X-Google-Smtp-Source: AGHT+IEXhlhum1r7tAymTwLclKht9P9QQvFDoXQWtYxlYmcPX4xpfx1wgWnz0frEgA9HV/+gX+HRSA== X-Received: by 2002:a05:6a21:6da0:b0:2c8:85a5:c421 with SMTP id adf61e73a8af0-2cfda85d44amr144819637.18.1758566993781; Mon, 22 Sep 2025 11:49:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 20/76] target/arm: Convert arm_mmu_idx_to_el from switch to table Date: Mon, 22 Sep 2025 11:48:28 -0700 Message-ID: <20250922184924.2754205-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567383523116600 In an effort to keep all ARMMMUIdx data in one place, begin construction of an info table describing all of the properties of the mmu_idx. Begin with the access EL. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 3 +-- target/arm/mmuidx-internal.h | 29 +++++++++++++++++++++++++ target/arm/helper.c | 27 ------------------------ target/arm/mmuidx.c | 41 ++++++++++++++++++++++++++++++++++++ target/arm/meson.build | 7 +++++- 5 files changed, 77 insertions(+), 30 deletions(-) create mode 100644 target/arm/mmuidx-internal.h create mode 100644 target/arm/mmuidx.c diff --git a/target/arm/internals.h b/target/arm/internals.h index a2ee5f8739..c29682da7d 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -34,6 +34,7 @@ #include "system/memory.h" #include "syndrome.h" #include "cpu-features.h" +#include "mmuidx-internal.h" =20 /* register banks for CPU modes */ #define BANK_USRSYS 0 @@ -984,8 +985,6 @@ static inline ARMMMUIdx core_to_aa64_mmu_idx(int mmu_id= x) return mmu_idx | ARM_MMU_IDX_A; } =20 -int arm_mmu_idx_to_el(ARMMMUIdx mmu_idx); - /* Return the MMU index for a v7M CPU in the specified security state */ ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate); =20 diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h new file mode 100644 index 0000000000..29bba4ecb5 --- /dev/null +++ b/target/arm/mmuidx-internal.h @@ -0,0 +1,29 @@ +/* + * QEMU Arm software mmu index internal definitions + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TARGET_ARM_MMUIDX_INTERNAL_H +#define TARGET_ARM_MMUIDX_INTERNAL_H + +#include "mmuidx.h" +#include "tcg/debug-assert.h" +#include "hw/registerfields.h" + + +FIELD(MMUIDXINFO, EL, 0, 2) +FIELD(MMUIDXINFO, ELVALID, 2, 1) + +extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; + +#define arm_mmuidx_is_valid(x) ((unsigned)(x) < ARRAY_SIZE(arm_mmuidx_tab= le)) + +/* Return the exception level associated with this mmu index. */ +static inline int arm_mmu_idx_to_el(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + tcg_debug_assert(FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, ELVALID= )); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, EL); +} + +#endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/helper.c b/target/arm/helper.c index f66868f9ef..ea343e9d48 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9639,33 +9639,6 @@ int fp_exception_el(CPUARMState *env, int cur_el) return 0; } =20 -/* Return the exception level we're running at if this is our mmu_idx */ -int arm_mmu_idx_to_el(ARMMMUIdx mmu_idx) -{ - if (mmu_idx & ARM_MMU_IDX_M) { - return mmu_idx & ARM_MMU_IDX_M_PRIV; - } - - switch (mmu_idx) { - case ARMMMUIdx_E10_0: - case ARMMMUIdx_E20_0: - case ARMMMUIdx_E30_0: - return 0; - case ARMMMUIdx_E10_1: - case ARMMMUIdx_E10_1_PAN: - return 1; - case ARMMMUIdx_E2: - case ARMMMUIdx_E20_2: - case ARMMMUIdx_E20_2_PAN: - return 2; - case ARMMMUIdx_E3: - case ARMMMUIdx_E30_3_PAN: - return 3; - default: - g_assert_not_reached(); - } -} - #ifndef CONFIG_TCG ARMMMUIdx arm_v7m_mmu_idx_for_secstate(CPUARMState *env, bool secstate) { diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c new file mode 100644 index 0000000000..309b1d68df --- /dev/null +++ b/target/arm/mmuidx.c @@ -0,0 +1,41 @@ +/* + * QEMU Arm software mmu index definitions + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "mmuidx-internal.h" + + +#define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK) + +const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { + /* + * A-profile. + */ + [ARMMMUIdx_E10_0] =3D EL(0), + [ARMMMUIdx_E10_1] =3D EL(1), + [ARMMMUIdx_E10_1_PAN] =3D EL(1), + + [ARMMMUIdx_E20_0] =3D EL(0), + [ARMMMUIdx_E20_2] =3D EL(2), + [ARMMMUIdx_E20_2_PAN] =3D EL(2), + + [ARMMMUIdx_E2] =3D EL(2), + + [ARMMMUIdx_E3] =3D EL(3), + [ARMMMUIdx_E30_0] =3D EL(0), + [ARMMMUIdx_E30_3_PAN] =3D EL(3), + + /* + * M-profile. + */ + [ARMMMUIdx_MUser] =3D EL(0), + [ARMMMUIdx_MPriv] =3D EL(1), + [ARMMMUIdx_MUserNegPri] =3D EL(0), + [ARMMMUIdx_MPrivNegPri] =3D EL(1), + [ARMMMUIdx_MSUser] =3D EL(0), + [ARMMMUIdx_MSPriv] =3D EL(1), + [ARMMMUIdx_MSUserNegPri] =3D EL(0), + [ARMMMUIdx_MSPrivNegPri] =3D EL(1), +}; diff --git a/target/arm/meson.build b/target/arm/meson.build index 07d9271aa4..91630a1f72 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -6,7 +6,12 @@ arm_ss.add(files( =20 arm_ss.add(when: 'TARGET_AARCH64', if_true: files( 'cpu64.c', - 'gdbstub64.c')) + 'gdbstub64.c' +)) + +arm_common_ss.add(files( + 'mmuidx.c', +)) =20 arm_system_ss =3D ss.source_set() arm_common_system_ss =3D ss.source_set() --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567891; cv=none; d=zohomail.com; s=zohoarc; b=JdPg0xWl/n3W2RpSlO6N5W8CkGqGuortTAxRgeeEkTk4EkIObSaducF/L5+zJjlR2KTZQafy5EymE/78Z/IGZuDm377EeMVYGCPkbix5yTd5PEos0dyotlDwYpu5mXx4ZykzwypfGmDahqbcOe4oU6M2iR2u4wcUISPbyNIKc0Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567891; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=abGCKgev04oeEhG3rgazv9SPtOpq/6p9y11w+U7Ho90=; b=mzyIilmG7shLyPAXY4A0YZBtbxe9w9zwiKW7Bzcm3c2T5I90MCaCckm0eSkgQsxnAxnu92pu15cfSCF09LqtdYd84r89StxG4KAXwGCagqgXlttp55VPWwFZsFw7IUK/VhWVloORiU7Pt4QQI4o5xyhko1mPGx2zH714zvWloXI= 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 1758567891329151.51050380697438; Mon, 22 Sep 2025 12:04:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lc1-0004wv-0B; Mon, 22 Sep 2025 14:50:09 -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 1v0lbt-0004u9-M7 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:01 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbo-0004BE-Dq for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:01 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-77f0efd84abso2135763b3a.3 for ; Mon, 22 Sep 2025 11:49:55 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566995; x=1759171795; darn=nongnu.org; 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=abGCKgev04oeEhG3rgazv9SPtOpq/6p9y11w+U7Ho90=; b=M2nGbysEPpfqx58j3LMwHXRuitLdMr4Npdui6ERJS0MaWLMnK89aPDsJwKyuj9i2VW UQFVa3Ad5OKrFfjkXQJCowLeLiOVtDWFMgcG+8Vt3Qe5RdaVGvagNBGo0c1BYVRA2mB4 Q+BFDhoYMeppyCMhnMNTc0ejbcTumsrfH1OF6EkwR8et17QqOuR/CuEBhH3OEAr7i3C2 EW80xYvSvwzq785BeguI+7XFJoKzTj4AA2jw8S0KkoeV+XIL6HMa6hjHP2oIe2GkFiPR 4O8XKJp8OlRtY1h1YCEwO8nTjXAMxlJEePfnC0hf/lPNkA5xF+x+Lf/rrSD7L+ARvZaJ 6/ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566995; x=1759171795; 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=abGCKgev04oeEhG3rgazv9SPtOpq/6p9y11w+U7Ho90=; b=GxdXSRqHqfxEY05IcUhmpBAoJZ8nGuh4xHyJXk6T2ihdbvdwAa31c4oMKBI+O0W0o8 XTkBy9tgObOB6QPIqwLXrDBn6rne2X4uRShPtee8+A4zMQB/QBnixlJmQxzp6nGi+3Oa vezuL3JwvX+Cq7XYnql9vpjpJ7YBDPFUFnCnztpigvYkvAVzO71fiWsWPmV++6KhyAyw 6Qm0QLJKY6HMuKw2h89DjHkGY9oYDoMYyyiAChVjBn18fDJqHbK6wWcST9XHvVgAIkU3 ornGdWKm9yAqnoNBS5IIzH6zc3T6eT00e+1K9YG1Yt5vpmRdcjqokksqmvKonro9ip7/ dxbQ== X-Gm-Message-State: AOJu0Yzy/oWBiKq78yu9Q67Incnaex4TYwZw90lDMhdczibg/LInd2Ac XCrJykdeqoNjrfMHhO0PoQLuntqGYvVTzLGOkj0VtpEl5R+Jl27ojuOOj6qufgkHJsDda3slTqL asFaX X-Gm-Gg: ASbGncs+7TPvbRrDBmwhczyj23/0ahKKDIj6WFgM4mK4f5XcuRXaKu1GlsLs50KMd13 HxHomdZc5Ry9pABnR7t26r5onscXPQ8AmhQaSDEH/ElcmGhudtAqp7iwiTNS+Ha4la4iRhlWU7G nQaSn4ungp0qzPyLujuVkbTY6++D12a1klnNwe/fepJcYpZEEH/WmUHkhMJgBXDmK3RbMa74yY6 nl1dmC4XcHyur3h9LDvN4iL7dLCnly49SHfWdN/lJdGFG4Z9ncu+ClU1TuVnz4p42jRCbAO6ji6 AE+y347tRbTnbdVgBpCV0i8RmjA8mgR5TLZvAwaK5FwQnXAhn/gEjHymUaSLbReMWyxymzZEb6q OoiZS5ydNBYMyuQCecvAFzsXB6JyJ X-Google-Smtp-Source: AGHT+IHI//PVGKGWG/97DO2+4MhM6p/zjK59ARQNr2kvzqO5PxwUhy7D1oJ5BmqNbUGXyZ0/U/54vw== X-Received: by 2002:a05:6a00:1784:b0:776:32e0:248f with SMTP id d2e1a72fcca58-77e4ecbad9emr15404729b3a.27.1758566994669; Mon, 22 Sep 2025 11:49:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 21/76] target/arm: Remove unused env argument from regime_el Date: Mon, 22 Sep 2025 11:48:29 -0700 Message-ID: <20250922184924.2754205-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567891819116600 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 8 ++++---- target/arm/helper.c | 2 +- target/arm/ptw.c | 34 +++++++++++++++++----------------- target/arm/tcg/mte_helper.c | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index c29682da7d..245c60652f 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1074,7 +1074,7 @@ static inline bool regime_is_stage2(ARMMMUIdx mmu_idx) } =20 /* Return the exception level which controls this address translation regi= me */ -static inline uint32_t regime_el(CPUARMState *env, ARMMMUIdx mmu_idx) +static inline uint32_t regime_el(ARMMMUIdx mmu_idx) { switch (mmu_idx) { case ARMMMUIdx_E20_0: @@ -1128,7 +1128,7 @@ static inline bool regime_is_user(CPUARMState *env, A= RMMMUIdx mmu_idx) /* Return the SCTLR value which controls this address translation regime */ static inline uint64_t regime_sctlr(CPUARMState *env, ARMMMUIdx mmu_idx) { - return env->cp15.sctlr_el[regime_el(env, mmu_idx)]; + return env->cp15.sctlr_el[regime_el(mmu_idx)]; } =20 /* @@ -1160,13 +1160,13 @@ static inline uint64_t regime_tcr(CPUARMState *env,= ARMMMUIdx mmu_idx) v |=3D env->cp15.vtcr_el2 & VTCR_SHARED_FIELD_MASK; return v; } - return env->cp15.tcr_el[regime_el(env, mmu_idx)]; + return env->cp15.tcr_el[regime_el(mmu_idx)]; } =20 /* Return true if the translation regime is using LPAE format page tables = */ static inline bool regime_using_lpae_format(CPUARMState *env, ARMMMUIdx mm= u_idx) { - int el =3D regime_el(env, mmu_idx); + int el =3D regime_el(mmu_idx); if (el =3D=3D 2 || arm_el_is_aa64(env, el)) { return true; } diff --git a/target/arm/helper.c b/target/arm/helper.c index ea343e9d48..83a675cc22 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9377,7 +9377,7 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, = uint64_t va, ARMGranuleSize gran; ARMCPU *cpu =3D env_archcpu(env); bool stage2 =3D regime_is_stage2(mmu_idx); - int r_el =3D regime_el(env, mmu_idx); + int r_el =3D regime_el(mmu_idx); =20 if (!regime_has_2_ranges(mmu_idx)) { select =3D 0; diff --git a/target/arm/ptw.c b/target/arm/ptw.c index be3629a745..622b5cf520 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -232,9 +232,9 @@ static uint64_t regime_ttbr(CPUARMState *env, ARMMMUIdx= mmu_idx, int ttbrn) return env->cp15.vsttbr_el2; } if (ttbrn =3D=3D 0) { - return env->cp15.ttbr0_el[regime_el(env, mmu_idx)]; + return env->cp15.ttbr0_el[regime_el(mmu_idx)]; } else { - return env->cp15.ttbr1_el[regime_el(env, mmu_idx)]; + return env->cp15.ttbr1_el[regime_el(mmu_idx)]; } } =20 @@ -1023,7 +1023,7 @@ static bool get_phys_addr_v5(CPUARMState *env, S1Tran= slate *ptw, } type =3D (desc & 3); domain =3D (desc >> 5) & 0x0f; - if (regime_el(env, ptw->in_mmu_idx) =3D=3D 1) { + if (regime_el(ptw->in_mmu_idx) =3D=3D 1) { dacr =3D env->cp15.dacr_ns; } else { dacr =3D env->cp15.dacr_s; @@ -1162,7 +1162,7 @@ static bool get_phys_addr_v6(CPUARMState *env, S1Tran= slate *ptw, /* Page or Section. */ domain =3D (desc >> 5) & 0x0f; } - if (regime_el(env, mmu_idx) =3D=3D 1) { + if (regime_el(mmu_idx) =3D=3D 1) { dacr =3D env->cp15.dacr_ns; } else { dacr =3D env->cp15.dacr_s; @@ -1453,7 +1453,7 @@ static int get_S1prot(CPUARMState *env, ARMMMUIdx mmu= _idx, bool is_aa64, xn =3D pxn || (user_rw & PAGE_WRITE); } } else if (arm_feature(env, ARM_FEATURE_V7)) { - switch (regime_el(env, mmu_idx)) { + switch (regime_el(mmu_idx)) { case 1: case 3: if (is_user) { @@ -1509,7 +1509,7 @@ static int get_S1prot_indirect(CPUARMState *env, S1Tr= anslate *ptw, /* F */ 0, /* reserved */ }; =20 - uint32_t el =3D regime_el(env, mmu_idx); + uint32_t el =3D regime_el(mmu_idx); uint64_t pir =3D env->cp15.pir_el[el]; uint64_t pire0 =3D 0; int perm; @@ -1584,7 +1584,7 @@ static ARMVAParameters aa32_va_parameters(CPUARMState= *env, uint32_t va, ARMMMUIdx mmu_idx) { uint64_t tcr =3D regime_tcr(env, mmu_idx); - uint32_t el =3D regime_el(env, mmu_idx); + uint32_t el =3D regime_el(mmu_idx); int select, tsz; bool epd, hpd; =20 @@ -1810,7 +1810,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, int addrsize, inputsize, outputsize; uint64_t tcr =3D regime_tcr(env, mmu_idx); int ap, prot; - uint32_t el =3D regime_el(env, mmu_idx); + uint32_t el =3D regime_el(mmu_idx); uint64_t descaddrmask; bool aarch64 =3D arm_el_is_aa64(env, el); uint64_t descriptor, new_descriptor; @@ -2264,7 +2264,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Tr= anslate *ptw, =20 /* Index into MAIR registers for cache attributes */ attrindx =3D extract32(attrs, 2, 3); - mair =3D env->cp15.mair_el[regime_el(env, mmu_idx)]; + mair =3D env->cp15.mair_el[regime_el(mmu_idx)]; assert(attrindx <=3D 7); result->cacheattrs.is_s2_format =3D false; result->cacheattrs.attrs =3D extract64(mair, attrindx * 8, 8); @@ -2742,7 +2742,7 @@ static bool get_phys_addr_pmsav7(CPUARMState *env, static uint32_t *regime_rbar(CPUARMState *env, ARMMMUIdx mmu_idx, uint32_t secure) { - if (regime_el(env, mmu_idx) =3D=3D 2) { + if (regime_el(mmu_idx) =3D=3D 2) { return env->pmsav8.hprbar; } else { return env->pmsav8.rbar[secure]; @@ -2752,7 +2752,7 @@ static uint32_t *regime_rbar(CPUARMState *env, ARMMMU= Idx mmu_idx, static uint32_t *regime_rlar(CPUARMState *env, ARMMMUIdx mmu_idx, uint32_t secure) { - if (regime_el(env, mmu_idx) =3D=3D 2) { + if (regime_el(mmu_idx) =3D=3D 2) { return env->pmsav8.hprlar; } else { return env->pmsav8.rlar[secure]; @@ -2784,7 +2784,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t add= ress, uint32_t addr_page_limit =3D addr_page_base + (TARGET_PAGE_SIZE - 1); int region_counter; =20 - if (regime_el(env, mmu_idx) =3D=3D 2) { + if (regime_el(mmu_idx) =3D=3D 2) { region_counter =3D cpu->pmsav8r_hdregion; } else { region_counter =3D cpu->pmsav7_dregion; @@ -2910,7 +2910,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t add= ress, xn =3D 1; } =20 - if (regime_el(env, mmu_idx) =3D=3D 2) { + if (regime_el(mmu_idx) =3D=3D 2) { result->f.prot =3D simple_ap_to_rw_prot_is_user(ap, mmu_idx !=3D ARMMMUIdx_E2); } else { @@ -2919,7 +2919,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t add= ress, =20 if (!arm_feature(env, ARM_FEATURE_M)) { uint8_t attrindx =3D extract32(matched_rlar, 1, 3); - uint64_t mair =3D env->cp15.mair_el[regime_el(env, mmu_idx)]; + uint64_t mair =3D env->cp15.mair_el[regime_el(mmu_idx)]; uint8_t sh =3D extract32(matched_rlar, 3, 2); =20 if (regime_sctlr(env, mmu_idx) & SCTLR_WXN && @@ -2927,7 +2927,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t add= ress, xn =3D 0x1; } =20 - if ((regime_el(env, mmu_idx) =3D=3D 1) && + if ((regime_el(mmu_idx) =3D=3D 1) && regime_sctlr(env, mmu_idx) & SCTLR_UWXN && ap =3D=3D 0x1) { pxn =3D 0x1; } @@ -3412,7 +3412,7 @@ static bool get_phys_addr_disabled(CPUARMState *env, break; =20 default: - r_el =3D regime_el(env, mmu_idx); + r_el =3D regime_el(mmu_idx); if (arm_el_is_aa64(env, r_el)) { int pamax =3D arm_pamax(env_archcpu(env)); uint64_t tcr =3D env->cp15.tcr_el[r_el]; @@ -3664,7 +3664,7 @@ static bool get_phys_addr_nogpc(CPUARMState *env, S1T= ranslate *ptw, */ if (address < 0x02000000 && mmu_idx !=3D ARMMMUIdx_Stage2 && !arm_feature(env, ARM_FEATURE_V8)) { - if (regime_el(env, mmu_idx) =3D=3D 3) { + if (regime_el(mmu_idx) =3D=3D 3) { address +=3D env->cp15.fcseidr_s; } else { address +=3D env->cp15.fcseidr_ns; diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c index 0efc18a181..ed30026b7d 100644 --- a/target/arm/tcg/mte_helper.c +++ b/target/arm/tcg/mte_helper.c @@ -604,7 +604,7 @@ void mte_check_fail(CPUARMState *env, uint32_t desc, int el, reg_el, tcf; uint64_t sctlr; =20 - reg_el =3D regime_el(env, arm_mmu_idx); + reg_el =3D regime_el(arm_mmu_idx); sctlr =3D env->cp15.sctlr_el[reg_el]; =20 switch (arm_mmu_idx) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567176; cv=none; d=zohomail.com; s=zohoarc; b=biejCkE130HgCeUuk3HokKhqlcjCQA9hwsxDIKULLV6QljUYjo+qsx/C17gQYtV2kmE//pRO/exkcCn/AE1/+y1/Aii5vQeNzylz+TsKS2Ykr0OGWPgVUfAebRV6YQr0Gixz1JIgMzgQRckBDoEQ+O1FkRIY3fmgvAX4ZlPcHro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567176; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u2qun7bBQurVJmcwvikszJiyDINQVBDa8kuiWrv+8rE=; b=BuxMO8S9he04lPdFLZZhcdy6FnvnvXsw4YoPGk1TRUqdggI86WUe8IcWYY+kBYjBdzMp9h9JqNOE1oIlJ6CBeJfgQk4YlKnpWg2PIZ5MGr1f+pdyIF1flOKY1uvrhcp2tgz9TAMlMhOPAE5/uVwMgwKQZCezyN7er/OXRfJGjpw= 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 1758567176491699.6588461253526; Mon, 22 Sep 2025 11:52:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lc7-00052h-GB; Mon, 22 Sep 2025 14:50:15 -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 1v0lby-0004xa-9X for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:08 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbq-0004C6-GS for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:06 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-77f429ea4d5so1018323b3a.0 for ; Mon, 22 Sep 2025 11:49:57 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566996; x=1759171796; darn=nongnu.org; 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=u2qun7bBQurVJmcwvikszJiyDINQVBDa8kuiWrv+8rE=; b=syoVAN4+KowWwC1ss2Ffapd8XRohNO+xk3vgR+Mem3lBr2e1Bzrt06qYpXeY0pXP4Q C5avmjtL8gqyWEDmR2C10bF5sot3D4kom1fOIzIhAeY5zuSwhnt/lJyfZnNpBnX81odb RyL7rgK0CJhmZvlAvp1e9N9jIhtr0rFvzn/mJjdEBg6CILibx6y3v88N9DchqAIGoXlj arbpcORF0unqgLhtj09dCjMK0aet5Am1UWoucS34Yk1fZkBgkPlitURIYYoohvcrwORG hUh4eQMSHqnSBFZHJbla4+8dAbxGgbGFaCmMmxXU73KaH4x72J/AHWbiRNAuhpMri3hr tAhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566996; x=1759171796; 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=u2qun7bBQurVJmcwvikszJiyDINQVBDa8kuiWrv+8rE=; b=c4MydtT8AAxs6HF7UT/XQFO4x8asZtLm5uSprGkwNorCfvEkd8KvwfbKqpatgpe4+r nQ0x2q3k3rgkK/rpZZkjMmkbcUeKrGDCKwPgirbj/mMAWD43cdl2/dxft5oxQ0zssEIM UX2+I+RTElMgUMXR8pBwKzjP4L6KCybXEtjD/EnScpKuvH3+evi14rEvCum3qsKd2spL OmLhaQOhGXXqETqIeQgJu4N8GgXQe355QdovMpo/kranwAfUUDlg/gaUS7AWQ5Zy5OTA bbvY/x2EApzZ/a0z/qeHDCv9ZtvpjF+42qlr9UXYDFrAmsvLhOOTp1BYRO2cTeo+RKOo yKcA== X-Gm-Message-State: AOJu0YwmbSG53Oubj0PVi3gNAq1AOmmwT5fvU+H/ZDm98+hJjHqXzmcP xMnW6rhxOBdImdtddrWU1/tJnJqI+cTnqC9KDSvi+m09/ZaOSRxV1H+MZIoR1fow7B5e4PyNzzh cxiJ/ X-Gm-Gg: ASbGncv200R6QF87hanaFVzGEScNmTYcIv3gqLikpnIQR6kXZUOZOKf8WvSpB4dAZDR 0Jx5IVLx+KLIbECfCKOIu1zaTsqX/YdNBvt42R3FMNHHzhFStATJsb9DaMcB/eAQqyD4SwztcTB yG4+V2p1QJiV3Wq/cvNFdq2e8DYkGhK65rKnZZSbT/GokDm3lLCPCpoomndaFKRJ9QKcP9QGsGE iPRpNraYc1TmD/WMKSNa4CEu49UyPv2E+0duy22zOKVrQ31roFWBkokg+o+r4oVFrV3EdRnV51N eFVgdzwswRxdFc/w1DYEyNq6s8PfdyQUPE3r4F80nG9L/IrlC/Bki95Wz9rirDrU6DvVakIxQAx OlMZo8GYaI0X9XMqJ0cQYxiUDbZid X-Google-Smtp-Source: AGHT+IHeb06Adqa1vI+d50qulI22ifH9wbWRzWfPbjcpB02mxqM5VIqPc/mosvCFS2LixmrCW+LTMg== X-Received: by 2002:a05:6a00:1889:b0:776:1482:ef5b with SMTP id d2e1a72fcca58-77e4d329cc9mr13506848b3a.10.1758566995687; Mon, 22 Sep 2025 11:49:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 22/76] target/arm: Convert regime_el from switch to table Date: Mon, 22 Sep 2025 11:48:30 -0700 Message-ID: <20250922184924.2754205-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567177074116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 35 ---------------------------- target/arm/mmuidx-internal.h | 13 +++++++++++ target/arm/mmuidx.c | 44 +++++++++++++++++++++--------------- 3 files changed, 39 insertions(+), 53 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 245c60652f..a886282957 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1073,41 +1073,6 @@ static inline bool regime_is_stage2(ARMMMUIdx mmu_id= x) return mmu_idx =3D=3D ARMMMUIdx_Stage2 || mmu_idx =3D=3D ARMMMUIdx_Sta= ge2_S; } =20 -/* Return the exception level which controls this address translation regi= me */ -static inline uint32_t regime_el(ARMMMUIdx mmu_idx) -{ - switch (mmu_idx) { - case ARMMMUIdx_E20_0: - case ARMMMUIdx_E20_2: - case ARMMMUIdx_E20_2_PAN: - case ARMMMUIdx_Stage2: - case ARMMMUIdx_Stage2_S: - case ARMMMUIdx_E2: - return 2; - case ARMMMUIdx_E3: - case ARMMMUIdx_E30_0: - case ARMMMUIdx_E30_3_PAN: - return 3; - case ARMMMUIdx_E10_0: - case ARMMMUIdx_Stage1_E0: - case ARMMMUIdx_Stage1_E1: - case ARMMMUIdx_Stage1_E1_PAN: - case ARMMMUIdx_E10_1: - case ARMMMUIdx_E10_1_PAN: - case ARMMMUIdx_MPrivNegPri: - case ARMMMUIdx_MUserNegPri: - case ARMMMUIdx_MPriv: - case ARMMMUIdx_MUser: - case ARMMMUIdx_MSPrivNegPri: - case ARMMMUIdx_MSUserNegPri: - case ARMMMUIdx_MSPriv: - case ARMMMUIdx_MSUser: - return 1; - default: - g_assert_not_reached(); - } -} - static inline bool regime_is_user(CPUARMState *env, ARMMMUIdx mmu_idx) { switch (mmu_idx) { diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 29bba4ecb5..d8d64a14d6 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -13,6 +13,8 @@ =20 FIELD(MMUIDXINFO, EL, 0, 2) FIELD(MMUIDXINFO, ELVALID, 2, 1) +FIELD(MMUIDXINFO, REL, 3, 2) +FIELD(MMUIDXINFO, RELVALID, 5, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -26,4 +28,15 @@ static inline int arm_mmu_idx_to_el(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, EL); } =20 +/* + * Return the exception level for the address translation regime + * associated with this mmu index. + */ +static inline uint32_t regime_el(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + tcg_debug_assert(FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, RELVALI= D)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, REL); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 309b1d68df..6dfefa56c2 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -8,34 +8,42 @@ =20 =20 #define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK) +#define REL(X) ((X << R_MMUIDXINFO_REL_SHIFT) | R_MMUIDXINFO_RELVALID_MASK) =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* * A-profile. */ - [ARMMMUIdx_E10_0] =3D EL(0), - [ARMMMUIdx_E10_1] =3D EL(1), - [ARMMMUIdx_E10_1_PAN] =3D EL(1), + [ARMMMUIdx_E10_0] =3D EL(0) | REL(1), + [ARMMMUIdx_E10_1] =3D EL(1) | REL(1), + [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1), =20 - [ARMMMUIdx_E20_0] =3D EL(0), - [ARMMMUIdx_E20_2] =3D EL(2), - [ARMMMUIdx_E20_2_PAN] =3D EL(2), + [ARMMMUIdx_E20_0] =3D EL(0) | REL(2), + [ARMMMUIdx_E20_2] =3D EL(2) | REL(2), + [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2), =20 - [ARMMMUIdx_E2] =3D EL(2), + [ARMMMUIdx_E2] =3D EL(2) | REL(2), =20 - [ARMMMUIdx_E3] =3D EL(3), - [ARMMMUIdx_E30_0] =3D EL(0), - [ARMMMUIdx_E30_3_PAN] =3D EL(3), + [ARMMMUIdx_E3] =3D EL(3) | REL(3), + [ARMMMUIdx_E30_0] =3D EL(0) | REL(3), + [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3), + + [ARMMMUIdx_Stage2_S] =3D REL(2), + [ARMMMUIdx_Stage2] =3D REL(2), + + [ARMMMUIdx_Stage1_E0] =3D REL(1), + [ARMMMUIdx_Stage1_E1] =3D REL(1), + [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1), =20 /* * M-profile. */ - [ARMMMUIdx_MUser] =3D EL(0), - [ARMMMUIdx_MPriv] =3D EL(1), - [ARMMMUIdx_MUserNegPri] =3D EL(0), - [ARMMMUIdx_MPrivNegPri] =3D EL(1), - [ARMMMUIdx_MSUser] =3D EL(0), - [ARMMMUIdx_MSPriv] =3D EL(1), - [ARMMMUIdx_MSUserNegPri] =3D EL(0), - [ARMMMUIdx_MSPrivNegPri] =3D EL(1), + [ARMMMUIdx_MUser] =3D EL(0) | REL(1), + [ARMMMUIdx_MPriv] =3D EL(1) | REL(1), + [ARMMMUIdx_MUserNegPri] =3D EL(0) | REL(1), + [ARMMMUIdx_MPrivNegPri] =3D EL(1) | REL(1), + [ARMMMUIdx_MSUser] =3D EL(0) | REL(1), + [ARMMMUIdx_MSPriv] =3D EL(1) | REL(1), + [ARMMMUIdx_MSUserNegPri] =3D EL(0) | REL(1), + [ARMMMUIdx_MSPrivNegPri] =3D EL(1) | REL(1), }; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567179; cv=none; d=zohomail.com; s=zohoarc; b=gOYAOIpNfzmoobmK5GvRC6CeyG+Vw8OCaFjZ2w5KlMcmQTpKhicAZE078I14heU12pqiyepmKISj3uLZoj4MiE0kBXkGFIr98F0ek4hEq7o3D40RhSQMgs9NCXlYTS2CThDuoRm2VaS4GuArlAXyF+hWltMO6l/kZpPIJdIwJZo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567179; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8HfYM97rkS2HFXVpmImKidouR7djYhqCiCCIkuQ4XIE=; b=AC2i9oaffX4mXEsUhG6pKPkmbCWatFJKSmzcBuETH3OYAA3Epa15bPEBIFekcJIRKHn+Ot8DESCQfbRK/1OgWow7LLL/1a381U9ZlqfyWyAJb99PvR5Qo67e81eldIPjc83ucRcSoo8O7YVujQSw5gLOSzPUM1NTZfurH+0A8uw= 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 175856717900629.93101909577706; Mon, 22 Sep 2025 11:52:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcF-0005Bq-Qk; Mon, 22 Sep 2025 14:50:23 -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 1v0lc1-0004xv-RR for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:10 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbs-0004CA-0R for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:08 -0400 Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-77f1f8a114bso1622251b3a.0 for ; Mon, 22 Sep 2025 11:49:59 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566997; x=1759171797; darn=nongnu.org; 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=8HfYM97rkS2HFXVpmImKidouR7djYhqCiCCIkuQ4XIE=; b=acdsw12H8WYCCf/JNS78C7xPFL1ADS+inhZYrO/PZPah1oddlDsIKKGilBPx9vYzQ+ N0oo5HjObQTRyUXj/d5hbclpT0npOu+/K7Jb5i4SuAdUJidj573qLif5hu7Qaik/KxF+ epBtXEPBLdCqlIsgfDmcCES4MrEf9wDK9Oqb/tP1MesEui1fU0IEkEWKtGZmEBaU2j/y fw/bKX7viR1IqKtFSWueelDHixOjhUNnOL68etUSdzX31peW6wM3G/CXvW6Hp2bFixOb C/WvamJBYHZZ0OFgkaA0hFcTw4LtCNOnyYDdhxxh0Lq/kWJLsabHl3J5tBIZd3yjKrKP sK0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566997; x=1759171797; 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=8HfYM97rkS2HFXVpmImKidouR7djYhqCiCCIkuQ4XIE=; b=b24Ge7WtHzD9VbinP6dGDqfkGlbLXfDm4ZfM8gRF9P4DCjKPN3ENHSgnMFRVmXIZLw LZbPDB1rKxpTSKCyGXKDQmK6d07OTYU937783T+OiOS+PCDQpwapmz/fgSQRvm7FOYU+ QzrkT0wnY4Zp64xvvnE3IMUOcoBSCYfo6Z3hYcp5lKD+6wl08V+nruxDIGxMiFwLR3TF Nld2/gZRNYFBf0/vHXuNmIsSSfP/rnZPk+2n+WZclsSSS39gj2GruZxtb4QqtRKOT4dB RUHDNGC9HI3C4o8PbuZglIhBrFAk33L5fMwWw1Aq39xCF+mwux71ZqJg/IrsDHId7Zo3 1EoQ== X-Gm-Message-State: AOJu0YxngRJrc77qzeHpAZJYsjSc+uVXCEHa8Ra5fr6nsckxYRQd6k1u 5UHusjwcLqGQ3azLS/H/R/nxMyRe595kmnknM66X9MXgvR/UJ/wQ8excu56Aiq38z4U4cJWwkGi Zjk1W X-Gm-Gg: ASbGncsvq9k+FI9UuuJXJqrLWmCTyKOxufzpo64KJXINjZQKwDKHlqYb+mh+RW4QFKG vHDAnL+ijVbyAyqjNJah/hE7VM7Z0U7MqA0AuzJR0AxFmnAgeEJQHzJs9n9TF0z8Qjww9lTk/ZV HRlMcjMFYbkvTotQVuBAJYBdAvpu7r3pTDUPcPoFLzXczrsANs6WjC3PnAXLGoR70o/S24j+i7i Gw/gUwsT9nNQhmlBFSb9xvGyb6nmNjMT1Or3wbtbh1ja+MzJUuuT1ZR4ihsaMV3TwYPewBjDvDY Qm1qcQ8CpAcrM+DkhLUybvLQyJvt/VHRTY54us+wDa73Aqp6SWbujB6RryKTFc7vQFyCRYd+omU hTCismR9Xocf452dRq43JHMoKCYTfLKCqeioDNis= X-Google-Smtp-Source: AGHT+IG73M0BaDKpuRN3SiaqIjL34X10Tl5tV5q2m747yXhQZmk01oflbfQx3dtdaBE88yo7CvbfDg== X-Received: by 2002:a05:6a20:1595:b0:263:4717:559 with SMTP id adf61e73a8af0-292188e67a3mr15919813637.20.1758566996778; Mon, 22 Sep 2025 11:49:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 23/76] target/arm: Convert regime_has_2_ranges from switch to table Date: Mon, 22 Sep 2025 11:48:31 -0700 Message-ID: <20250922184924.2754205-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567181241116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 28 ---------------------------- target/arm/mmuidx-internal.h | 17 +++++++++++++++++ target/arm/mmuidx.c | 19 ++++++++++--------- 3 files changed, 27 insertions(+), 37 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index a886282957..a25ef90c4c 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1027,34 +1027,6 @@ static inline void arm_call_el_change_hook(ARMCPU *c= pu) } } =20 -/* - * Return true if this address translation regime has two ranges. - * Note that this will not return the correct answer for AArch32 - * Secure PL1&0 (i.e. mmu indexes E3, E30_0, E30_3_PAN), but it is - * never called from a context where EL3 can be AArch32. (The - * correct return value for ARMMMUIdx_E3 would be different for - * that case, so we can't just make the function return the - * correct value anyway; we would need an extra "bool e3_is_aarch32" - * argument which all the current callsites would pass as 'false'.) - */ -static inline bool regime_has_2_ranges(ARMMMUIdx mmu_idx) -{ - switch (mmu_idx) { - case ARMMMUIdx_Stage1_E0: - case ARMMMUIdx_Stage1_E1: - case ARMMMUIdx_Stage1_E1_PAN: - case ARMMMUIdx_E10_0: - case ARMMMUIdx_E10_1: - case ARMMMUIdx_E10_1_PAN: - case ARMMMUIdx_E20_0: - case ARMMMUIdx_E20_2: - case ARMMMUIdx_E20_2_PAN: - return true; - default: - return false; - } -} - static inline bool regime_is_pan(CPUARMState *env, ARMMMUIdx mmu_idx) { switch (mmu_idx) { diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index d8d64a14d6..f03a2ab94c 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -15,6 +15,7 @@ FIELD(MMUIDXINFO, EL, 0, 2) FIELD(MMUIDXINFO, ELVALID, 2, 1) FIELD(MMUIDXINFO, REL, 3, 2) FIELD(MMUIDXINFO, RELVALID, 5, 1) +FIELD(MMUIDXINFO, 2RANGES, 6, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -39,4 +40,20 @@ static inline uint32_t regime_el(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, REL); } =20 +/* + * Return true if this address translation regime has two ranges. + * Note that this will not return the correct answer for AArch32 + * Secure PL1&0 (i.e. mmu indexes E3, E30_0, E30_3_PAN), but it is + * never called from a context where EL3 can be AArch32. (The + * correct return value for ARMMMUIdx_E3 would be different for + * that case, so we can't just make the function return the + * correct value anyway; we would need an extra "bool e3_is_aarch32" + * argument which all the current callsites would pass as 'false'.) + */ +static inline bool regime_has_2_ranges(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, 2RANGES); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 6dfefa56c2..f880d21606 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -9,18 +9,19 @@ =20 #define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK) #define REL(X) ((X << R_MMUIDXINFO_REL_SHIFT) | R_MMUIDXINFO_RELVALID_MASK) +#define R2 R_MMUIDXINFO_2RANGES_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* * A-profile. */ - [ARMMMUIdx_E10_0] =3D EL(0) | REL(1), - [ARMMMUIdx_E10_1] =3D EL(1) | REL(1), - [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1), + [ARMMMUIdx_E10_0] =3D EL(0) | REL(1) | R2, + [ARMMMUIdx_E10_1] =3D EL(1) | REL(1) | R2, + [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2, =20 - [ARMMMUIdx_E20_0] =3D EL(0) | REL(2), - [ARMMMUIdx_E20_2] =3D EL(2) | REL(2), - [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2), + [ARMMMUIdx_E20_0] =3D EL(0) | REL(2) | R2, + [ARMMMUIdx_E20_2] =3D EL(2) | REL(2) | R2, + [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2, =20 [ARMMMUIdx_E2] =3D EL(2) | REL(2), =20 @@ -31,9 +32,9 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_Stage2_S] =3D REL(2), [ARMMMUIdx_Stage2] =3D REL(2), =20 - [ARMMMUIdx_Stage1_E0] =3D REL(1), - [ARMMMUIdx_Stage1_E1] =3D REL(1), - [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1), + [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2, + [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2, + [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2, =20 /* * M-profile. --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567221; cv=none; d=zohomail.com; s=zohoarc; b=cc2YlqwplnfLfzjlyNYfmxvxu91OHDqdW/406TfWk1tuylT7L1qER0GZt28EwUQBP03mgBRa+r/TEHodTGAyzF7CD/xQOd4Bm8pBEEVROvQ3Vd/3rfnvIH7gfgSHlOZys6jGlZEPnDZy1zT2SdJdiwdxiZGpveYgfARpP1FBSTA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567221; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HidgR8YbdGgwoHKVV2oZVXdM2RMQ3ecG9VGCjbLMY1s=; b=f+zH3H7p3yV7pCooc7ZOJRMHO1qpfKwO4jjfkRsYZPvW1ELO4eCGARh0KN3Ef7L72yIRLJuWX7zQX8un4pMqZLiv+WDZ0MkL2R7KPb7O8nnhGGedR6F5Mb3cMuQQSyjoyVwqXG5R0JSqVNe3BNKVqFBqgkiKLnjloD8n3Tmlo6A= 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 1758567221536868.5381995947071; Mon, 22 Sep 2025 11:53:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lc7-00052N-4p; Mon, 22 Sep 2025 14:50:15 -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 1v0lc1-0004ya-Kp for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:10 -0400 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbu-0004Cb-GJ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:09 -0400 Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-77f3405c38aso1263841b3a.0 for ; Mon, 22 Sep 2025 11:49:59 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566998; x=1759171798; darn=nongnu.org; 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=HidgR8YbdGgwoHKVV2oZVXdM2RMQ3ecG9VGCjbLMY1s=; b=hFS9XJylgsenpGO6uMkh8PMcGh4z5swIi8+qjIH/YX7WHpKFWA1ed1gtctls2UzaLq Wgw/Pu3JTRVPAw1spggV/16qH1ArdUCdwjZ4RoHSmyONMYER7hIbfX8FpqC8yJAXRidY UPeZnDLF5lYF0oF3n17NGFylAxaqoAPbzMnZ+th2s5ajZA7mR9RsBKnr79egKZVUgvl+ MKbVsrPisMZD1zj8ZTrT/56ff9wJepMUzVLQAjFjXI0+dejgtSl1HZKZh/hQJuspasfQ NqL79oSUsnzzBPnPX3/dB9Uiw1v1aPCQGFe983JI4ASpUFuAv8YPfVSRb5iHuP8V/xXp GQGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566998; x=1759171798; 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=HidgR8YbdGgwoHKVV2oZVXdM2RMQ3ecG9VGCjbLMY1s=; b=jFz4LvStQ2qkfUnSdTeCfsJLC0a8Zc9kW/htwh3iVD5ER0Vsni4ULtt6tV34Dnxd4B a7PvniwKz38ISECoxtL9RtuDLLKtB3C9yzqK8I9w/Cs1hn4hJrJk+7JdRCVC/pKMVarb O6yGfMN80CUJAA2LfhNlWURKncEg/fRs7EABsrDG/h7Oe5V/Plm34tFAbLcDXXg5YHyj bW817YDGrlPDlKAhkN/yDHA97NOEFBxCOsofVNC9ta6oc2tzyJbGy5lIMltLD3FQ8XuQ cMpXeJfVmpaikTWFIDJ9UBactddyXTS3hCK4PEEN1DGIgqJDGyl0ENUzb4Tc5CIHFqvW iMQw== X-Gm-Message-State: AOJu0YytbfN7B9hpzA6eZwQVsVgBjJ3aJpdTMcZ5dRFR5Riq2VTccL3T R2pyQqFP7gkdqEwBAMrbRtfz0LK71KLEP5AZ08x80gqncrWEHr7LLetZ4nihKSEeupm6f8YSShF PqT/y X-Gm-Gg: ASbGncuk3mR+TY6RIZnu/0OXNV0C4w114uG9Ohe/bPt7eJLfH8uvsIZstf1y56Kt135 ySLREOwPknhASxM3Wlm9pXniLlGiXwIddKP1F8MJQjM2f99Y9CECWcWbazKKJYoZESGKXVZXwHi 5iNwJYk8k4u//qkOBVX08SAIJWhb0FXB+Hs+60cvhAG0b3VMrrWYAjVQTmGU8W+mbuUh7CfzKet i3lreBNwLnzKeuuuK2vZZFD6Oj/Vr7o2G54vhGkQNNKUq3dEKjxZgzdBD5NrZNwc1AD02LAm+e4 XbiqKwTxw7FRzq9wEUC/1cJijbrfgcGTNfea3vVoAKR5E7duiiNSj36rY/yktil7uWyeqMscCO3 QH6eC4QwU2A9wK+dBM0mRVBovolly X-Google-Smtp-Source: AGHT+IEz49kNzWGti3Us/0yjyZzEpNLwdomoQLQFyFMC90XvzhCEeZzjsrGNFZcfduEuXuW6QybXww== X-Received: by 2002:a05:6a00:23c3:b0:77f:42d5:b914 with SMTP id d2e1a72fcca58-77f42d5bb6amr3565135b3a.12.1758566997680; Mon, 22 Sep 2025 11:49:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 24/76] target/arm: Remove unused env argument from regime_is_pan Date: Mon, 22 Sep 2025 11:48:32 -0700 Message-ID: <20250922184924.2754205-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::42e; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567223945116600 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 2 +- target/arm/ptw.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index a25ef90c4c..b32c31779c 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1027,7 +1027,7 @@ static inline void arm_call_el_change_hook(ARMCPU *cp= u) } } =20 -static inline bool regime_is_pan(CPUARMState *env, ARMMMUIdx mmu_idx) +static inline bool regime_is_pan(ARMMMUIdx mmu_idx) { switch (mmu_idx) { case ARMMMUIdx_Stage1_E1_PAN: diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 622b5cf520..db51e55cd2 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1393,10 +1393,10 @@ static int get_S1prot(CPUARMState *env, ARMMMUIdx m= mu_idx, bool is_aa64, * We make the IMPDEF choices that SCR_EL3.SIF and Realm EL2&0 * do not affect EPAN. */ - if (user_rw && regime_is_pan(env, mmu_idx)) { + if (user_rw && regime_is_pan(mmu_idx)) { prot_rw =3D 0; } else if (cpu_isar_feature(aa64_pan3, cpu) && is_aa64 && - regime_is_pan(env, mmu_idx) && + regime_is_pan(mmu_idx) && (regime_sctlr(env, mmu_idx) & SCTLR_EPAN) && !xn) { prot_rw =3D 0; } @@ -1535,7 +1535,7 @@ static int get_S1prot_indirect(CPUARMState *env, S1Tr= anslate *ptw, p_perm &=3D ~(PAGE_RWX | PAGE_GCS); u_perm &=3D ~(PAGE_RWX | PAGE_GCS); } - if ((u_perm & (PAGE_RWX | PAGE_GCS)) && regime_is_pan(env, mmu_idx= )) { + if ((u_perm & (PAGE_RWX | PAGE_GCS)) && regime_is_pan(mmu_idx)) { p_perm &=3D ~(PAGE_READ | PAGE_WRITE); } perm =3D regime_is_user(env, mmu_idx) ? u_perm : p_perm; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567170; cv=none; d=zohomail.com; s=zohoarc; b=f6bz4aJ2nRJ4eXZnHcWxJiWMUxPEPKCNLQMeWp5uu4/dlHoSVlFV+f8kHfVumE4HsvWNI1abcLYW1aiTVRf1Pj6kSOJwLrRE5r+BGogpTKEi2grQWUBqpgLrUG2+JXs6WQDccd4ZGSslcDCp6B4xTBapVHqMp19Me/HeX054BYE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567170; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lT8XgyL4GSdlSJQGrgvUQ4oFKNcHSEZIN97989Gt4ug=; b=JT0LdqlFsrnY+2R1ufoZ6BhBk8BV18cyC658K+PrVtXduGRTs45NspfXlFiITTH5obglLz1WO9O7Q5djr92ApKMbm4q/MtrMA427S5QrNvLkvTkKva9aESHi1WMU7bDtePZIF5J0UV8TXf+AADRAVKXIU8ZFbnJEQ/gr7Ujwp4Y= 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 1758567170212890.2251271803616; Mon, 22 Sep 2025 11:52:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcD-000584-7o; Mon, 22 Sep 2025 14:50:21 -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 1v0lbz-0004xp-LC for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:08 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbt-0004Cn-Al for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:07 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-77f1f8a114bso1622328b3a.0 for ; Mon, 22 Sep 2025 11:49:59 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566998; x=1759171798; darn=nongnu.org; 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=lT8XgyL4GSdlSJQGrgvUQ4oFKNcHSEZIN97989Gt4ug=; b=Cx6mjwK3cPmNL72rlG01EB7kCv34zMItztQklxxAJoU7tcrTgCHY16JTIlzDROr9I2 TmF6m7NWcR+RYZnQO57j/aslxRp+hYg62KInWhdR/kY1voMFXSMydoWyU12i1L35gD0C DdHOMAgDjZwvDYeLQtUOM6wyCJYWaDY9zm+RfStzS6xBlUkyugG9L5wrHdBRvsLSvbVl i6lgjLScTLTxDCjM8M49xLrtGMiPxQtxdfVFHo73tuVTuQ+myK+1RrziIwt6N7OhiwUN 3m1P4YjhHooc/H5hU56a9lpiOk78mznx9aKhZTLhzduBKEBHBKwyqh1XsR8TP+I/X/XD nDEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566998; x=1759171798; 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=lT8XgyL4GSdlSJQGrgvUQ4oFKNcHSEZIN97989Gt4ug=; b=YhR3kMIEbfLChjUHdKl7TQjYEG3pOc157ZRW+zi3m1GldtFouZTslzQ59QRalKIJWD OguUKnIrb4xdYdkfoyh0/vSNF+l9yFbb1VH5Kx+Aro/zVlJoOl9+d+QldpmPIaJEMAhn pklTohh1np76tyhfd6lFJXUQb17fEjinLQukD8C81/4CCGEhX4biMEZ1n76YzrHnXgmH rlKJ4nL5ERu+qym0AeVYHvrLnK+qGlqxbjLgYlBTcuEC+QfMKgc4Z/sv//GeLB5y+LWV z4IC6MuS9VhjV88F/iAW0b359fKNKPXfFjMeJASJ4B+RAap5VvfzJCt5vpVQSiPgbGaQ ZYlA== X-Gm-Message-State: AOJu0Yzo2LjutY7GtyRfBwBxsjommmhKQ4t1p/Ad7cM9scoe+QxDcQpS l5BmDbbaPJ8bX34ZNqDlVMs/bJfBNExAiGAVFrM+jRHYepBl7kbW5IOwocsZRAOiz6scy/FNRVX H92rG X-Gm-Gg: ASbGncusGDh/3mRr8RNtxh9jPK73Fg22kN5bb3JHlf1uJd/4MJ/rm4wMFB0y5sHH675 jcKzTYWrgSTk27XKgQ0CkWT97T/snOO0mpx8iNwrSWklbvwfwRhna7qcYF+kXc5eT2uX6fb01Tx ZMyJ3jR9zbTHIawNqQy2TxrR4IcJw8IFmmfk5U2HvcCCwxQwZAFJgMguZGl2LOF7IsmhJHyjVJe aRZPl1dHjBwknk9agVGVdpVyaCuqmaUkuC2BIt55m9pAGeuGbX4BwQMTQbna+VtnI/pHJve3Y3n 1LIK+t7eyIw1Rs1wsuy7HJRGstecHP9pSruFSDGFfHWTgY6TOyCdUvHFjQ0UCGZvbxCpog33Cig 6FP7BlzLlsXTEZbpOy93cgRj5oMDc X-Google-Smtp-Source: AGHT+IFtxXNINP7CtMAHgButhBt7P/V76JLRl77TBx3ZlG1lDCFb8oj/ZU7+zuk/bEcRRc4lauhijA== X-Received: by 2002:a05:6a00:1a0a:b0:77f:43e6:ce65 with SMTP id d2e1a72fcca58-77f43e6d795mr3069704b3a.0.1758566998555; Mon, 22 Sep 2025 11:49:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 25/76] target/arm: Convert regime_is_pan from switch to table Date: Mon, 22 Sep 2025 11:48:33 -0700 Message-ID: <20250922184924.2754205-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567171066116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 13 ------------- target/arm/mmuidx-internal.h | 8 ++++++++ target/arm/mmuidx.c | 9 +++++---- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index b32c31779c..b180499ecf 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1027,19 +1027,6 @@ static inline void arm_call_el_change_hook(ARMCPU *c= pu) } } =20 -static inline bool regime_is_pan(ARMMMUIdx mmu_idx) -{ - switch (mmu_idx) { - case ARMMMUIdx_Stage1_E1_PAN: - case ARMMMUIdx_E10_1_PAN: - case ARMMMUIdx_E20_2_PAN: - case ARMMMUIdx_E30_3_PAN: - return true; - default: - return false; - } -} - static inline bool regime_is_stage2(ARMMMUIdx mmu_idx) { return mmu_idx =3D=3D ARMMMUIdx_Stage2 || mmu_idx =3D=3D ARMMMUIdx_Sta= ge2_S; diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index f03a2ab94c..41baf1a003 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -16,6 +16,7 @@ FIELD(MMUIDXINFO, ELVALID, 2, 1) FIELD(MMUIDXINFO, REL, 3, 2) FIELD(MMUIDXINFO, RELVALID, 5, 1) FIELD(MMUIDXINFO, 2RANGES, 6, 1) +FIELD(MMUIDXINFO, PAN, 7, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -56,4 +57,11 @@ static inline bool regime_has_2_ranges(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, 2RANGES); } =20 +/* Return true if Privileged Access Never is enabled for this mmu index. */ +static inline bool regime_is_pan(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, PAN); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index f880d21606..98db02b8e5 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -10,6 +10,7 @@ #define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK) #define REL(X) ((X << R_MMUIDXINFO_REL_SHIFT) | R_MMUIDXINFO_RELVALID_MASK) #define R2 R_MMUIDXINFO_2RANGES_MASK +#define PAN R_MMUIDXINFO_PAN_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* @@ -17,24 +18,24 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { */ [ARMMMUIdx_E10_0] =3D EL(0) | REL(1) | R2, [ARMMMUIdx_E10_1] =3D EL(1) | REL(1) | R2, - [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2, + [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2 | PAN, =20 [ARMMMUIdx_E20_0] =3D EL(0) | REL(2) | R2, [ARMMMUIdx_E20_2] =3D EL(2) | REL(2) | R2, - [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2, + [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2 | PAN, =20 [ARMMMUIdx_E2] =3D EL(2) | REL(2), =20 [ARMMMUIdx_E3] =3D EL(3) | REL(3), [ARMMMUIdx_E30_0] =3D EL(0) | REL(3), - [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3), + [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3) | PAN, =20 [ARMMMUIdx_Stage2_S] =3D REL(2), [ARMMMUIdx_Stage2] =3D REL(2), =20 [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2, [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2, - [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2, + [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | PAN, =20 /* * M-profile. --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567146; cv=none; d=zohomail.com; s=zohoarc; b=URZ5gyAuo84DI2bUd58+leq1T2KlSBXoZ6HGMWuWqb1J3mYAzq8+pFR+n33d1HP7oGKA1sBAQPNOpBZmOCZQOnEC5B32kASLw9T7ua7q2ZcP/gX78QPbSbaZxa6OQgpZYG7JiEpuSzN9yg+khbTYtdfwE46QsA5JLrX+dEr4ZJA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567146; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KAb6+Aq27R5lfF6i22+yMOePpYluMFIXVFkejY5YFmQ=; b=jzn8/VoVh1d1rRfiKlrbuoF8KAu/J29W/Vz6WZmmSNx3kSddoCngaMfJlCtsp+SzsTHMHEl1QDIRwcNWUNZ8/MONWUnSThzuhkaUeVbwocD4QXJR+zZaMYQY1YW54Vu0RRXfuWjWjDRKkhTVLvNUDnw3rN+yFRiZkXyAIPTSgqg= 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 1758567146875388.7521672999857; Mon, 22 Sep 2025 11:52:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcD-00057k-8v; Mon, 22 Sep 2025 14:50:21 -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 1v0lc1-0004yZ-CK for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:10 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbt-0004DO-Eu for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:09 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-77f3405c38aso1263865b3a.0 for ; Mon, 22 Sep 2025 11:50:00 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758566999; x=1759171799; darn=nongnu.org; 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=KAb6+Aq27R5lfF6i22+yMOePpYluMFIXVFkejY5YFmQ=; b=K+xcvytt/v/pB3ZjTCpUCYX8FUjhKbeLN/801RXn/qlcwsTe0TVcaWdmKn+I9JyLR0 kyzmb+/VrePCaaUGCbZEFjNJ/h4TdfNHNpEQUrYJBOVG3l975YZ6nTTy4jsxQVEcQBpK rXmSWg9LjWvjlyqKz9fYUzNnMbDxVnN2u0pH3TGAjiRSNzkaoFW2MzuHNZtmgci/h8lS vNOwPHvYIsTORjVX/GcNaBs0ehsD4q2vlBAsGoESS38oBft2Dygs2sagyguCDtiXksHD lnR0rXLPIa0ry63p5n4BxoZsYoqgEpE+EV38dx+xvcMus1dg5XajmGntFav7Yw/FR1KJ Msow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758566999; x=1759171799; 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=KAb6+Aq27R5lfF6i22+yMOePpYluMFIXVFkejY5YFmQ=; b=l0cZ6QZucUuPFUymWNUakDGdB9YvTvEmyPcdYz/8Bwa3xaLOtgpq+78DPbetVTIHCK cpm6dhUjM2H6rOc9fjhx7SGdQ9Y2Jh0JX2yzxES73A5nRyaz5zbbB/WbKp23S+0s1kCu izpBCK46XcEX9LU1MAdo86tlxDXs0E1YISS/Kg50BymTOsWRl3RjMHj9owsG5VfnrRdJ tCORY02GnjoIHjuhIL6DhrZYCweON1yR1XcJA9bCRZZxRc2LGaC9G61OjwTpZvjMlj5h v7tLW7tsW7VGt2HKn3KMScxksAR3Fdy84+8H1Zub2XDimvG8RAOjEdjaybZ4IgxJ25x/ iyKQ== X-Gm-Message-State: AOJu0YzIGLm3l2ENaEB5JYpuJVh0zo3FOUvBxRWQVAG1ttEbICsSkOHs 35LBVg0+OiUgY8nGUw4ToWfCtNz909aN8ZPUQrwwZVxo4iDzbIlFPQCxYlETe3PPyVL1ZzfeSkZ 3ScUc X-Gm-Gg: ASbGncvkQaeSjUo2jC2wgIrvC8KxrcnQgm0yEk1OThtnhSUpgsOR5+PG9y+nCRmYBgL LVtOUuVhzbZrVSZptPkLjp0ZI2L0ySMQ/fYn4XMldycq/eLjq3FinspHLM8fpNwMcJt6a2iJV3S AXR5V0VrDMA+I6bYW3WkoFgiVOf49Mvim6YvvVejlo5us3HQ46oYayHs2Ol9XtLCj3D/LoRmZme ZxNb592r4PW4mEyBxvldAHdK32ctYByK0F3hsHvUxLYfuKfn9hh/wD3cjGsPNBqFIzY0CIIQ8ci 5sRtioKkfvUC2Qx79JlH3j2QFvRnkNYAg8JzXpv43da4P5v5rrz1ffvr8VGHdHE5jZ2bl4qVUs7 BxKxfqs8xVLh17+zMJFMkppV8kb4N X-Google-Smtp-Source: AGHT+IHpJHbqUdgQDdsEHYZFOdXkyIpiKSDebNTtcNRNzsU4VJVecd0cHhW/l49fX8k7ZvV9el8vZg== X-Received: by 2002:a05:6a00:4fc9:b0:772:4319:e7df with SMTP id d2e1a72fcca58-77e4f9b4bb7mr14653248b3a.30.1758566999571; Mon, 22 Sep 2025 11:49:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 26/76] target/arm: Remove unused env argument from regime_is_user Date: Mon, 22 Sep 2025 11:48:34 -0700 Message-ID: <20250922184924.2754205-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567148914116601 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 2 +- target/arm/helper.c | 2 +- target/arm/ptw.c | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index b180499ecf..ad5584eb0b 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1032,7 +1032,7 @@ static inline bool regime_is_stage2(ARMMMUIdx mmu_idx) return mmu_idx =3D=3D ARMMMUIdx_Stage2 || mmu_idx =3D=3D ARMMMUIdx_Sta= ge2_S; } =20 -static inline bool regime_is_user(CPUARMState *env, ARMMMUIdx mmu_idx) +static inline bool regime_is_user(ARMMMUIdx mmu_idx) { switch (mmu_idx) { case ARMMMUIdx_E10_0: diff --git a/target/arm/helper.c b/target/arm/helper.c index 83a675cc22..c0e808a9e8 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9436,7 +9436,7 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, = uint64_t va, ds =3D extract64(tcr, 59, 1); =20 if (e0pd && cpu_isar_feature(aa64_e0pd, cpu) && - regime_is_user(env, mmu_idx)) { + regime_is_user(mmu_idx)) { epd =3D true; } =20 diff --git a/target/arm/ptw.c b/target/arm/ptw.c index db51e55cd2..b72c1fc348 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -964,7 +964,7 @@ static int ap_to_rw_prot(CPUARMState *env, ARMMMUIdx mm= u_idx, int ap, int domain_prot) { return ap_to_rw_prot_is_user(env, mmu_idx, ap, domain_prot, - regime_is_user(env, mmu_idx)); + regime_is_user(mmu_idx)); } =20 /* @@ -990,7 +990,7 @@ static int simple_ap_to_rw_prot_is_user(int ap, bool is= _user) =20 static int simple_ap_to_rw_prot(CPUARMState *env, ARMMMUIdx mmu_idx, int a= p) { - return simple_ap_to_rw_prot_is_user(ap, regime_is_user(env, mmu_idx)); + return simple_ap_to_rw_prot_is_user(ap, regime_is_user(mmu_idx)); } =20 static bool get_phys_addr_v5(CPUARMState *env, S1Translate *ptw, @@ -1376,7 +1376,7 @@ static int get_S1prot(CPUARMState *env, ARMMMUIdx mmu= _idx, bool is_aa64, ARMSecuritySpace in_pa, ARMSecuritySpace out_pa) { ARMCPU *cpu =3D env_archcpu(env); - bool is_user =3D regime_is_user(env, mmu_idx); + bool is_user =3D regime_is_user(mmu_idx); bool have_wxn; int wxn =3D 0; =20 @@ -1538,7 +1538,7 @@ static int get_S1prot_indirect(CPUARMState *env, S1Tr= anslate *ptw, if ((u_perm & (PAGE_RWX | PAGE_GCS)) && regime_is_pan(mmu_idx)) { p_perm &=3D ~(PAGE_READ | PAGE_WRITE); } - perm =3D regime_is_user(env, mmu_idx) ? u_perm : p_perm; + perm =3D regime_is_user(mmu_idx) ? u_perm : p_perm; } =20 if (in_pa !=3D out_pa) { @@ -2389,7 +2389,7 @@ static bool get_phys_addr_pmsav5(CPUARMState *env, uint32_t mask; uint32_t base; ARMMMUIdx mmu_idx =3D ptw->in_mmu_idx; - bool is_user =3D regime_is_user(env, mmu_idx); + bool is_user =3D regime_is_user(mmu_idx); =20 if (regime_translation_disabled(env, mmu_idx, ptw->in_space)) { /* MPU disabled. */ @@ -2556,7 +2556,7 @@ static bool get_phys_addr_pmsav7(CPUARMState *env, ARMCPU *cpu =3D env_archcpu(env); int n; ARMMMUIdx mmu_idx =3D ptw->in_mmu_idx; - bool is_user =3D regime_is_user(env, mmu_idx); + bool is_user =3D regime_is_user(mmu_idx); bool secure =3D arm_space_is_secure(ptw->in_space); =20 result->f.phys_addr =3D address; @@ -2776,7 +2776,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t add= ress, * memory system to use a subpage. */ ARMCPU *cpu =3D env_archcpu(env); - bool is_user =3D regime_is_user(env, mmu_idx); + bool is_user =3D regime_is_user(mmu_idx); int n; int matchregion =3D -1; bool hit =3D false; @@ -3656,7 +3656,7 @@ static bool get_phys_addr_nogpc(CPUARMState *env, S1T= ranslate *ptw, break; } =20 - result->f.attrs.user =3D regime_is_user(env, mmu_idx); + result->f.attrs.user =3D regime_is_user(mmu_idx); =20 /* * Fast Context Switch Extension. This doesn't exist at all in v8. --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567060; cv=none; d=zohomail.com; s=zohoarc; b=gPbAQZEmhchA6BoATLK7RoPW8j6WmA0IIA33M4Iw0MJfzu2C+ucoaxdWJYK3/NHIo2djmqXm0iWYzH8q/ZllPZ5ljZQZgZrffHjZ555LsVBOxvjQYLPTdIT7TvHmSroeDuylStHZh95URr+LfSWlPzUePXcJqnBRHoNqnGSbiwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567060; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=E4QHixNLRruVL1+s5ZPspsPklSaQIRNXFJF3fprFyCk=; b=eHUl/eU+83EmPG25evFOo4GXbP/VdjVM0qtdEVaTNq87ImnoIqeB4u3zwglXFNmsgxhagVT5OYY5GWpMYzU80+qQSZEWb9uHul6VSTtOSok/BuH1wSl65KOIR8idK0B/dPr2DfUADGPtTFxse5xprZ0DvLroQO7z435bsqt65mc= 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 1758567060864877.0695348813568; Mon, 22 Sep 2025 11:51:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lc9-00055A-7r; Mon, 22 Sep 2025 14:50:17 -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 1v0lc4-00050a-GG for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:13 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbv-0004EX-TK for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:12 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-33292adb180so745470a91.3 for ; Mon, 22 Sep 2025 11:50:03 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.49.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567001; x=1759171801; darn=nongnu.org; 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=E4QHixNLRruVL1+s5ZPspsPklSaQIRNXFJF3fprFyCk=; b=Xw0f45DBGNtRZ2uo4rb6ADF96MxGT82lUFzNY1snsXnGMfCwWAnGcHvL4lUwBEDXEu 0TDF0+YKAYAXMKzRU6jZTpFjwg7+HVVFfPqf2HLfOrWs2UYPryGxqWKVTCEzuAyZnXKM 4RGCTxsaHEG2qAIruuWIGow/60jUiHHfkKGtiu46a1L66+f9HSJfQinscKCDFCcaigLJ JaMW9YdUKBOeOfh0dhmqHm5FucmPKr79Y4+uCwtHDiInALLBamZ+Kq0Xr1mwvywH8xHy m4iueeEWE21x/TiZx9hIy9tkorOGxaTEF9LehCiqmAz+q7QRf3UT6pZZzbLjQTj/V92I n30g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567001; x=1759171801; 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=E4QHixNLRruVL1+s5ZPspsPklSaQIRNXFJF3fprFyCk=; b=Hi3FKtkG0KpVSBFp1H3vLmT3AvZDNHcbZA8Mj8L0DPK3sqfLGqgM5RhrgTKlC+vqP2 sI4ta4PllN6Q1/UlPsoSrXyHsyXhZZBpKga9XFD7bIoa7Bk6VHsC2NiyHg/k2fteHkRE Q6oBHcFFIh2OvtSjSVnSG3DJ0eHhjDmzJrb+H7ytCu+LRRQXEP+cRNgpTuzVGSX9yNdV GclKe7mj73arrIFkhnRyyhu62pDU91hEVgLLzOjGGp/Mao8i9dXtTyw6OKqqfalFcHF4 SWBFGms1DTsW3Ef3ufPCS1cYWkHwp1wqyFBRT6D7tyIoYYHMHKXwRIfrVACMtk1FkHzl KigQ== X-Gm-Message-State: AOJu0YwMTaZtiVgBaQY9hkhDX0SiVF4mU5eLnznjg96foki6PWmzqqYP rUbFSpeMoChrzJUErPXqXfvzZtCEpVmrjtMMCgY0/mnXT1LHbEbH2xkeSaAju/cWhhMp1Hu4VEX lU3eW X-Gm-Gg: ASbGncvIRzFilUDYXa2G66N2ceZoQCx51VG+RWThHt7bT37fbzxIQF3reilNrRTQs6Q p/qp86jX+U+3OBMdxibE3nZADjV9nY++qb2V7y1Zuvg4ZMFgwbwI/jOqCvmYNeuL6ZDdcaGXSPl 2QTKCQH64njbnO0MgXQU9wng/nSIssoaPhUaSVZTn864xKkCBcDOZyMG53KmEhfcD4OY/OByk7m t1JpdapE2wXrb38sqBgasYcDXIw/aW7zl3LxvlUSCGAIcDQq8+JMRMD4pHAqRZJY8Kn8sq3EDyj N8KLlC2InwDpCJ71sreYdVsRJSOFvItsJGen1x2JOutTbmrTAuKAKYzkRl0Qbuwn6PgtrbtqvGg uye0mObK2SPtDd3OZyoAxSbrBAhvHHygunLT9XMlJcX8SE2u3g1VsH5A9nQ== X-Google-Smtp-Source: AGHT+IG4cQu/DuBITF8RlmuqqjZeGZOYNYazEgIbDfLyUFXvZQ1JZI+aNpoF28G95YzTRU66Fz1VdA== X-Received: by 2002:a17:90b:28cc:b0:32d:a0f7:fa19 with SMTP id 98e67ed59e1d1-330983417e1mr18170817a91.17.1758567000342; Mon, 22 Sep 2025 11:50:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 27/76] target/arm: Convert regime_is_user from switch to table Date: Mon, 22 Sep 2025 11:48:35 -0700 Message-ID: <20250922184924.2754205-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567061910116600 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 17 ----------------- target/arm/mmuidx-internal.h | 12 ++++++++++++ target/arm/mmuidx.c | 6 ++++-- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index ad5584eb0b..afdc5a92ae 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1032,23 +1032,6 @@ static inline bool regime_is_stage2(ARMMMUIdx mmu_id= x) return mmu_idx =3D=3D ARMMMUIdx_Stage2 || mmu_idx =3D=3D ARMMMUIdx_Sta= ge2_S; } =20 -static inline bool regime_is_user(ARMMMUIdx mmu_idx) -{ - switch (mmu_idx) { - case ARMMMUIdx_E10_0: - case ARMMMUIdx_E20_0: - case ARMMMUIdx_E30_0: - case ARMMMUIdx_Stage1_E0: - case ARMMMUIdx_MUser: - case ARMMMUIdx_MSUser: - case ARMMMUIdx_MUserNegPri: - case ARMMMUIdx_MSUserNegPri: - return true; - default: - return false; - } -} - /* Return the SCTLR value which controls this address translation regime */ static inline uint64_t regime_sctlr(CPUARMState *env, ARMMMUIdx mmu_idx) { diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 41baf1a003..3e51c0f579 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -17,6 +17,7 @@ FIELD(MMUIDXINFO, REL, 3, 2) FIELD(MMUIDXINFO, RELVALID, 5, 1) FIELD(MMUIDXINFO, 2RANGES, 6, 1) FIELD(MMUIDXINFO, PAN, 7, 1) +FIELD(MMUIDXINFO, USER, 8, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -64,4 +65,15 @@ static inline bool regime_is_pan(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, PAN); } =20 +/* + * Return true if the exception level associated with this mmu index is 0. + * Differs from arm_mmu_idx_to_el(idx) =3D=3D 0 in that this allows queryi= ng + * Stage1 and Stage2 mmu indexes. + */ +static inline bool regime_is_user(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, USER); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 98db02b8e5..1c1e062bfe 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -7,10 +7,12 @@ #include "mmuidx-internal.h" =20 =20 -#define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK) +#define EL(X) ((X << R_MMUIDXINFO_EL_SHIFT) | R_MMUIDXINFO_ELVALID_MASK |= \ + ((X =3D=3D 0) << R_MMUIDXINFO_USER_SHIFT)) #define REL(X) ((X << R_MMUIDXINFO_REL_SHIFT) | R_MMUIDXINFO_RELVALID_MASK) #define R2 R_MMUIDXINFO_2RANGES_MASK #define PAN R_MMUIDXINFO_PAN_MASK +#define USER R_MMUIDXINFO_USER_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* @@ -33,7 +35,7 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_Stage2_S] =3D REL(2), [ARMMMUIdx_Stage2] =3D REL(2), =20 - [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2, + [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | USER, [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2, [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | PAN, =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567837; cv=none; d=zohomail.com; s=zohoarc; b=hH540Bsi/l4T5W7KEM2uqw5IVcLpm1mlyHBtReo22ZyUe3aXHpcn8nKdJnRJ+o3fRedz4IVqb8/O8BCIT9dExxlNDeFibfnP2D9iLTFzw7GVA5ip49w5X9UvN3co683QWoVFSpKbkRqOa5Fpu23cyQwaJ3tbnVq3uFHWfK4Kp+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567837; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fXEhGs2c7sX9UNzM1Em26qJHq6E+l20XSVscjZYvVl8=; b=nnSnKENsWMAh9ZF8OOR/VDRq17aUAAYkh61M1ZqG29MyQR4F74Ek85ykwAhvJT7PRY9x2nQxWKl8XMH2oMF2xGOYlqI/4rrNDO5rDupkFRzAAZwOdtp3QcK0CElk8GRAjWS7sruj4c4GxH54VDGxB2gzA6FIG+bSbSR6oPb5V4w= 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 1758567837471709.5693999317272; Mon, 22 Sep 2025 12:03:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcH-0005Dw-BY; Mon, 22 Sep 2025 14:50:27 -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 1v0lc3-00050P-EB for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:12 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbv-0004EL-FA for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:10 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-77f0efd84abso2135852b3a.3 for ; Mon, 22 Sep 2025 11:50:02 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567002; x=1759171802; darn=nongnu.org; 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=fXEhGs2c7sX9UNzM1Em26qJHq6E+l20XSVscjZYvVl8=; b=JIyKxGh+Ti63Lk4m6pCiamqy+UH/7Yf7iGUaJuP6vkR0li1mRL41nNRKTpwce5ag5c h6zfIOpyQOc+MQ1RBLjG+bh9mp5kGPpuCJcQAE1RUkiTqPdeHIePeZFjqWgAYoLDb1/t SGHz+FcpHfTK8eH3aTYd/oGzoFx+aaxo+xjrC9Zva8pInjUWeEIX8geCjPwwduk8NBV7 WpS3eZGrB2R3vZ792Ch5qZbkvWpGuyx0k5V/CR4J91VBu+LXmLbmLRzL5CSe/9SISgoE SZTsSkim+d/vG4fk7YkwhQOfUbc26J84JI+W1kAe7mBYtIHDYSsmEIrcd5sh/+WzIXjq 88HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567002; x=1759171802; 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=fXEhGs2c7sX9UNzM1Em26qJHq6E+l20XSVscjZYvVl8=; b=t4fZu0hN4Po0FO7uhuYFZRNoR+zBhziZmbscXbeRjGXs5h8vefCZBC2GKlEIp5xEZK 69k/l3TQlNv8pXglPCgtMtWwXsnf6Gd5LmjA3RL9QW7kqk6qU+07Xsa8WZbM1//SN8Lo MnEnibAYRUlfQNk3S+f2EnYn443vbelqeO47qetztsKrZ9zXnRJcmlOZ0tPe/+rywvo1 NOAFngdXZLQFx9n8mFzXxX91rM9byJtdtGDKOeibnBiCyWdmcGC4koQafpFLdaJiR37+ GG338lKVKogRQ1wQ6Q7n6wKieHMPZJUvWnZx2/ekoljSYZyzq2G9TRCZAXMB2vxHGBL9 dYMA== X-Gm-Message-State: AOJu0YwjsJFo8lZTwJr/PK1C6y4wBL6JLjTXuPBfINo3Xlbln7b6deas 4R7uCh0At0/V+mVOOIoqwFX38NJuDcNPo3Tm1v7g8Yjfy87ON43bnuAnRKJvkFRVhwCfqjACJ02 /8v+k X-Gm-Gg: ASbGncvJewMIIgI+WknvuD0uz9wmfkGIOIgbZ0BZcMZc8SwiDeboWJJ2jVdTh1VjOZN i8XC/QVz8lbHGUAGWjuhvv2Atz8RFZ+pKCK6153nQboaWixERHl1tNBAzWFla92v24dSansEUy4 mErf5TpYZkGDdxsV/hwmEXfQ/VJtRkjwRsjoZxZ9OVWPA+nwhvq7LMdJ13c5n6BC+lPdAJ6pTEF hyUk5PylvbfVHe8jt/if5djauheGyUTTzXhMy+4+s5/KyCy3SQ5GiSSu+0kAoIvUSxY3xm5Klfm VaUHlPha2dH55u/4NJgrgy5N5oMQ10CirRNBkk8ZE/eCmPG+IWngbtPbFsKTdUFmQ1oQE0pv7b5 q24Gy1FsApjc1ScLcvXk8bwxjAT0Q X-Google-Smtp-Source: AGHT+IGyJcjpSg9dEAZ6WxG9bnfJKkiMS4GH21i4I+L6ZQur2in73nvU+R236wQZYquUiAS+OH+jxQ== X-Received: by 2002:a05:6a00:3e0a:b0:776:4fb5:bfc6 with SMTP id d2e1a72fcca58-77e4e8bd90bmr16339504b3a.21.1758567001664; Mon, 22 Sep 2025 11:50:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 28/76] target/arm: Convert arm_mmu_idx_is_stage1_of_2 from switch to table Date: Mon, 22 Sep 2025 11:48:36 -0700 Message-ID: <20250922184924.2754205-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567839733116600 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 19 ------------------- target/arm/mmuidx-internal.h | 8 ++++++++ target/arm/mmuidx.c | 7 ++++--- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index afdc5a92ae..771f7748de 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1280,25 +1280,6 @@ ARMMMUIdx stage_1_mmu_idx(ARMMMUIdx mmu_idx); ARMMMUIdx arm_stage1_mmu_idx(CPUARMState *env); #endif =20 -/** - * arm_mmu_idx_is_stage1_of_2: - * @mmu_idx: The ARMMMUIdx to test - * - * Return true if @mmu_idx is a NOTLB mmu_idx that is the - * first stage of a two stage regime. - */ -static inline bool arm_mmu_idx_is_stage1_of_2(ARMMMUIdx mmu_idx) -{ - switch (mmu_idx) { - case ARMMMUIdx_Stage1_E0: - case ARMMMUIdx_Stage1_E1: - case ARMMMUIdx_Stage1_E1_PAN: - return true; - default: - return false; - } -} - static inline uint32_t aarch32_cpsr_valid_mask(uint64_t features, const ARMISARegisters *id) { diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 3e51c0f579..55fba4aae2 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -18,6 +18,7 @@ FIELD(MMUIDXINFO, RELVALID, 5, 1) FIELD(MMUIDXINFO, 2RANGES, 6, 1) FIELD(MMUIDXINFO, PAN, 7, 1) FIELD(MMUIDXINFO, USER, 8, 1) +FIELD(MMUIDXINFO, STAGE1, 9, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -76,4 +77,11 @@ static inline bool regime_is_user(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, USER); } =20 +/* Return true if this mmu index is stage 1 of a 2-stage translation. */ +static inline bool arm_mmu_idx_is_stage1_of_2(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, STAGE1); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 1c1e062bfe..c5b43a5932 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -13,6 +13,7 @@ #define R2 R_MMUIDXINFO_2RANGES_MASK #define PAN R_MMUIDXINFO_PAN_MASK #define USER R_MMUIDXINFO_USER_MASK +#define S1 R_MMUIDXINFO_STAGE1_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* @@ -35,9 +36,9 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_Stage2_S] =3D REL(2), [ARMMMUIdx_Stage2] =3D REL(2), =20 - [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | USER, - [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2, - [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | PAN, + [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | S1 | USER, + [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2 | S1, + [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | S1 | PAN, =20 /* * M-profile. --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567210; cv=none; d=zohomail.com; s=zohoarc; b=JVesOWg3VTgHdIOxGu1Jrb6hahLN0u1iINoPceHWkSK1BLRSl20euF7M8kJMrL1IJBKHwWm+74dwSZ+OJdqKKDwUTjdC224WrHBjHcOG/0CHl3tqHBxQuJylIAi3ErcYo3AGmQMhLqLonyR8NB9yOlbE69G+KDyAES0KqZDQtDI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567210; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MMkbENUvVqZ656cyeBLZAoddv/+9a0gSIGqLUctDUDE=; b=D8J0tJ9lFgqa/OTrqtC2ptbg4H6eCbKZZCgpXMMbXsvP/jJkpnibTGRDAaV+8GHUVCHF++bOqyGaDOhenTdngyS3+QIlnnIDUcpPogcrdsOGXGWe3W6TrUwn0jgjuZGj6TPOtQNKEAhXAFnd7zbKJE42ClWpDBt8rIZx7jJG3Zg= 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 1758567210346206.5453327641245; Mon, 22 Sep 2025 11:53:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcA-00056U-Fi; Mon, 22 Sep 2025 14:50:18 -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 1v0lc5-00050i-3m for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:13 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lbw-0004FP-Jj for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:12 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-77f2c7ba550so1514780b3a.1 for ; Mon, 22 Sep 2025 11:50:04 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567003; x=1759171803; darn=nongnu.org; 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=MMkbENUvVqZ656cyeBLZAoddv/+9a0gSIGqLUctDUDE=; b=fNOvd8d55rFj3tlGmLQ3Otc+MebPgCPQSUWj0KQYyxNWBrjZqCziy4XrDh9r4/+/4B TMZTlZhWSTk7uzZP6OvYeUd0yaI+qIQD+vXsw7h5xcQbDWhuZlFGyZ5AqltRZ8iwO5v9 U8Pmwhs3uxwoo8cGh5Wv+ANMr4PRml0FPRhJd3z40q4Ua+8d7ILxPS90q0ln9Ntc9tbB hr55WRfFYdOB9Nkr/OzjpHiBWnMOkxjgoQ3tuFvAvx4yN6d8mJ6ru/dco7jK2sH+AVvi +n2HD4xbFGfgZKYfzzNSCdWXlm5qQDg7wmu8cDM5lVfw9B4Sw113VFMsHeCngz3iRkW6 kgeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567003; x=1759171803; 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=MMkbENUvVqZ656cyeBLZAoddv/+9a0gSIGqLUctDUDE=; b=vzTyDZfkM30n6qUbz/INt0YyIRZ1nTIAd7e6/GD2A0dkXXv8IgYkH1oxFgrlfMMJPR NGfuF66Zup39WcTCdqZ95OtV3MztyAONV5rLFv75S+quJlFjnGR54vDx5hDyHcTDqRTF J6VQd+UMMyDmlaoL9zliXu7MDpkI8YJRD8Dd+WziCJogKLvC+cb+kPPumLgfZQWU4s4t bYsc0gmfPScoA9Gd48MwOjdesWbo65p3QTn7/SHQMpumKrDfnTwR1KRG24UmYMUXF91e mD29lRDpbPcb50rjYoAGIo9DejjuTnjzDG7UsWPulk9niAzHfjKRSr0zOl0zXVQm89aP RYVQ== X-Gm-Message-State: AOJu0YytrgmfmNsXYMG6chdAPfHOZLgUSRJatJXKPWCDBssANeOWgWTg LFJoKr1+8BXdkR+OKiKtoXoJSNtykypMcz8L7OxvO2gSRw9B5wv+c+44W3AiSa2jgZpWnZdLikM C+aBX X-Gm-Gg: ASbGncucJwRWfnFbKR4bzdsR8ldIjTJ6H9lAm0GpsHJzzUWWaUZ9Llv5DeaaA6ulZyq ijGbzgAqLYvioFPue23QRTxVBGJvNA48dfolvdhX1wRLe1fg5ICTEEHoISx66YfBrMlwtiOPZd6 4iSPvyiOUhLf/xADQKH67k3+WVKHHp88bNDxrWN3lzwIr3ofYyK2RTanoQMiyZW+ga7kvXAteGE IwpQQ2E98M72q3J9tU6zvUZ7YXgwDiv4q0wQuhvAGdC+O71KlR5aZJouyExR/l3RyFgP5TyzF6j PuzKOCNn4bNNqezULO/APnqTLjFkCN5GicCyAEejwDL5z9580l+XWSINe3RRXtQZQ6pgY9p/K49 Qy8fPQkxH0UPZz7v1qFjff8z7BgEJdZ1m/jYhr+s= X-Google-Smtp-Source: AGHT+IHeNJLn1pB27jiZsOuHmfx67iaGLzlbOh3OAZpfubnQcnsyQVhEzsNxYkykGM8GrR5rSvNu2A== X-Received: by 2002:a05:6a20:6a1f:b0:2ba:103:aa3b with SMTP id adf61e73a8af0-2cffe9f51d9mr88061637.53.1758567002778; Mon, 22 Sep 2025 11:50:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pierrick Bouvier Subject: [PATCH v5 29/76] target/arm: Convert regime_is_stage2 to table Date: Mon, 22 Sep 2025 11:48:37 -0700 Message-ID: <20250922184924.2754205-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567211471116600 This wasn't using a switch, but two comparisons. Convert it to arm_mmuidx_table for consistency. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/internals.h | 5 ----- target/arm/mmuidx-internal.h | 8 ++++++++ target/arm/mmuidx.c | 5 +++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 771f7748de..dc6bf3548e 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1027,11 +1027,6 @@ static inline void arm_call_el_change_hook(ARMCPU *c= pu) } } =20 -static inline bool regime_is_stage2(ARMMMUIdx mmu_idx) -{ - return mmu_idx =3D=3D ARMMMUIdx_Stage2 || mmu_idx =3D=3D ARMMMUIdx_Sta= ge2_S; -} - /* Return the SCTLR value which controls this address translation regime */ static inline uint64_t regime_sctlr(CPUARMState *env, ARMMMUIdx mmu_idx) { diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 55fba4aae2..1d948aa6f4 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -19,6 +19,7 @@ FIELD(MMUIDXINFO, 2RANGES, 6, 1) FIELD(MMUIDXINFO, PAN, 7, 1) FIELD(MMUIDXINFO, USER, 8, 1) FIELD(MMUIDXINFO, STAGE1, 9, 1) +FIELD(MMUIDXINFO, STAGE2, 10, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -84,4 +85,11 @@ static inline bool arm_mmu_idx_is_stage1_of_2(ARMMMUIdx = idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, STAGE1); } =20 +/* Return true if this mmu index is stage 2 of a 2-stage translation. */ +static inline bool regime_is_stage2(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, STAGE2); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index c5b43a5932..61a682e655 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -14,6 +14,7 @@ #define PAN R_MMUIDXINFO_PAN_MASK #define USER R_MMUIDXINFO_USER_MASK #define S1 R_MMUIDXINFO_STAGE1_MASK +#define S2 R_MMUIDXINFO_STAGE2_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* @@ -33,8 +34,8 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_E30_0] =3D EL(0) | REL(3), [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3) | PAN, =20 - [ARMMMUIdx_Stage2_S] =3D REL(2), - [ARMMMUIdx_Stage2] =3D REL(2), + [ARMMMUIdx_Stage2_S] =3D REL(2) | S2, + [ARMMMUIdx_Stage2] =3D REL(2) | S2, =20 [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | S1 | USER, [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2 | S1, --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567599; cv=none; d=zohomail.com; s=zohoarc; b=m2JAAYUAO/dCdzprk+qepJyB3T402PxKN8szkFjr9Ave9Cy5u8XkLsLWovR8KwD0sn0rpAkJI8x69/+TEjqU1R7kADBuozGZNPbxez3mr+D5BkiKeKeciqt8yDYpgqU+jO7PqTwmJN9HGxUScYDmTg03rFlXGYSbL4vdwsl0JaI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567599; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Qsv9+J1b0SQHMjMCVh4BbUHD6t+4kBp+y3W+prfhxA4=; b=ZINenIVcBUyWEAzfIWC7wtwy4e0raFIGm5PAtAqXYibF2g6rQQFr4unqE1Uff6Fq/U+th+XE6y1R93Q7Hx0FfDrtjobjAeOJ7cimWr2bX074lPBQDDtJgHYOyhTH5cTkfKjmpjspe5ngjOaQr9K0uobeYVOG2A8zfhWBf/m7t+c= 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 1758567599549393.0222273944821; Mon, 22 Sep 2025 11:59:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lco-0005c7-Kq; Mon, 22 Sep 2025 14:50:58 -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 1v0lc8-00054I-BJ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:16 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lby-0004Ld-Az for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:16 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-77f2e621ef8so1705005b3a.0 for ; Mon, 22 Sep 2025 11:50:04 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567004; x=1759171804; darn=nongnu.org; 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=Qsv9+J1b0SQHMjMCVh4BbUHD6t+4kBp+y3W+prfhxA4=; b=a7NikAmP/dCJxzqxM29FHIUYlTEaU8VK8AQSn7YIlG6XkdpSgYYl5wOqnRxhFjmfF7 fUVqxWcHg4ZGANr81nOuGUUGf1UNOd0ex05k6QtEJGO3ckvrib3sviBrmsqGnJcRhAdH SDxlh7G+wQ4y7cGVkXpeybffN7Csb1Nj3c5jdzbOYLrW/vhCoBiZcH6gr/rgryLeUKB7 5Eeo2368BTOhif3UBhrJkHGIqOfWBWF5erlOBBfqZbfTJZJuRABmXuGCUXFZRC1bBa/T tnREGoExTDDbutd7qCTQiPK7Ij2aZ/nbJG43bdBl65BywHjcMmMBx1Vgbk9kkGyXH5zG Pa6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567004; x=1759171804; 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=Qsv9+J1b0SQHMjMCVh4BbUHD6t+4kBp+y3W+prfhxA4=; b=TPTEbKmZEIbzl4NgVi3KDjPlUulEwI7CUNRuiYkf8dIDEbPQtoE130TmJWtJFokvVl ihGT694gvgkN59OrxzbMTiomgKobQY4rQVDuXb0SdEm7I8gaQtuRAZTiQuXhFajRplgA j3YQXCCKgJKbtp63HXeJ/p6CNvSNlg5iBG4sVB1qofrBPpH5OpYpI0mEeMb2TyvKqRax MGVFDmZj4SpL4ivLlCBmIrH7t0Z8MElxH7ltSGcDe0n9EhOjgVaqG2qHZCXaQmhOrVLT NVUNv/AIUsr8Y0bErgBxo/Jc6LaMgVGamxFlHV8o8upfHqbADQTsVEbkTpsYm55FKezJ lCUw== X-Gm-Message-State: AOJu0YwPjpIz2xHl6/JFOQXo5QwYJmbIOxq3Y1w2nu6OH/BhZEXb9318 xsBZjb4XhEyYWXdEVyT60yMpkfs7KdTMVpxRZTHOv6MGbTM1FYR336h6MrT4UpMxZfN0yol/Fc1 djGB6 X-Gm-Gg: ASbGnctsh7ddiVp3b4IrmToJuAG8TAHvTMvEsfSotEbaiCtGprQZtiuCmAKlJtFolpu oOpa9Xnpyi0fbxjG5dTIpW8f0Yp6wdk6EEZy+mEJx/UPQ6UCIPkv6BEFKsTeDwpxXpHWxsAeSVA 1kENRedk8416wU/+MXfNllC85HEh4YLEPvBps/7ALxjIaAIo8ufoTn973Cn10itQOCxxFHGPbb8 KoWxl3ouMblw6GW34uMpC5UAENPjTgzGgckh6Fd/Q3UqE6J8dxd0LPTxPGZfbmVg/S2tPKyoUOA qbGvb50TdQMdZVMp6MCOihX+e0P5q87ApMX8LXPH7k5T4T6tm6vY2J2JVfcSHwHJ1pgn03LWp7N FMqRjcw/u1yZrtU603x76fsAGOJ8q X-Google-Smtp-Source: AGHT+IG7onVOlt3vT+loogwmdDZNFb6o2YiIgH9wWyIgxiQXi8RJOgBaf606RhVl0RxotAdnOwGk+w== X-Received: by 2002:a05:6a00:17a8:b0:77f:4721:54ae with SMTP id d2e1a72fcca58-77f47215cf3mr2790067b3a.27.1758567003510; Mon, 22 Sep 2025 11:50:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 30/76] target/arm: Introduce mmu indexes for GCS Date: Mon, 22 Sep 2025 11:48:38 -0700 Message-ID: <20250922184924.2754205-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567601427116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- include/hw/core/cpu.h | 5 ++- target/arm/mmuidx-internal.h | 8 ++++ target/arm/mmuidx.h | 71 ++++++++++++++++++++++++------------ target/arm/helper.c | 15 ++++++-- target/arm/mmuidx.c | 9 +++++ target/arm/ptw.c | 20 ++++++++++ target/arm/tcg/tlb-insns.c | 47 ++++++++++++++++-------- 7 files changed, 132 insertions(+), 43 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 83d6e9c24e..aad4ace27c 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -198,9 +198,10 @@ struct CPUClass { }; =20 /* - * Fix the number of mmu modes to 16. + * Fix the number of mmu modes across all targets. + * Current maximum is target/arm/. */ -#define NB_MMU_MODES 16 +#define NB_MMU_MODES 22 typedef uint32_t MMUIdxMap; =20 /* Use a fully associative victim tlb of 8 entries. */ diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 1d948aa6f4..f494ec348d 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -20,6 +20,7 @@ FIELD(MMUIDXINFO, PAN, 7, 1) FIELD(MMUIDXINFO, USER, 8, 1) FIELD(MMUIDXINFO, STAGE1, 9, 1) FIELD(MMUIDXINFO, STAGE2, 10, 1) +FIELD(MMUIDXINFO, GCS, 11, 1) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -92,4 +93,11 @@ static inline bool regime_is_stage2(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, STAGE2); } =20 +/* Return true if this mmu index implies AccessType_GCS. */ +static inline bool regime_is_gcs(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, GCS); +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.h b/target/arm/mmuidx.h index 5b9b4bc84f..8d8d27337e 100644 --- a/target/arm/mmuidx.h +++ b/target/arm/mmuidx.h @@ -58,24 +58,31 @@ * already heavyweight. * 8. we cannot fold together Stage 2 Secure and Stage 2 NonSecure, * because both are in use simultaneously for Secure EL2. + * 9. we need separate indexes for handling AccessType_GCS. * * This gives us the following list of cases: * * EL0 EL1&0 stage 1+2 (aka NS PL0 PL1&0 stage 1+2) + * EL0 EL1&0 stage 1+2 +GCS * EL1 EL1&0 stage 1+2 (aka NS PL1 PL1&0 stage 1+2) * EL1 EL1&0 stage 1+2 +PAN (aka NS PL1 P1&0 stage 1+2 +PAN) + * EL1 EL1&0 stage 1+2 +GCS * EL0 EL2&0 + * EL0 EL2&0 +GCS * EL2 EL2&0 * EL2 EL2&0 +PAN + * EL2 EL2&0 +GCS * EL2 (aka NS PL2) + * EL2 +GCS * EL3 (aka AArch32 S PL1 PL1&0) + * EL3 +GCS * AArch32 S PL0 PL1&0 (we call this EL30_0) * AArch32 S PL1 PL1&0 +PAN (we call this EL30_3_PAN) * Stage2 Secure * Stage2 NonSecure * plus one TLB per Physical address space: S, NS, Realm, Root * - * for a total of 16 different mmu_idx. + * for a total of 22 different mmu_idx. * * R profile CPUs have an MPU, but can use the same set of MMU indexes * as A profile. They only need to distinguish EL0 and EL1 (and @@ -114,9 +121,9 @@ * For M profile we arrange them to have a bit for priv, a bit for negpri * and a bit for secure. */ -#define ARM_MMU_IDX_A 0x10 /* A profile */ -#define ARM_MMU_IDX_NOTLB 0x20 /* does not have a TLB */ -#define ARM_MMU_IDX_M 0x40 /* M profile */ +#define ARM_MMU_IDX_A 0x20 /* A profile */ +#define ARM_MMU_IDX_NOTLB 0x40 /* does not have a TLB */ +#define ARM_MMU_IDX_M 0x80 /* M profile */ =20 /* Meanings of the bits for M profile mmu idx values */ #define ARM_MMU_IDX_M_PRIV 0x1 @@ -125,22 +132,32 @@ =20 #define ARM_MMU_IDX_TYPE_MASK \ (ARM_MMU_IDX_A | ARM_MMU_IDX_M | ARM_MMU_IDX_NOTLB) -#define ARM_MMU_IDX_COREIDX_MASK 0xf +#define ARM_MMU_IDX_COREIDX_MASK 0x1f =20 typedef enum ARMMMUIdx { /* * A-profile. */ - ARMMMUIdx_E10_0 =3D 0 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_0 =3D 1 | ARM_MMU_IDX_A, - ARMMMUIdx_E10_1 =3D 2 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_2 =3D 3 | ARM_MMU_IDX_A, - ARMMMUIdx_E10_1_PAN =3D 4 | ARM_MMU_IDX_A, - ARMMMUIdx_E20_2_PAN =3D 5 | ARM_MMU_IDX_A, - ARMMMUIdx_E2 =3D 6 | ARM_MMU_IDX_A, - ARMMMUIdx_E3 =3D 7 | ARM_MMU_IDX_A, - ARMMMUIdx_E30_0 =3D 8 | ARM_MMU_IDX_A, - ARMMMUIdx_E30_3_PAN =3D 9 | ARM_MMU_IDX_A, + + ARMMMUIdx_E10_0 =3D 0 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_0_GCS =3D 1 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_1 =3D 2 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_1_PAN =3D 3 | ARM_MMU_IDX_A, + ARMMMUIdx_E10_1_GCS =3D 4 | ARM_MMU_IDX_A, + + ARMMMUIdx_E20_0 =3D 5 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_0_GCS =3D 6 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_2 =3D 7 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_2_PAN =3D 8 | ARM_MMU_IDX_A, + ARMMMUIdx_E20_2_GCS =3D 9 | ARM_MMU_IDX_A, + + ARMMMUIdx_E2 =3D 10 | ARM_MMU_IDX_A, + ARMMMUIdx_E2_GCS =3D 11 | ARM_MMU_IDX_A, + + ARMMMUIdx_E3 =3D 12 | ARM_MMU_IDX_A, + ARMMMUIdx_E3_GCS =3D 13 | ARM_MMU_IDX_A, + ARMMMUIdx_E30_0 =3D 14 | ARM_MMU_IDX_A, + ARMMMUIdx_E30_3_PAN =3D 15 | ARM_MMU_IDX_A, =20 /* * Used for second stage of an S12 page table walk, or for descriptor @@ -148,14 +165,14 @@ typedef enum ARMMMUIdx { * are in use simultaneously for SecureEL2: the security state for * the S2 ptw is selected by the NS bit from the S1 ptw. */ - ARMMMUIdx_Stage2_S =3D 10 | ARM_MMU_IDX_A, - ARMMMUIdx_Stage2 =3D 11 | ARM_MMU_IDX_A, + ARMMMUIdx_Stage2_S =3D 16 | ARM_MMU_IDX_A, + ARMMMUIdx_Stage2 =3D 17 | ARM_MMU_IDX_A, =20 /* TLBs with 1-1 mapping to the physical address spaces. */ - ARMMMUIdx_Phys_S =3D 12 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_NS =3D 13 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_Root =3D 14 | ARM_MMU_IDX_A, - ARMMMUIdx_Phys_Realm =3D 15 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_S =3D 18 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_NS =3D 19 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_Root =3D 20 | ARM_MMU_IDX_A, + ARMMMUIdx_Phys_Realm =3D 21 | ARM_MMU_IDX_A, =20 /* * These are not allocated TLBs and are used only for AT system @@ -164,6 +181,8 @@ typedef enum ARMMMUIdx { ARMMMUIdx_Stage1_E0 =3D 0 | ARM_MMU_IDX_NOTLB, ARMMMUIdx_Stage1_E1 =3D 1 | ARM_MMU_IDX_NOTLB, ARMMMUIdx_Stage1_E1_PAN =3D 2 | ARM_MMU_IDX_NOTLB, + ARMMMUIdx_Stage1_E0_GCS =3D 3 | ARM_MMU_IDX_NOTLB, + ARMMMUIdx_Stage1_E1_GCS =3D 4 | ARM_MMU_IDX_NOTLB, =20 /* * M-profile. @@ -187,13 +206,19 @@ typedef enum ARMMMUIdx { =20 typedef enum ARMMMUIdxBit { TO_CORE_BIT(E10_0), - TO_CORE_BIT(E20_0), + TO_CORE_BIT(E10_0_GCS), TO_CORE_BIT(E10_1), TO_CORE_BIT(E10_1_PAN), - TO_CORE_BIT(E2), + TO_CORE_BIT(E10_1_GCS), + TO_CORE_BIT(E20_0), + TO_CORE_BIT(E20_0_GCS), TO_CORE_BIT(E20_2), TO_CORE_BIT(E20_2_PAN), + TO_CORE_BIT(E20_2_GCS), + TO_CORE_BIT(E2), + TO_CORE_BIT(E2_GCS), TO_CORE_BIT(E3), + TO_CORE_BIT(E3_GCS), TO_CORE_BIT(E30_0), TO_CORE_BIT(E30_3_PAN), TO_CORE_BIT(Stage2), diff --git a/target/arm/helper.c b/target/arm/helper.c index c0e808a9e8..65f38727d6 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -420,7 +420,9 @@ int alle1_tlbmask(CPUARMState *env) */ return (ARMMMUIdxBit_E10_1 | ARMMMUIdxBit_E10_1_PAN | + ARMMMUIdxBit_E10_1_GCS | ARMMMUIdxBit_E10_0 | + ARMMMUIdxBit_E10_0_GCS | ARMMMUIdxBit_Stage2 | ARMMMUIdxBit_Stage2_S); } @@ -808,12 +810,17 @@ static void scr_write(CPUARMState *env, const ARMCPRe= gInfo *ri, uint64_t value) */ if (changed & (SCR_NS | SCR_NSE)) { tlb_flush_by_mmuidx(env_cpu(env), (ARMMMUIdxBit_E10_0 | + ARMMMUIdxBit_E10_0_GCS | ARMMMUIdxBit_E20_0 | + ARMMMUIdxBit_E20_0_GCS | ARMMMUIdxBit_E10_1 | - ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E10_1_PAN | + ARMMMUIdxBit_E10_1_GCS | + ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E20_2_PAN | - ARMMMUIdxBit_E2)); + ARMMMUIdxBit_E20_2_GCS | + ARMMMUIdxBit_E2 | + ARMMMUIdxBit_E2_GCS)); } } =20 @@ -2787,7 +2794,9 @@ static void vmsa_tcr_ttbr_el2_write(CPUARMState *env,= const ARMCPRegInfo *ri, (arm_hcr_el2_eff(env) & HCR_E2H)) { uint16_t mask =3D ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E20_2_PAN | - ARMMMUIdxBit_E20_0; + ARMMMUIdxBit_E20_2_GCS | + ARMMMUIdxBit_E20_0 | + ARMMMUIdxBit_E20_0_GCS; tlb_flush_by_mmuidx(env_cpu(env), mask); } raw_write(env, ri, value); diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 61a682e655..42b003db9c 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -15,22 +15,29 @@ #define USER R_MMUIDXINFO_USER_MASK #define S1 R_MMUIDXINFO_STAGE1_MASK #define S2 R_MMUIDXINFO_STAGE2_MASK +#define GCS R_MMUIDXINFO_GCS_MASK =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* * A-profile. */ [ARMMMUIdx_E10_0] =3D EL(0) | REL(1) | R2, + [ARMMMUIdx_E10_0_GCS] =3D EL(0) | REL(1) | R2 | GCS, [ARMMMUIdx_E10_1] =3D EL(1) | REL(1) | R2, [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2 | PAN, + [ARMMMUIdx_E10_1_GCS] =3D EL(1) | REL(1) | R2 | GCS, =20 [ARMMMUIdx_E20_0] =3D EL(0) | REL(2) | R2, + [ARMMMUIdx_E20_0_GCS] =3D EL(0) | REL(2) | R2 | GCS, [ARMMMUIdx_E20_2] =3D EL(2) | REL(2) | R2, [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2 | PAN, + [ARMMMUIdx_E20_2_GCS] =3D EL(2) | REL(2) | R2 | GCS, =20 [ARMMMUIdx_E2] =3D EL(2) | REL(2), + [ARMMMUIdx_E2_GCS] =3D EL(2) | REL(2) | GCS, =20 [ARMMMUIdx_E3] =3D EL(3) | REL(3), + [ARMMMUIdx_E3_GCS] =3D EL(3) | REL(3) | GCS, [ARMMMUIdx_E30_0] =3D EL(0) | REL(3), [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3) | PAN, =20 @@ -38,8 +45,10 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_Stage2] =3D REL(2) | S2, =20 [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | S1 | USER, + [ARMMMUIdx_Stage1_E0_GCS] =3D REL(1) | R2 | S1 | USER | GCS, [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2 | S1, [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | S1 | PAN, + [ARMMMUIdx_Stage1_E1_GCS] =3D REL(1) | R2 | S1 | GCS, =20 /* * M-profile. diff --git a/target/arm/ptw.c b/target/arm/ptw.c index b72c1fc348..16ca2b6187 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -166,6 +166,10 @@ ARMMMUIdx stage_1_mmu_idx(ARMMMUIdx mmu_idx) return ARMMMUIdx_Stage1_E1; case ARMMMUIdx_E10_1_PAN: return ARMMMUIdx_Stage1_E1_PAN; + case ARMMMUIdx_E10_0_GCS: + return ARMMMUIdx_Stage1_E0_GCS; + case ARMMMUIdx_E10_1_GCS: + return ARMMMUIdx_Stage1_E1_GCS; default: return mmu_idx; } @@ -273,8 +277,10 @@ static bool regime_translation_disabled(CPUARMState *e= nv, ARMMMUIdx mmu_idx, return (hcr_el2 & (HCR_DC | HCR_VM)) =3D=3D 0; =20 case ARMMMUIdx_E10_0: + case ARMMMUIdx_E10_0_GCS: case ARMMMUIdx_E10_1: case ARMMMUIdx_E10_1_PAN: + case ARMMMUIdx_E10_1_GCS: /* TGE means that EL0/1 act as if SCTLR_EL1.M is zero */ hcr_el2 =3D arm_hcr_el2_eff_secstate(env, space); if (hcr_el2 & HCR_TGE) { @@ -283,8 +289,10 @@ static bool regime_translation_disabled(CPUARMState *e= nv, ARMMMUIdx mmu_idx, break; =20 case ARMMMUIdx_Stage1_E0: + case ARMMMUIdx_Stage1_E0_GCS: case ARMMMUIdx_Stage1_E1: case ARMMMUIdx_Stage1_E1_PAN: + case ARMMMUIdx_Stage1_E1_GCS: /* HCR.DC means SCTLR_EL1.M behaves as 0 */ hcr_el2 =3D arm_hcr_el2_eff_secstate(env, space); if (hcr_el2 & HCR_DC) { @@ -293,10 +301,14 @@ static bool regime_translation_disabled(CPUARMState *= env, ARMMMUIdx mmu_idx, break; =20 case ARMMMUIdx_E20_0: + case ARMMMUIdx_E20_0_GCS: case ARMMMUIdx_E20_2: case ARMMMUIdx_E20_2_PAN: + case ARMMMUIdx_E20_2_GCS: case ARMMMUIdx_E2: + case ARMMMUIdx_E2_GCS: case ARMMMUIdx_E3: + case ARMMMUIdx_E3_GCS: case ARMMMUIdx_E30_0: case ARMMMUIdx_E30_3_PAN: break; @@ -3766,15 +3778,22 @@ arm_mmu_idx_to_security_space(CPUARMState *env, ARM= MMUIdx mmu_idx) =20 switch (mmu_idx) { case ARMMMUIdx_E10_0: + case ARMMMUIdx_E10_0_GCS: case ARMMMUIdx_E10_1: case ARMMMUIdx_E10_1_PAN: + case ARMMMUIdx_E10_1_GCS: case ARMMMUIdx_E20_0: + case ARMMMUIdx_E20_0_GCS: case ARMMMUIdx_E20_2: case ARMMMUIdx_E20_2_PAN: + case ARMMMUIdx_E20_2_GCS: case ARMMMUIdx_Stage1_E0: + case ARMMMUIdx_Stage1_E0_GCS: case ARMMMUIdx_Stage1_E1: case ARMMMUIdx_Stage1_E1_PAN: + case ARMMMUIdx_Stage1_E1_GCS: case ARMMMUIdx_E2: + case ARMMMUIdx_E2_GCS: ss =3D arm_security_space_below_el3(env); break; case ARMMMUIdx_Stage2: @@ -3803,6 +3822,7 @@ arm_mmu_idx_to_security_space(CPUARMState *env, ARMMM= UIdx mmu_idx) ss =3D ARMSS_Secure; break; case ARMMMUIdx_E3: + case ARMMMUIdx_E3_GCS: case ARMMMUIdx_E30_0: case ARMMMUIdx_E30_3_PAN: if (arm_feature(env, ARM_FEATURE_AARCH64) && diff --git a/target/arm/tcg/tlb-insns.c b/target/arm/tcg/tlb-insns.c index 95c26c6d46..1a0a332583 100644 --- a/target/arm/tcg/tlb-insns.c +++ b/target/arm/tcg/tlb-insns.c @@ -149,7 +149,8 @@ static void tlbimva_hyp_write(CPUARMState *env, const A= RMCPRegInfo *ri, CPUState *cs =3D env_cpu(env); uint64_t pageaddr =3D value & ~MAKE_64BIT_MASK(0, 12); =20 - tlb_flush_page_by_mmuidx(cs, pageaddr, ARMMMUIdxBit_E2); + tlb_flush_page_by_mmuidx(cs, pageaddr, + ARMMMUIdxBit_E2 | ARMMMUIdxBit_E2_GCS); } =20 static void tlbimva_hyp_is_write(CPUARMState *env, const ARMCPRegInfo *ri, @@ -159,7 +160,8 @@ static void tlbimva_hyp_is_write(CPUARMState *env, cons= t ARMCPRegInfo *ri, uint64_t pageaddr =3D value & ~MAKE_64BIT_MASK(0, 12); =20 tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr, - ARMMMUIdxBit_E2); + ARMMMUIdxBit_E2 | + ARMMMUIdxBit_E2_GCS); } =20 static void tlbiipas2_hyp_write(CPUARMState *env, const ARMCPRegInfo *ri, @@ -202,7 +204,7 @@ static void tlbiall_hyp_write(CPUARMState *env, const A= RMCPRegInfo *ri, { CPUState *cs =3D env_cpu(env); =20 - tlb_flush_by_mmuidx(cs, ARMMMUIdxBit_E2); + tlb_flush_by_mmuidx(cs, ARMMMUIdxBit_E2 | ARMMMUIdxBit_E2_GCS); } =20 static void tlbiall_hyp_is_write(CPUARMState *env, const ARMCPRegInfo *ri, @@ -210,7 +212,8 @@ static void tlbiall_hyp_is_write(CPUARMState *env, cons= t ARMCPRegInfo *ri, { CPUState *cs =3D env_cpu(env); =20 - tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_E2); + tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_E2 | + ARMMMUIdxBit_E2_GCS); } =20 /* @@ -228,12 +231,16 @@ static int vae1_tlbmask(CPUARMState *env) if ((hcr & (HCR_E2H | HCR_TGE)) =3D=3D (HCR_E2H | HCR_TGE)) { mask =3D ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E20_2_PAN | - ARMMMUIdxBit_E20_0; + ARMMMUIdxBit_E20_2_GCS | + ARMMMUIdxBit_E20_0 | + ARMMMUIdxBit_E20_0_GCS; } else { /* This is AArch64 only, so we don't need to touch the EL30_x TLBs= */ mask =3D ARMMMUIdxBit_E10_1 | ARMMMUIdxBit_E10_1_PAN | - ARMMMUIdxBit_E10_0; + ARMMMUIdxBit_E10_1_GCS | + ARMMMUIdxBit_E10_0 | + ARMMMUIdxBit_E10_0_GCS; } return mask; } @@ -246,13 +253,20 @@ static int vae2_tlbmask(CPUARMState *env) if (hcr & HCR_E2H) { mask =3D ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E20_2_PAN | - ARMMMUIdxBit_E20_0; + ARMMMUIdxBit_E20_2_GCS | + ARMMMUIdxBit_E20_0 | + ARMMMUIdxBit_E20_0_GCS; } else { - mask =3D ARMMMUIdxBit_E2; + mask =3D ARMMMUIdxBit_E2 | ARMMMUIdxBit_E2_GCS; } return mask; } =20 +static int vae3_tlbmask(void) +{ + return ARMMMUIdxBit_E3 | ARMMMUIdxBit_E3_GCS; +} + /* Return 56 if TBI is enabled, 64 otherwise. */ static int tlbbits_for_regime(CPUARMState *env, ARMMMUIdx mmu_idx, uint64_t addr) @@ -325,9 +339,12 @@ static void tlbi_aa64_vmalle1_write(CPUARMState *env, = const ARMCPRegInfo *ri, static int e2_tlbmask(CPUARMState *env) { return (ARMMMUIdxBit_E20_0 | + ARMMMUIdxBit_E20_0_GCS | ARMMMUIdxBit_E20_2 | ARMMMUIdxBit_E20_2_PAN | - ARMMMUIdxBit_E2); + ARMMMUIdxBit_E20_2_GCS | + ARMMMUIdxBit_E2 | + ARMMMUIdxBit_E2_GCS); } =20 static void tlbi_aa64_alle1_write(CPUARMState *env, const ARMCPRegInfo *ri, @@ -354,7 +371,7 @@ static void tlbi_aa64_alle3_write(CPUARMState *env, con= st ARMCPRegInfo *ri, ARMCPU *cpu =3D env_archcpu(env); CPUState *cs =3D CPU(cpu); =20 - tlb_flush_by_mmuidx(cs, ARMMMUIdxBit_E3); + tlb_flush_by_mmuidx(cs, vae3_tlbmask()); } =20 static void tlbi_aa64_alle1is_write(CPUARMState *env, const ARMCPRegInfo *= ri, @@ -380,7 +397,7 @@ static void tlbi_aa64_alle3is_write(CPUARMState *env, c= onst ARMCPRegInfo *ri, { CPUState *cs =3D env_cpu(env); =20 - tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_E3); + tlb_flush_by_mmuidx_all_cpus_synced(cs, vae3_tlbmask()); } =20 static void tlbi_aa64_vae2_write(CPUARMState *env, const ARMCPRegInfo *ri, @@ -411,7 +428,7 @@ static void tlbi_aa64_vae3_write(CPUARMState *env, cons= t ARMCPRegInfo *ri, CPUState *cs =3D CPU(cpu); uint64_t pageaddr =3D sextract64(value << 12, 0, 56); =20 - tlb_flush_page_by_mmuidx(cs, pageaddr, ARMMMUIdxBit_E3); + tlb_flush_page_by_mmuidx(cs, pageaddr, vae3_tlbmask()); } =20 static void tlbi_aa64_vae1is_write(CPUARMState *env, const ARMCPRegInfo *r= i, @@ -465,7 +482,7 @@ static void tlbi_aa64_vae3is_write(CPUARMState *env, co= nst ARMCPRegInfo *ri, int bits =3D tlbbits_for_regime(env, ARMMMUIdx_E3, pageaddr); =20 tlb_flush_page_bits_by_mmuidx_all_cpus_synced(cs, pageaddr, - ARMMMUIdxBit_E3, bits); + vae3_tlbmask(), bits); } =20 static int ipas2e1_tlbmask(CPUARMState *env, int64_t value) @@ -963,7 +980,7 @@ static void tlbi_aa64_rvae3_write(CPUARMState *env, * flush-last-level-only. */ =20 - do_rvae_write(env, value, ARMMMUIdxBit_E3, tlb_force_broadcast(env)); + do_rvae_write(env, value, vae3_tlbmask(), tlb_force_broadcast(env)); } =20 static void tlbi_aa64_rvae3is_write(CPUARMState *env, @@ -977,7 +994,7 @@ static void tlbi_aa64_rvae3is_write(CPUARMState *env, * flush-last-level-only or inner/outer specific flushes. */ =20 - do_rvae_write(env, value, ARMMMUIdxBit_E3, true); + do_rvae_write(env, value, vae3_tlbmask(), true); } =20 static void tlbi_aa64_ripas2e1_write(CPUARMState *env, const ARMCPRegInfo = *ri, --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568107; cv=none; d=zohomail.com; s=zohoarc; b=A+EjdyfZ1J+T3IdfSPVWKs3QjWlY1sCzYMHTeqIH4K5DA2NvQulI7jnYRpXz+dnt4ov5toIbxLHwyznNKu+gROl2htrcf8ehSf6BsAYfniFh8GcHs7BLCeaeN+rfOGr7jPH46FIi3TyefntAcuXmUNE0H1BPmm/O0fDXTGgMOgU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568107; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cr6Y93u/SVkcU+goxAfQSNSlnm3F8dUSxwzHBpcNsX8=; b=MFsgate6jr/aNn2461GAVd+9aE+XTHSQy+jqVrHLFu/ImsGNmD9+fr5tORmhpe7BIcPtz6vWTccV/5ehpUFQlG99XIztwxYxvtHTCViujkkENGfQC1D9Mt0hfh5cGzu0wd+hbnxefAHYsK2fW2CpcaVRtK0DXMxDTLqblJPDQa8= 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 1758568107061507.3476098572735; Mon, 22 Sep 2025 12:08:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcY-0005IF-8P; Mon, 22 Sep 2025 14:50:47 -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 1v0lc7-00052Z-0H for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:15 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lby-0004Qh-8y for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:14 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-77f41086c11so1129535b3a.0 for ; Mon, 22 Sep 2025 11:50:05 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567004; x=1759171804; darn=nongnu.org; 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=cr6Y93u/SVkcU+goxAfQSNSlnm3F8dUSxwzHBpcNsX8=; b=VOgvOkncEpCh/Nz0O8W9bbtqz8Ee//WHT1Le7RoNh1BaC/dOfVF/x4UdgOwqOyjM2Z n5k0L1C2B+55/ZHYrID9uJuiYYvmpq4h6cJrGi9fu0ct9yzcrOXGacbwYBwlvKVwg3wP twiIz+v8o1Ep2wxxOiKJrrvqGf0AFtpAHwQ6kMeDxUykedw60xmZwv53P5ZWuD9z9t3O WewqdBfSX/5fYEpNsMDxxX1zgS/OuGarKWm8EQHnvkvRdjEtVDonvu520CnaYDls3cI9 dCNIlSzVS+8H3upcKQhvggxtQxNp3OJTT8iRjtSoMUjCd5vhqLoCLJCiucBwYuyIgEqU FwUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567004; x=1759171804; 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=cr6Y93u/SVkcU+goxAfQSNSlnm3F8dUSxwzHBpcNsX8=; b=v7eFTnz22UDXcdJBJJLNGAHKkZ5hTRm10q/KHyzA+Hr2KWIYkzLLiLOpGYxZE6Gcja EuC+PIPAEhApmZsiSqUCEEK5WyTa3sjMf7y0K3K8pZ6b3PIVFzlrmbs9PBwnHmB900Es bqQs2+hYavAM00w6/5VNe+uHrc12HaaNHF/vC/mjtMVajvTwm21GH80nre9lZXY8eFGY M0e2vE2ctjkVBMpWiplwTQncHbFugwfcIpJ+0qgXiVA3y5tIVosb4ShJYYKtsT9KGv3B jCe/Xr2X1pecbHdWv0KCmBf5+wkxkBI55orxekS653E8uqDnixNA4V+rcMCGOgUGu9Vd em6w== X-Gm-Message-State: AOJu0Yze7+PivsABzHm+ivbfxweusPg9Ox9kDxKXalSsVUA6KkS9w/mC HUlF1ob557csEDwuwXevcIEn/7BJ1vtGzpom60loQT6LIr+1OJThRgZzK8RY98u9kpsBtfXp1j9 9ZBUK X-Gm-Gg: ASbGncugkNgKrpfKth5TGgk4ZCchuMLb124VXUpWzrZRqMOf9ykEqZj7h+YPCLEpZ+q 85hg4Nr0dqTUi8sQRE+I+xsnwDQP98e5Ws1oE7X9xQDVJn7jhsEv3+H8fvY1biETi9aUPwDPDF2 WlkqFu1l1PK5OyNojqsfGuNwJUsd8oE4wud8s+XrRUqrgLL0DBLWnXWsSmNspAR3S4T8ieU0IOt 5hHVBrjGSPbBEqmJO9U/l5gd9mmqZnZrOLpws/38Aui6OtVh/hht1/2W3pXmQPUAxgaoKiJSNM1 1BNn1UXy+DLtTV3NT6VgK1BI6Alo5Atc5MAqsw9R5OZH0t54PEbXbvfZ6/ae7s/H1uaEEYlAlqe FzUtsBiSv9Vrrj3OfxH3qd5+tFdd6 X-Google-Smtp-Source: AGHT+IEnWNTw5Gv5E13H9j7z/1aw4obXtDacALhBQlZhTKLUE0f/Eg7SZ+7nOmjuhSlC9g9+aTcqIw== X-Received: by 2002:a05:6a20:72a4:b0:251:2a11:e61 with SMTP id adf61e73a8af0-2cfe7274da5mr134321637.17.1758567004374; Mon, 22 Sep 2025 11:50:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 31/76] target/arm: Introduce regime_to_gcs Date: Mon, 22 Sep 2025 11:48:39 -0700 Message-ID: <20250922184924.2754205-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568108291116600 Content-Type: text/plain; charset="utf-8" Add a lookup from any a64 mmu index to the gcs mmu index within the same translation regime. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/mmuidx-internal.h | 10 ++++++++++ target/arm/mmuidx.c | 24 +++++++++++++----------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index f494ec348d..962b053852 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -21,6 +21,7 @@ FIELD(MMUIDXINFO, USER, 8, 1) FIELD(MMUIDXINFO, STAGE1, 9, 1) FIELD(MMUIDXINFO, STAGE2, 10, 1) FIELD(MMUIDXINFO, GCS, 11, 1) +FIELD(MMUIDXINFO, TG, 12, 5) =20 extern const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8]; =20 @@ -100,4 +101,13 @@ static inline bool regime_is_gcs(ARMMMUIdx idx) return FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, GCS); } =20 +/* Return the GCS MMUIdx for a given regime. */ +static inline ARMMMUIdx regime_to_gcs(ARMMMUIdx idx) +{ + tcg_debug_assert(arm_mmuidx_is_valid(idx)); + uint32_t core =3D FIELD_EX32(arm_mmuidx_table[idx], MMUIDXINFO, TG); + tcg_debug_assert(core !=3D 0); /* core 0 is E10_0, not a GCS index */ + return core | ARM_MMU_IDX_A; +} + #endif /* TARGET_ARM_MMUIDX_INTERNAL_H */ diff --git a/target/arm/mmuidx.c b/target/arm/mmuidx.c index 42b003db9c..a4663c8d87 100644 --- a/target/arm/mmuidx.c +++ b/target/arm/mmuidx.c @@ -16,27 +16,29 @@ #define S1 R_MMUIDXINFO_STAGE1_MASK #define S2 R_MMUIDXINFO_STAGE2_MASK #define GCS R_MMUIDXINFO_GCS_MASK +#define TG(X) \ + ((ARMMMUIdx_##X##_GCS & ARM_MMU_IDX_COREIDX_MASK) << R_MMUIDXINFO_TG_S= HIFT) =20 const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { /* * A-profile. */ - [ARMMMUIdx_E10_0] =3D EL(0) | REL(1) | R2, + [ARMMMUIdx_E10_0] =3D EL(0) | REL(1) | R2 | TG(E10_0), [ARMMMUIdx_E10_0_GCS] =3D EL(0) | REL(1) | R2 | GCS, - [ARMMMUIdx_E10_1] =3D EL(1) | REL(1) | R2, - [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2 | PAN, + [ARMMMUIdx_E10_1] =3D EL(1) | REL(1) | R2 | TG(E10_1), + [ARMMMUIdx_E10_1_PAN] =3D EL(1) | REL(1) | R2 | TG(E10_1) | PAN, [ARMMMUIdx_E10_1_GCS] =3D EL(1) | REL(1) | R2 | GCS, =20 - [ARMMMUIdx_E20_0] =3D EL(0) | REL(2) | R2, + [ARMMMUIdx_E20_0] =3D EL(0) | REL(2) | R2 | TG(E20_0), [ARMMMUIdx_E20_0_GCS] =3D EL(0) | REL(2) | R2 | GCS, - [ARMMMUIdx_E20_2] =3D EL(2) | REL(2) | R2, - [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2 | PAN, + [ARMMMUIdx_E20_2] =3D EL(2) | REL(2) | R2 | TG(E20_2), + [ARMMMUIdx_E20_2_PAN] =3D EL(2) | REL(2) | R2 | TG(E20_2) | PAN, [ARMMMUIdx_E20_2_GCS] =3D EL(2) | REL(2) | R2 | GCS, =20 - [ARMMMUIdx_E2] =3D EL(2) | REL(2), + [ARMMMUIdx_E2] =3D EL(2) | REL(2) | TG(E2), [ARMMMUIdx_E2_GCS] =3D EL(2) | REL(2) | GCS, =20 - [ARMMMUIdx_E3] =3D EL(3) | REL(3), + [ARMMMUIdx_E3] =3D EL(3) | REL(3) | TG(E3), [ARMMMUIdx_E3_GCS] =3D EL(3) | REL(3) | GCS, [ARMMMUIdx_E30_0] =3D EL(0) | REL(3), [ARMMMUIdx_E30_3_PAN] =3D EL(3) | REL(3) | PAN, @@ -44,10 +46,10 @@ const uint32_t arm_mmuidx_table[ARM_MMU_IDX_M + 8] =3D { [ARMMMUIdx_Stage2_S] =3D REL(2) | S2, [ARMMMUIdx_Stage2] =3D REL(2) | S2, =20 - [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | S1 | USER, + [ARMMMUIdx_Stage1_E0] =3D REL(1) | R2 | S1 | USER | TG(Stage1_E0= ), [ARMMMUIdx_Stage1_E0_GCS] =3D REL(1) | R2 | S1 | USER | GCS, - [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2 | S1, - [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | S1 | PAN, + [ARMMMUIdx_Stage1_E1] =3D REL(1) | R2 | S1 | TG(Stage1_E1), + [ARMMMUIdx_Stage1_E1_PAN] =3D REL(1) | R2 | S1 | TG(Stage1_E1) | PAN, [ARMMMUIdx_Stage1_E1_GCS] =3D REL(1) | R2 | S1 | GCS, =20 /* --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567102; cv=none; d=zohomail.com; s=zohoarc; b=nrEerHRkPwRrfPjrp35ntTyX4TvyixvGeI7UyZE1aFevKR141HTO30aSd/MO07fYx0QaBmx89MNjyKa4tBY1bynat+7dvstY3QgZSUZhLRpv1wP6ZYoMb6L/8Ke0ZBEz0+wapqwEHgFIhc3equRj/AFhXWWcBRePxFdhJTwuTtE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567102; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ePluHC0H/NP5Mr3iGwvDk85qezCPg64S4ISl6e9Zi/A=; b=aXl3WcTD+lzsBVRhAT2O/lBy8YzDgcqpH0GM9gfu415/qiEvT4G6f+d0uFKOquCkhY5Eeq2kcJ1Z9Yi8pPi56n92dirzwRyiIpxb5qU1PtQ6cBzwKiQiC/U6+pK7gfjbTFVwx67u552gHt0FTFanzzN9JvFe1I/W0KtoX50POJc= 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 1758567102738477.0329626610354; Mon, 22 Sep 2025 11:51:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcq-0005hM-0G; Mon, 22 Sep 2025 14:51:00 -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 1v0lcD-00059v-Or for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:21 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lby-0004R8-SU for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:21 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-77f35113821so1180760b3a.0 for ; Mon, 22 Sep 2025 11:50:06 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567005; x=1759171805; darn=nongnu.org; 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=ePluHC0H/NP5Mr3iGwvDk85qezCPg64S4ISl6e9Zi/A=; b=e302XKQG3JBdA35jxSU00tuIHvF3OcwwGQR+KIIr+onwM3Eu3Fy05IfebnxnszQrAh IRz+Xo35R7kye+vCCWfos/WJJzQ9gH92E9Jtz+9MikwJFEpP5y40Z6pe/bv5gFu55nmQ GfgbH1W9bnEbi5w1iBNUl8CZ9Lv4FWRgtBZJ0dx8iruG/MlUc1xLHQVexp3Wm0Bl6j0F Dhe8h+3cyXgTsHkFoSHt2cNyEg2pwWqtVmoL8lCxTr6ZzNJw7wOfyk9wzf295JPOShew xjckfwzQYwmi5qAcz+KYWcBvQMn1bxALnGt0D3cyIe2ibmu/YL+Nn2wcz/yHBnxyo/SI VWhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567005; x=1759171805; 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=ePluHC0H/NP5Mr3iGwvDk85qezCPg64S4ISl6e9Zi/A=; b=BKb0VOmLHXWZNRYQ5oGVwDP5RW1eBoPOcZoZWkWtLp/GSAvi73sSlXpPFG3zRwYJxL xrUAfltQLGaemLKiuKbKr++c7gFrrNv1WFp8wVad8JumnFVtBYydT6FlvEMvioOiQ86f NGZbwcr9EM7GZH8Kp3A7IB+9x6F2fIckhblplJwsuh4TcUx8CG+jjXyKKIsS6oiYGz9+ 1t1nF09abCo3X8Oe5IQH/fkF9g5BL116yuhfvmTIjLa5QWZJoP8F+HHx7Zqi00RPkRdv uZIyCts3MzCQqCTMA0QeWizhQZsHZs5l8svwvhiZr27BjAVCU6wvBLBIcpQ6iMuDVOU+ 2zOA== X-Gm-Message-State: AOJu0YwsX+X/CutOZNz5N56go4jLtIRM8qL8J+EWaEM2RK56RHj8CyHL Cj1mVS5u9MmW/NZQlIn0MfOxjFtIRSFrJxhgyeJ2v7AnGbQ7OUaU9jdeL3iEZ79tQMVGefvu++0 hXkZI X-Gm-Gg: ASbGncttW5rgPXj6KevzRt7VznCMBTaPwb2gM5EI3Lqz5jHZ/itHe0WinwmOxTKiuXt OJsYtX+9DHWlKGaqm5BEGRruEHUHTSGMzwEFSziNX+heGd7Kz0QiADsgiXA49Tr9lnbtKZNllcE Qhc+JKT+tMbc4r6iMKegC0XGPxbNHrDP62+Qv9mZHgCBUR/HcmbPcint/IRpQ/DyhEkdvmZP8uO Xwv/cWcaZjM2xAhj8n96b/YoKM/eaeLiwkDt3oIoqJ2XPljzhAiV4yhvXgEsoRV3gqTwSu1bBoE Lf++Gt/mZgOwenLPpziatCsc+RVswWp2l8nlVkrQOBSqfZwWT9bCpdYa7imqniZcBEst/tyHwDz q6C7hMO9OxYQS+YH37/ZlLDUg4MZk X-Google-Smtp-Source: AGHT+IGznF8vcVQNXZl4n9D3ByK1OCWQV3jQPV9q8x3fqNxGF0QHJqlcnKvu+5n4I0uMT/aiD2DANg== X-Received: by 2002:a05:6a00:1887:b0:77f:1a7e:7bc0 with SMTP id d2e1a72fcca58-77f1a7e85b8mr10602472b3a.31.1758567005232; Mon, 22 Sep 2025 11:50:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 32/76] target/arm: Support page protections for GCS mmu indexes Date: Mon, 22 Sep 2025 11:48:40 -0700 Message-ID: <20250922184924.2754205-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567105211116600 Content-Type: text/plain; charset="utf-8" Take read and write from the s1perms.gcs bit computed by the Arm pseudocode. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/ptw.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 16ca2b6187..bfa0aeb4c0 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -1583,12 +1583,16 @@ static int get_S1prot_indirect(CPUARMState *env, S1= Translate *ptw, } } =20 - if (perm & PAGE_WXN) { + if (regime_is_gcs(mmu_idx)) { + /* + * Note that the one s1perms.gcs bit controls both read and write + * access via AccessType_GCS. See AArch64.S1CheckPermissions. + */ + perm =3D (perm & PAGE_GCS ? PAGE_READ | PAGE_WRITE : 0); + } else if (perm & PAGE_WXN) { perm &=3D ~PAGE_EXEC; } =20 - /* TODO: FEAT_GCS */ - return perm & PAGE_RWX; } =20 @@ -2241,6 +2245,13 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1T= ranslate *ptw, */ prot =3D get_S1prot_indirect(env, ptw, mmu_idx, pi, po, result->f.attrs.space, out_space); + } else if (regime_is_gcs(mmu_idx)) { + /* + * While one must use indirect permissions to successfully + * use GCS instructions, AArch64.S1DirectBasePermissions + * faithfully supplies s1perms.gcs =3D 0, Just In Case. + */ + prot =3D 0; } else { int xn =3D extract64(attrs, 54, 1); int pxn =3D extract64(attrs, 53, 1); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567287; cv=none; d=zohomail.com; s=zohoarc; b=OmuZ+7PpI9X+XUZzH2G5GgyEIdEjY00ClHirsQOcLt0ufVmMBE97NTBDbxs/tEbeUdfaWL1QGxhCZ5WUCPlOhwvkMWVX9gKEUZRyyWhJwMvP/SDBxocK0b6AooWrfibFPBNh5p0UEGUuXuO64DYFDidtvLRvGTBGb5udsk9CQMo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567287; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZnGv3gaWQ9shrmt0WGxn8YCEO4EdUIFI2jl/MhJPR7Y=; b=lq3kh4CizL9NRfCr8ps+bgAE+52IXAM5UwxdopWyf2216xrqyEs7FnOEy0/BOOYF8WWXgSHgCeOYn9OK8QDdpYiJl7TnEhMxHEbpxDVXUHs+4MXSTT0ZKuRFEUwk27ILwwQrrDLhgI8DFfXY9g+M8wSwpXreTDSultgy3r08tfs= 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 1758567287341165.90148369193662; Mon, 22 Sep 2025 11:54:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldM-0006GO-7C; Mon, 22 Sep 2025 14:51: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 1v0lcF-0005Bl-MS for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:23 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc0-0004RZ-Ua for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:23 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-77f207d0891so1613686b3a.1 for ; Mon, 22 Sep 2025 11:50:08 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567006; x=1759171806; darn=nongnu.org; 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=ZnGv3gaWQ9shrmt0WGxn8YCEO4EdUIFI2jl/MhJPR7Y=; b=k6ZOlvw3H0ATNwAcOfu/bi3TvucMr61bFVYkX8gInH1Jpp2DPpL1ISROFzY+yQozSp jASUGZeVygfXNHe6Mcoqpu0lqcYR0Azj4Egcrttt3b5ItkNygZ4DHzcD88jHeCCHaCqR 6VTWfV3J/BKvaN6AZOlm7BZ4dvDkMWUVZPZzIf+xOR0V6uCR/D0sqvngCj/o5965P8vi OwxudtCelAZgJhvoXiM2jFAoonMfV7H/mcK2EvWNHAJBmEt75srrJIsSGGMjJmttV/FL 773KefrXCpRhqzPOV2K39voPgtuCrn33TBn1RwhSg+f4ZshuUjLHM2PHufE0lrNTEplh 89+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567006; x=1759171806; 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=ZnGv3gaWQ9shrmt0WGxn8YCEO4EdUIFI2jl/MhJPR7Y=; b=PWS+x+juPZGxDNgrbppJlucPgdw5bThO/52f1QQ9UG/CT9Srj2uWfNEsTjQCneJcwd n0PBe3RVdUorOoUTCQhLhxoDx5+o3wBwG5nsITVx1rAvPAz9XTSVEbTIhvlZkEj3+CVL npJwq2QbRQMixfkXcCT8KqIZkLLovsxncNZDJvA9Y5yILHwFC6taZhhLZkBfBNLVTR1t UH8dGQ0YsOSXIc4ju7U+Lv+9YXMcmStpFZt6d59wLpuBESBiwC+DYGuRUdc8m7vZLN+d 0sXYSOHuxpTPenucd7QnrVdnz0eLO82a9SMU08fVq077x7tt1UY/6wUBsD1gQHd50r0j KPsA== X-Gm-Message-State: AOJu0YwrLXrZwjnjR2124dOqeGB15X4Agjh98GMbqc4Fw/0IitBpJ24i sp7Tjmc4IaWSI0G4wBdAObeVfxXUfk6Ir+qIxQsI1MEUPvOWf9OLbDBgbGgL76EyKVIyRLWBtvV ukWgV X-Gm-Gg: ASbGnctcQPfinJyKTVnmtaC1oCAOHazfgvEVtq+vPXF5UG75AlzgJeJcn4ze+7Bx1Z+ q9+gkO/X25kPr8SLo/IbATrLVBJeBDmNSjyqFxGqfRga5QocurDzDG3OYSj1rEEsX016GyfWOZ4 5/8crLS98nMTw7CnnF0d6x5L3Y590p5TmJK+zKbPU5WicS3qoNaCfnY2sa6X/M9PJbohzNg4xEI sefrkgrbQ/uk0Z8zzL2F7fKZhnVc6hylVe4AcnlvMZxQSuhkYTjzVrA6RxVS/KskUkUBo96z7Ro dunClUczWHInX4CBDeHDKeqlYE5dS8HhmNgFyZwK6O/17RDooD9imLgXNptadZGaWnt4QBGksYh 0RxThiTxbLJgQNSjx2O79QsMNgyFx X-Google-Smtp-Source: AGHT+IGQn/pmUoSuCSHB68LMbuj1TsTo6DC/hLuJCFO0CWSLw1G/JGLa3m7iot/J07QDqTKTEodUAw== X-Received: by 2002:a05:6a20:748d:b0:24f:22af:ea26 with SMTP id adf61e73a8af0-2cfed265622mr139473637.45.1758567006371; Mon, 22 Sep 2025 11:50:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 33/76] target/arm: Implement gcs bit for data abort Date: Mon, 22 Sep 2025 11:48:41 -0700 Message-ID: <20250922184924.2754205-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567288308116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/tlb_helper.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/tlb_helper.c b/target/arm/tcg/tlb_helper.c index ae2acd6727..f1983a5732 100644 --- a/target/arm/tcg/tlb_helper.c +++ b/target/arm/tcg/tlb_helper.c @@ -28,7 +28,7 @@ static inline uint64_t merge_syn_data_abort(uint32_t temp= late_syn, ARMMMUFaultInfo *fi, unsigned int target_el, bool same_el, bool is_write, - int fsc) + int fsc, bool gcs) { uint64_t syn; =20 @@ -78,6 +78,7 @@ static inline uint64_t merge_syn_data_abort(uint32_t temp= late_syn, =20 /* Form ISS2 at the top of the syndrome. */ syn |=3D (uint64_t)fi->dirtybit << 37; + syn |=3D (uint64_t)gcs << 40; =20 return syn; } @@ -252,9 +253,10 @@ void arm_deliver_fault(ARMCPU *cpu, vaddr addr, syn =3D syn_insn_abort(same_el, fi->ea, fi->s1ptw, fsc); exc =3D EXCP_PREFETCH_ABORT; } else { + bool gcs =3D regime_is_gcs(core_to_arm_mmu_idx(env, mmu_idx)); syn =3D merge_syn_data_abort(env->exception.syndrome, fi, target_e= l, same_el, access_type =3D=3D MMU_DATA_ST= ORE, - fsc); + fsc, gcs); if (access_type =3D=3D MMU_DATA_STORE && arm_feature(env, ARM_FEATURE_V6)) { fsr |=3D (1 << 11); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567177; cv=none; d=zohomail.com; s=zohoarc; b=inVLwAu1Ax+Jg/ikddCEBrtHDXkUbN/TFKvOaz+FXEMf8WpWyxHHBq3gwiMdBZfrJQ4mpiP8LupJEyQCp1vVX0OK8BUKEhwZ6O9Na8k0QVZZvKKDK/cjjQiXVUc9NRHZaYURW26Y3/JhcTcWxDG0wVDAgbQGQPGPAbi6lkxOvzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567177; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PZG8tt3GkG0LL7r1QL+TX6+QxMb7w4gNUJqKBL4V2zQ=; b=WYY8IK09urWaqvP6eWfH4WacH/wirVls8cYSxpOtlhymB/MH21PlY02TzmIdOEOWlru4YTBXnRpSM3h12EG2+0Odf38/tWxWtHt6zJHzvAL44+6lOVbvBdgYVA6geNkdDAnxeL0qL6qrB0nuMEaLQKlLoaEkC6fvuBk9Kvg03Jc= 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 1758567177197528.9056346544382; Mon, 22 Sep 2025 11:52:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldE-000613-05; Mon, 22 Sep 2025 14:51:28 -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 1v0lcF-0005An-8s for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:23 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc0-0004Rq-SJ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:22 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-77f22902b46so1875214b3a.0 for ; Mon, 22 Sep 2025 11:50:08 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567007; x=1759171807; darn=nongnu.org; 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=PZG8tt3GkG0LL7r1QL+TX6+QxMb7w4gNUJqKBL4V2zQ=; b=JTJhs/blFJ3pIZja4Wn82cuuCLyfMfVWW0dal1hKgrjPMXpu2aqs9inTskUgALnsp0 rL6/yjZphpitrd1pjC98lfTxOeH4EREymI0pHCWkiOygW6m9rPs9LDeTj5aZecFO7VuO XBSfr4VDFuYMHdiuogsMkQNdqdFLLpK5NYzGVVB+EzKeX1FcVTZ7SxdVohQ+S9pu3Tmk IkEFoaB+bE5Q+XRcli+DBX4lWCClH22Gjcq+FYTi9deHu82GgMa+HzZehPz0nwB84Umt C2sD15cPlR0zkOSmAr2hcyrcBfn7iUcWP+FEBqB/zHOENBtfyZ4NRQ9/NcwPdeOjrNpo 6OmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567007; x=1759171807; 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=PZG8tt3GkG0LL7r1QL+TX6+QxMb7w4gNUJqKBL4V2zQ=; b=J6jxCeK3FttJMh5XANMZ2GY7XTumTV9Qs1+/uvUkobyEaRWSQRrARppHwPYzWvaM4t Bl1mQdV6Dts6yHaGDn5Hbt680/PSROb0BD0Qmd5X5sJLGnTu/ujVQoepvFSOD5YQ+mwm kxbnKf4HuZY4f/N1JMgsuuA7mA6XTfBzZkzB6Xl/U7H1QC5YWGJtGhMJcNQNzkbL7bnF /NLP6DjOvutgynefap3+3401KZrqSwMEMFei1ZjvbB0X0k2PC3G959HN0iu5YKwl4Cr6 EwrFAf/UF2N1iwcUs6fpwXMR1BReLIM8txYYW19W2XR53sCVeVlq4oF+GvVhO3L9BNWq mXrA== X-Gm-Message-State: AOJu0YyxZ9SYTWT5yFxbS9qnPAol+KSALmpUwQLWnbAmcfqzDMeZUUbo yxd+hRKLQAv0gA1KsUiuw4WdQ1/1iKfTRsals4bMpjsBNfTk/pAMRpkIKzCT9luRktu4N3T1gjX QLo2n X-Gm-Gg: ASbGncsdFQ/OMZk5qw/DiyoVyRjEasnDC7cL2c6RmcZY+pBBSoTRt5Ha16sTOEZpylK cgt+hUc20Qu0q1jPwJNbasQUTsTzDkWetJxsBtwwtZS8wOHTJLnXBlgLPoN7gN2aw8kd8jtGc4N Qpk/rJv6BlHbyhY7FpWryWiYsoUM/V3hVfHr1+E9qZz+r8s+rybMEd3P9Lu4KZQUJW5FBmJ7139 DLhhz7qkNOO9HHkvrdTjNK6BiF1TZtq4b/h8XTi2jOFfGNflQQq1YkEO5ASqbwzIpwXoP1EF1I7 9SGR4H0r+HZVJKFYhI7A2WEzhHH3zxg7V7Gnao1eW/BSesDqlTm78VcmpZ5/up9Qi4H3YrENsvT ZUm2jvC09qxjDvZQaCEk0hXDz6GQD X-Google-Smtp-Source: AGHT+IGG1LGiVwHMqg1F6Biy18toEegJr3QKZIMhN4qM+K6EC9EGKetv8/DNLK339O/VGEc9hjfZBQ== X-Received: by 2002:a05:6a20:7d8b:b0:262:c083:bb45 with SMTP id adf61e73a8af0-2d0160a49bcmr66675637.37.1758567007148; Mon, 22 Sep 2025 11:50:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 34/76] target/arm: Add GCS cpregs Date: Mon, 22 Sep 2025 11:48:42 -0700 Message-ID: <20250922184924.2754205-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567179157116600 Content-Type: text/plain; charset="utf-8" Add isar_feature_aa64_gcs. Enable SCR_GCSEN in scr_write. Enable HCRX_GCSEN in hcrx_write. Default HCRX_GCSEN on if EL2 disabled. Add the GCSCR* and GCSPR* registers. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 2 + target/arm/cpu-features.h | 5 +++ target/arm/cpu.h | 12 +++++ target/arm/internals.h | 3 ++ target/arm/cpregs-gcs.c | 95 +++++++++++++++++++++++++++++++++++++++ target/arm/cpu.c | 3 ++ target/arm/helper.c | 10 +++++ target/arm/meson.build | 2 + 8 files changed, 132 insertions(+) create mode 100644 target/arm/cpregs-gcs.c diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index f48c4df30f..bd2121a336 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -779,6 +779,8 @@ typedef enum FGTBit { DO_BIT(HFGRTR, VBAR_EL1), DO_BIT(HFGRTR, ICC_IGRPENN_EL1), DO_BIT(HFGRTR, ERRIDR_EL1), + DO_REV_BIT(HFGRTR, NGCS_EL0), + DO_REV_BIT(HFGRTR, NGCS_EL1), DO_REV_BIT(HFGRTR, NSMPRI_EL1), DO_REV_BIT(HFGRTR, NTPIDR2_EL0), DO_REV_BIT(HFGRTR, NPIRE0_EL1), diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 30226814bb..4a35cf6b69 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -729,6 +729,11 @@ static inline bool isar_feature_aa64_nmi(const ARMISAR= egisters *id) return FIELD_EX64_IDREG(id, ID_AA64PFR1, NMI) !=3D 0; } =20 +static inline bool isar_feature_aa64_gcs(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64PFR1, GCS) !=3D 0; +} + static inline bool isar_feature_aa64_tgran4_lpa2(const ARMISARegisters *id) { return FIELD_SEX64_IDREG(id, ID_AA64MMFR0, TGRAN4) >=3D 1; diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d5a45e9b43..14a08d2f99 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -580,6 +580,9 @@ typedef struct CPUArchState { =20 /* NV2 register */ uint64_t vncr_el2; + + uint64_t gcscr_el[4]; /* GCSCRE0_EL1, GCSCR_EL[123] */ + uint64_t gcspr_el[4]; /* GCSPR_EL[0123] */ } cp15; =20 struct { @@ -1717,6 +1720,7 @@ static inline void xpsr_write(CPUARMState *env, uint3= 2_t val, uint32_t mask) #define SCR_ENAS0 (1ULL << 36) #define SCR_ADEN (1ULL << 37) #define SCR_HXEN (1ULL << 38) +#define SCR_GCSEN (1ULL << 39) #define SCR_TRNDR (1ULL << 40) #define SCR_ENTP2 (1ULL << 41) #define SCR_TCR2EN (1ULL << 43) @@ -1725,6 +1729,14 @@ static inline void xpsr_write(CPUARMState *env, uint= 32_t val, uint32_t mask) #define SCR_GPF (1ULL << 48) #define SCR_NSE (1ULL << 62) =20 +/* GCSCR_ELx fields */ +#define GCSCR_PCRSEL (1ULL << 0) +#define GCSCR_RVCHKEN (1ULL << 5) +#define GCSCR_EXLOCKEN (1ULL << 6) +#define GCSCR_PUSHMEN (1ULL << 8) +#define GCSCR_STREN (1ULL << 9) +#define GCSCRE0_NTR (1ULL << 10) + /* Return the current FPSCR value. */ uint32_t vfp_get_fpscr(CPUARMState *env); void vfp_set_fpscr(CPUARMState *env, uint32_t val); diff --git a/target/arm/internals.h b/target/arm/internals.h index dc6bf3548e..f72e95a5ba 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -251,6 +251,7 @@ FIELD(VSTCR, SA, 30, 1) #define HCRX_MSCEN (1ULL << 11) #define HCRX_TCR2EN (1ULL << 14) #define HCRX_SCTLR2EN (1ULL << 15) +#define HCRX_GCSEN (1ULL << 22) =20 #define HPFAR_NS (1ULL << 63) =20 @@ -1778,6 +1779,8 @@ void define_tlb_insn_regs(ARMCPU *cpu); void define_at_insn_regs(ARMCPU *cpu); /* Add the cpreg definitions for PM cpregs */ void define_pm_cpregs(ARMCPU *cpu); +/* Add the cpreg definitions for GCS cpregs */ +void define_gcs_cpregs(ARMCPU *cpu); =20 /* Effective value of MDCR_EL2 */ static inline uint64_t arm_mdcr_el2_eff(CPUARMState *env) diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c new file mode 100644 index 0000000000..1ff041811d --- /dev/null +++ b/target/arm/cpregs-gcs.c @@ -0,0 +1,95 @@ +/* + * QEMU ARM CP Register GCS regiters and instructions + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/timer.h" +#include "exec/icount.h" +#include "hw/irq.h" +#include "cpu.h" +#include "cpu-features.h" +#include "cpregs.h" +#include "internals.h" + + +static CPAccessResult access_gcs(CPUARMState *env, const ARMCPRegInfo *ri, + bool isread) +{ + if (arm_current_el(env) < 3 + && arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_GCSEN)) { + return CP_ACCESS_TRAP_EL3; + } + return CP_ACCESS_OK; +} + +static CPAccessResult access_gcs_el0(CPUARMState *env, const ARMCPRegInfo = *ri, + bool isread) +{ + if (arm_current_el(env) =3D=3D 0 && !(env->cp15.gcscr_el[0] & GCSCRE0_= NTR)) { + return CP_ACCESS_TRAP_EL1; + } + return access_gcs(env, ri, isread); +} + +static void gcspr_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + /* + * Bits [2:0] are RES0, so we might as well clear them now, + * rather than upon each usage a-la GetCurrentGCSPointer. + */ + raw_write(env, ri, value & ~7); +} + +static const ARMCPRegInfo gcs_reginfo[] =3D { + { .name =3D "GCSCRE0_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 2, + .access =3D PL1_RW, .accessfn =3D access_gcs, .fgt =3D FGT_NGCS_EL0, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcscr_el[0]) }, + { .name =3D "GCSCR_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 0, + .access =3D PL1_RW, .accessfn =3D access_gcs, .fgt =3D FGT_NGCS_EL1, + .nv2_redirect_offset =3D 0x8d0 | NV2_REDIR_NV1, + .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 2, 5, 0), + .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 2, 5, 0), + .fieldoffset =3D offsetof(CPUARMState, cp15.gcscr_el[1]) }, + { .name =3D "GCSCR_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .crn =3D 2, .crm =3D 5, .opc2 =3D 0, + .access =3D PL2_RW, .accessfn =3D access_gcs, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcscr_el[2]) }, + { .name =3D "GCSCR_EL3", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 6, .crn =3D 2, .crm =3D 5, .opc2 =3D 0, + .access =3D PL3_RW, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcscr_el[3]) }, + + { .name =3D "GCSPR_EL0", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 3, .crn =3D 2, .crm =3D 5, .opc2 =3D 1, + .access =3D PL0_R | PL1_W, .accessfn =3D access_gcs_el0, + .fgt =3D FGT_NGCS_EL0, .writefn =3D gcspr_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcspr_el[0]) }, + { .name =3D "GCSPR_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 1, + .access =3D PL1_RW, .accessfn =3D access_gcs, + .fgt =3D FGT_NGCS_EL1, .writefn =3D gcspr_write, + .nv2_redirect_offset =3D 0x8c0 | NV2_REDIR_NV1, + .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 2, 5, 1), + .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 2, 5, 1), + .fieldoffset =3D offsetof(CPUARMState, cp15.gcspr_el[1]) }, + { .name =3D "GCSPR_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .crn =3D 2, .crm =3D 5, .opc2 =3D 1, + .access =3D PL2_RW, .accessfn =3D access_gcs, .writefn =3D gcspr_wri= te, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcspr_el[2]) }, + { .name =3D "GCSPR_EL3", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 6, .crn =3D 2, .crm =3D 5, .opc2 =3D 1, + .access =3D PL3_RW, .writefn =3D gcspr_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.gcspr_el[2]) }, +}; + +void define_gcs_cpregs(ARMCPU *cpu) +{ + if (cpu_isar_feature(aa64_gcs, cpu)) { + define_arm_cp_regs(cpu, gcs_reginfo); + } +} diff --git a/target/arm/cpu.c b/target/arm/cpu.c index d4bc2e6a92..aab7250399 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -629,6 +629,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int= target_el) if (cpu_isar_feature(aa64_fgt, cpu)) { env->cp15.scr_el3 |=3D SCR_FGTEN; } + if (cpu_isar_feature(aa64_gcs, cpu)) { + env->cp15.scr_el3 |=3D SCR_GCSEN; + } if (cpu_isar_feature(aa64_tcr2, cpu)) { env->cp15.scr_el3 |=3D SCR_TCR2EN; } diff --git a/target/arm/helper.c b/target/arm/helper.c index 65f38727d6..3b9e7a822e 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -766,6 +766,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegI= nfo *ri, uint64_t value) if (cpu_isar_feature(aa64_ecv, cpu)) { valid_mask |=3D SCR_ECVEN; } + if (cpu_isar_feature(aa64_gcs, cpu)) { + valid_mask |=3D SCR_GCSEN; + } if (cpu_isar_feature(aa64_tcr2, cpu)) { valid_mask |=3D SCR_TCR2EN; } @@ -3948,6 +3951,9 @@ static void hcrx_write(CPUARMState *env, const ARMCPR= egInfo *ri, if (cpu_isar_feature(aa64_sctlr2, cpu)) { valid_mask |=3D HCRX_SCTLR2EN; } + if (cpu_isar_feature(aa64_gcs, cpu)) { + valid_mask |=3D HCRX_GCSEN; + } =20 /* Clear RES0 bits. */ env->cp15.hcrx_el2 =3D value & valid_mask; @@ -4018,6 +4024,9 @@ uint64_t arm_hcrx_el2_eff(CPUARMState *env) if (cpu_isar_feature(aa64_sctlr2, cpu)) { hcrx |=3D HCRX_SCTLR2EN; } + if (cpu_isar_feature(aa64_gcs, cpu)) { + hcrx |=3D HCRX_GCSEN; + } return hcrx; } if (arm_feature(env, ARM_FEATURE_EL3) && !(env->cp15.scr_el3 & SCR_HXE= N)) { @@ -7247,6 +7256,7 @@ void register_cp_regs_for_features(ARMCPU *cpu) } =20 define_pm_cpregs(cpu); + define_gcs_cpregs(cpu); } =20 /* diff --git a/target/arm/meson.build b/target/arm/meson.build index 91630a1f72..8c82304fde 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -27,6 +27,7 @@ arm_user_ss.add(when: 'TARGET_AARCH64', if_false: files( 'cpu32-stubs.c', )) arm_user_ss.add(files( + 'cpregs-gcs.c', 'cpregs-pmu.c', 'debug_helper.c', 'helper.c', @@ -42,6 +43,7 @@ arm_common_system_ss.add(files( 'arch_dump.c', 'arm-powerctl.c', 'cortex-regs.c', + 'cpregs-gcs.c', 'cpregs-pmu.c', 'debug_helper.c', 'helper.c', --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568113; cv=none; d=zohomail.com; s=zohoarc; b=bomaD8Daxpxt+l7T4mlAkXt+PA6jRpYpbmBsPeZMzC3lMShaazd46ieIFZry1EyfW00vMlpVw6EPMTP9gKFmpiQzs22zLeyT78lkayOmEVRrgfp7kjQLQ7bbBtbqVehb6Cq2YLB3sOLoQvSId3x0NwEEx4+6z7ElXpqMvWrzMx4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568113; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ROsdZXnuVlBnAHIkqUiLa3UAcOkiroUyijSvpIgKCW8=; b=Is+Rj3BQPem8/Bs/JtW5zYy53eTysUaX8+JnxoDPKqWR3eDdXK6j43ha47NaAlGeT4B5mYY5kR43sRQKHFy5eiVZCvcN3DNw4wr+MB3NLTnazyP8hP2uNAuSs58B1E+oKilYBo9rRhh5C9y73PRk/4I9KroXa0fvMHZ362Ub/g4= 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 1758568113069346.9775957597277; Mon, 22 Sep 2025 12:08:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldh-0006nA-0E; Mon, 22 Sep 2025 14:51:54 -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 1v0lcJ-0005IH-PK for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:31 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc1-0004SE-Sq for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:26 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-7761b83fd01so4390937b3a.3 for ; Mon, 22 Sep 2025 11:50:09 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567008; x=1759171808; darn=nongnu.org; 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=ROsdZXnuVlBnAHIkqUiLa3UAcOkiroUyijSvpIgKCW8=; b=YqCHjY/IyF8tidCZ4J8N2yIENUAFcwStOsXmjKBBTUStI8SgbeDAdJ/FMg4PCnwPT4 RP//63SKBZfGKJD0/8322dZvZo/ZD8IS4VpdpiRvftEQWyUtJrbKddyKexRz6ICkwP1R eylbJHK9MeW7xw/wYqLzz3dKm032szZs4GbjeQb/dRnIvPC1I/FvJ4/95uFrHk93axPF KDSMdvxRfM/sH6ihFoSSvOk0f59U3LDErq19uaR0aMz2UTiARWd6qGLIkIiJ6m9biUoF eAgkWXDK3cwVqMx/kHxxZyZRU4CfF9KWT+o/wFUXDKbBj+Z+U7d8o5Vl5Kir7NByIIe/ E8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567008; x=1759171808; 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=ROsdZXnuVlBnAHIkqUiLa3UAcOkiroUyijSvpIgKCW8=; b=iRQD06So/68R2mA6+XpUFuHTkYU+m+UmQBEQk4gXv7nKLKfHfBL3Pr8YJ8CMrKDXHE u3MShYR/iXZJBGZs5VgYKZA9hZU9V6UEDAyPytQIuW9zw71yrcOJlJpfEOf8cwpooGpP jE+nPXz/1dKCiyNaMSzlzdW4a01w09m1qzHveDB351iu6oqwd6GqqckGasBu2Sce6znk KpMYJUhs8QD4c0JOmLUTzt2xiWv9PokVvusZ5qD0QcmAifZW6utx5Lgcul1GB1DmryLk Sdhil1nzq22NnNCe9Bfq9U68glIW4amBHnw+L5/HSNoyfcvp7dd3sqeLjtDx0WSt7krH +wyQ== X-Gm-Message-State: AOJu0YyKI9wvnbdhsh2JHXAaflaHdw+F4nZezhi9HYMeSsodF2eSI6IM m+4Q2QC9zQnAl7BQqU6rqyAc0J3A6CWg5wg8WPf5AdC7wAdzTUwfGGAqerwiR/XqS2D7qXp/EW4 OaqtU X-Gm-Gg: ASbGncux1EHdTl0K6cAsh75LA7QyRTai5/H0m853f7jUxSoqzIQTo966wruwHUQEjVZ A/aQrd7MmJNKnaSd0iEIyNAFMr5RsxVXhaejRNicJc+2voIzuPVxwZDyoDBd9mNCaYztNilP0PU q5se335zGqTtrh2SSnOc3XLF24qaEocUvnC3GHSONceIYTKn8Ux9nPiKMxql3AjBv739n2ESPAP PBPbvWQjRgwqGaaSMJR9G4lTGl72E+npC5A5YuoTXUy6/Q19iOfww/ZpgqJCkox1IWLjOTP2UWE 80S9rkhTcglNR6JdMQlPN1lmFkwpRVGxlkwdsUXCxTl0SiwPrveEcDuHk6URuQDf894jwSo/jeA MDBiyTROhJf5JxKuJhp1yBCBlGyD0DTGqoDA6pv8= X-Google-Smtp-Source: AGHT+IGps36nUI7xj837toxZMFQ22H6m9MglXwz75LX7CO/MaMYihYeURnwAe73udOhf8cLSygJyBA== X-Received: by 2002:a05:6a20:748f:b0:243:c6d1:7770 with SMTP id adf61e73a8af0-2cfece8b624mr113058637.43.1758567008183; Mon, 22 Sep 2025 11:50:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 35/76] target/arm: Add GCS enable and trap levels to DisasContext Date: Mon, 22 Sep 2025 11:48:43 -0700 Message-ID: <20250922184924.2754205-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568114440116600 Content-Type: text/plain; charset="utf-8" Pipe GCSEnabled, GCSReturnValueCheckEnabled, and CheckGCSSTREnabled through hflags to the translator. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu.h | 3 +++ target/arm/tcg/translate.h | 6 ++++++ target/arm/tcg/hflags.c | 38 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-a64.c | 3 +++ 4 files changed, 50 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 14a08d2f99..6a214557ac 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -2879,6 +2879,9 @@ FIELD(TBFLAG_A64, NV2_MEM_BE, 36, 1) FIELD(TBFLAG_A64, AH, 37, 1) /* FPCR.AH */ FIELD(TBFLAG_A64, NEP, 38, 1) /* FPCR.NEP */ FIELD(TBFLAG_A64, ZT0EXC_EL, 39, 2) +FIELD(TBFLAG_A64, GCS_EN, 41, 1) +FIELD(TBFLAG_A64, GCS_RVCEN, 42, 1) +FIELD(TBFLAG_A64, GCSSTR_EL, 43, 2) =20 /* * Helpers for using the above. Note that only the A64 accessors use diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index f1a6e5e2b6..761edded52 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -166,6 +166,12 @@ typedef struct DisasContext { bool fpcr_ah; /* True if FPCR.NEP is 1 (FEAT_AFP scalar upper-element result handlin= g) */ bool fpcr_nep; + /* True if GCSEnabled. */ + bool gcs_en; + /* True if GCSReturnValueCheckEnabled. */ + bool gcs_rvcen; + /* GCSSTR exception EL or 0 if enabled */ + uint8_t gcsstr_el; /* * >=3D 0, a copy of PSTATE.BTYPE, which will be 0 without v8.5-BTI. * < 0, set by the current instruction. diff --git a/target/arm/tcg/hflags.c b/target/arm/tcg/hflags.c index 17f83f13a4..5c9b9bec3b 100644 --- a/target/arm/tcg/hflags.c +++ b/target/arm/tcg/hflags.c @@ -451,6 +451,44 @@ static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *e= nv, int el, int fp_el, DP_TBFLAG_A64(flags, TCMA, aa64_va_parameter_tcma(tcr, mmu_idx)); } =20 + if (cpu_isar_feature(aa64_gcs, env_archcpu(env))) { + /* C.f. GCSEnabled */ + if (env->cp15.gcscr_el[el] & GCSCR_PCRSEL) { + switch (el) { + default: + if (!el_is_in_host(env, el) + && !(arm_hcrx_el2_eff(env) & HCRX_GCSEN)) { + break; + } + /* fall through */ + case 2: + if (arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_GCSEN)) { + break; + } + /* fall through */ + case 3: + DP_TBFLAG_A64(flags, GCS_EN, 1); + break; + } + } + + /* C.f. GCSReturnValueCheckEnabled */ + if (env->cp15.gcscr_el[el] & GCSCR_RVCHKEN) { + DP_TBFLAG_A64(flags, GCS_RVCEN, 1); + } + + /* C.f. CheckGCSSTREnabled */ + if (!(env->cp15.gcscr_el[el] & GCSCR_STREN)) { + DP_TBFLAG_A64(flags, GCSSTR_EL, el ? el : 1); + } else if (el =3D=3D 1 + && EX_TBFLAG_ANY(flags, FGT_ACTIVE) + && !FIELD_EX64(env->cp15.fgt_exec[FGTREG_HFGITR], + HFGITR_EL2, NGCSSTR_EL1)) { + DP_TBFLAG_A64(flags, GCSSTR_EL, 2); + } + } + if (env->vfp.fpcr & FPCR_AH) { DP_TBFLAG_A64(flags, AH, 1); } diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 6728e362b6..d5c41fbb3a 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -10344,6 +10344,9 @@ static void aarch64_tr_init_disas_context(DisasCont= extBase *dcbase, dc->nv2_mem_be =3D EX_TBFLAG_A64(tb_flags, NV2_MEM_BE); dc->fpcr_ah =3D EX_TBFLAG_A64(tb_flags, AH); dc->fpcr_nep =3D EX_TBFLAG_A64(tb_flags, NEP); + dc->gcs_en =3D EX_TBFLAG_A64(tb_flags, GCS_EN); + dc->gcs_rvcen =3D EX_TBFLAG_A64(tb_flags, GCS_RVCEN); + dc->gcsstr_el =3D EX_TBFLAG_A64(tb_flags, GCSSTR_EL); dc->vec_len =3D 0; dc->vec_stride =3D 0; dc->cp_regs =3D arm_cpu->cp_regs; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567112; cv=none; d=zohomail.com; s=zohoarc; b=LfZYgaG1efxpaIQRPQ3UCHfeJFBHetM6+QqDhs2FZUF5vZqqUeYm6Izp3MpXTXuCPeOGA1HyHFnhz7bPBGOzEi13dp95lQC2D5zSMKk5BhP/GzC659g3iDRNYi4kbj0MQq5sotMiHgIYhal8fjc02h6sNLekQWkVLjKz//azLIU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567112; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uYZVHQlk4d6HnzzfYjRHoTWH8habiT3aFxflfmcItEk=; b=Sd94E2uUR2gvsa9CczTtBqefO0++lsusMhA3JwqqmCSkjj6Z03IzdFpx4n7tu54Gv2q+jAD/M1PzmSnUVl7dVV3PzoyNG2cMhcC9L8yArA6W9oh52R3kr/Pvt9pBHk3tTyftb6XGFlzZfnxP+7BViwoB+cXwn1jOM4/KqqIJVy8= 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 1758567112725801.1081715038238; Mon, 22 Sep 2025 11:51:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldP-0006XU-M6; Mon, 22 Sep 2025 14:51:35 -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 1v0lcG-0005D9-Dp for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:24 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc2-0004SY-Hj for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:24 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-77f2c7ba550so1514888b3a.1 for ; Mon, 22 Sep 2025 11:50:09 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567009; x=1759171809; darn=nongnu.org; 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=uYZVHQlk4d6HnzzfYjRHoTWH8habiT3aFxflfmcItEk=; b=rbCrY69zejy/6oHU0Gw/Ugz25+YC2rav6oYt4ytD3V6n6EPKHXz1q+clLJlDIjH+5e ryzepMyFrq3jhJN9Scm6//p1x50XSON9G3mnP8GELfAZzjrzuKN5cw5hvp2nnOaywo5a mJcMSys25urYyvVlMRSNEwfZ0I0Fu+KvRQgTZnBHdQiFqaN4ug/mFuWgxY48bsiEPOG2 04tXhmLbvbXs892ZlQdLfcr5vUeNe4qC37k2n+se1dKSM0hXSti9IaHqeT95u6toXEn+ vMYCKpeA61aZ+mcmdCh945wD3fCx03I4yXnFCalE0cE1QB7K0TTlj9LW1m0Q7aV2DqxB aHVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567009; x=1759171809; 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=uYZVHQlk4d6HnzzfYjRHoTWH8habiT3aFxflfmcItEk=; b=UG31sepmcFtS4DcpfG6nPZttzwfZ9+V44LyHEy6O9bvX2xWJJ6gSC8bvKWCsECWlnw kyw08YCvSRzFqKEUhzYsfaBHqNxA+ICc3GJdfez9xqENXKv1rsfGNPbnNsaBL0nEwg58 ONEbXqK1EDSs6hwx7PefuJSvJZYJvcCWSzKDFs0ARTJqgxwSNvjMh6Mc1ejU7FLm++49 4tDM/qreeqIKiBezR9WUu7sY1JkLLdn3x/5fFNQADN/I7CNTRkpZxpDES32F9yGDgX7O Q9uN82nQDLLHiNRoC4A+tRrh4uw8DhvTZz2WjYKnXx4MK7m+FhHQJJjhLFx89jeRBeMH 4Zsw== X-Gm-Message-State: AOJu0Yy3ruaHavwWJHssMDypvfqW8IKze8seS9kG2MG852A3i+Q/iKwM ASluO7pRdGoVtgV3XMZ/OIuVM5sJQVlsN64d/zWD2d8JOTbGUynU8CT0G+Cbi3t5fRG8cRFOHv+ d7a8i X-Gm-Gg: ASbGnctxqLotZ9mTHHeSwlJKgIkXF68cVcwcfV73qcaOI9s2VErCOoM7y9rCFgyEaE0 sFLSQVNZhNEwzBq1PO07ut1ftUDie05sQ90XjRGffV/5/krn2U83/vui0DbgwcpahQ+Lp/NsB0y UF6iApRMQG9wPFwfsFcUY1dS1Si4n4cFTuN5NSCBk6dxCfaGjL8yXl+0I0PA5OqPDT6u/aLBmyR aw5M4Im2pnfnLj8dR6TdmiSqF7ao3wgKNA6EXvP6+QP2zhz8nh+aSzqk2Dp4aq71WybKlKY41p1 OQFLBzSWZ2s91gqM5z+iMDXrRqA1aq9upG1WU557kZFfdPk8PAoLcJoAG7oCwjIUWGB/pzzqpJD b010e6UpgeM0cf1+HXqMqqUv+A6Sk X-Google-Smtp-Source: AGHT+IHeCYVE2fKIw3lDFjoSLtDVbfyu3rBP9/LY5YhAbRcsSgiBt51+kURs+rCZKMcgL3qscD3K+w== X-Received: by 2002:a05:6a00:2190:b0:77d:52a1:ac6e with SMTP id d2e1a72fcca58-77e4eac6e2fmr16200123b3a.19.1758567008874; Mon, 22 Sep 2025 11:50:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Gustavo Romero , Pierrick Bouvier Subject: [PATCH v5 36/76] target/arm: Implement FEAT_CHK Date: Mon, 22 Sep 2025 11:48:44 -0700 Message-ID: <20250922184924.2754205-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567114452116600 Content-Type: text/plain; charset="utf-8" This feature contains only the CHKFEAT instruction. It has no ID enable, being back-allocated into the hint nop space. Reviewed-by: Gustavo Romero Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 14 ++++++++++++++ docs/system/arm/emulation.rst | 1 + target/arm/tcg/a64.decode | 1 + 3 files changed, 16 insertions(+) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index d5c41fbb3a..9dfcf4f993 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2124,6 +2124,20 @@ static bool trans_AUTIBSP(DisasContext *s, arg_AUTIB= SP *a) return true; } =20 +static bool trans_CHKFEAT(DisasContext *s, arg_CHKFEAT *a) +{ + uint64_t feat_en =3D 0; + + if (s->gcs_en) { + feat_en |=3D 1 << 0; + } + if (feat_en) { + TCGv_i64 x16 =3D cpu_reg(s, 16); + tcg_gen_andi_i64(x16, x16, ~feat_en); + } + return true; +} + static bool trans_CLREX(DisasContext *s, arg_CLREX *a) { tcg_gen_movi_i64(cpu_exclusive_addr, -1); diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 94a6192fa9..4b07af9eac 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -28,6 +28,7 @@ the following architecture extensions: - FEAT_BF16 (AArch64 BFloat16 instructions) - FEAT_BTI (Branch Target Identification) - FEAT_CCIDX (Extended cache index) +- FEAT_CHK (Check Feature Status) - FEAT_CMOW (Control for cache maintenance permission) - FEAT_CRC32 (CRC32 instructions) - FEAT_Crypto (Cryptographic Extension) diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode index 55ff6c504f..8283a9c83d 100644 --- a/target/arm/tcg/a64.decode +++ b/target/arm/tcg/a64.decode @@ -256,6 +256,7 @@ ERETA 1101011 0100 11111 00001 m:1 11111 1111= 1 &reta # ERETAA, ERETAB AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 + CHKFEAT 1101 0101 0000 0011 0010 0101 000 11111 ] # The canonical NOP has CRm =3D=3D op2 =3D=3D 0, but all of the space # that isn't specifically allocated to an instruction must NOP --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568286; cv=none; d=zohomail.com; s=zohoarc; b=cD8napYfs3VloqiwUFZUznv1gmjNVMRr6tAi7KNx3Ju2DZiEFqZzGmq9YebdNnpbi00j9mJq/P2ZKCJZW7Lh0vbTOzyAN+P+xQV90C4MfiLSW2C+rkWYLPr2WtLAecsOApiAg8UWmgADLQstRtfpPDon2K37DT6jmab2xoAgwLs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568286; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=48M255vDXUg+h3ahPw5Hxn6mwDdmXJFvoCKvpfhtzJg=; b=DHniz9VnSXgUSw9afKWWdgdbNWAuAvfCd6x0W+vQVPIsqc4wd9z0RQGFBxN/7oXFn1GU5udzcOCCvyf1d54CjO0XI/yb8QOdy5DJK6M4o28FpHIg3jCVI2zP1b3o2f9IIZiMPAwtg132u5ARt7PLaMSAipbETHwHSyH/UFUY54I= 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 1758568286219610.2954561531238; Mon, 22 Sep 2025 12:11:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldt-0007JW-3a; Mon, 22 Sep 2025 14:52:05 -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 1v0lcO-0005IX-7S for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:41 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc4-0004TF-Ry for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:31 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-77e6495c999so3283164b3a.3 for ; Mon, 22 Sep 2025 11:50:11 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567010; x=1759171810; darn=nongnu.org; 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=48M255vDXUg+h3ahPw5Hxn6mwDdmXJFvoCKvpfhtzJg=; b=NIPOFXT+JNirVsxNyO1TiQWDeJtzd9MzDAO5JGIBjBMa7ZjcOM7UOQZMw/Ua5sbmxl G9W0lGTBXT0AbY4FqOTgeVB8FRFvcaBMempMnuXlvmkEonB1HSi6sjciW95EoTRzWR4M TMoGfThjnjKuY51MDMt36MQRQzYJAv7LuLpOj6n7708IQtavi+mjRno+RYnzdROsz5Dv bJycKxOFHVjOJF7SYjObnYCiVoC8JdUD+Pjj92u129zw3L8k6Eg2doVNbo6fa2lFYMov NEAIJzfVj35WJRPYu+UlLNqqkubP+NRxye7x8DOOR3qFKImkTp+b+BOG/8nZ2wC8DzR/ 5qvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567010; x=1759171810; 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=48M255vDXUg+h3ahPw5Hxn6mwDdmXJFvoCKvpfhtzJg=; b=stn0Q0+JVJ2sv9xV8c9GeEv2cXmQMJfw4okitrxoTVzoN32LvWQ78J7a1jjH2CL10S zXYbWwMWqhEuHU1t0OlhGJFUsDzrtBI3QvgWJnSrg2HKfdU5yXFq9J6Q8LdyTF7NvqkG X8zgwA3lay5v0DrKDhxuJ6bO6qEsS/LmQliqBAYr5+k05245mQuPMcmmWKsh3pyJG6u3 rPneXs6rDU0mIjUn7pPETQwyr5/bYRZ3b7OtnCUTPNoMxUTuVKUf8bzNlLOvrdkGnekF v6x9rX/f+1zdwhImegF18R02kBf7dMH6LCnlbwp1VL/xDD4ObMxw2ib8oYeJxiL2MFpH y5Ig== X-Gm-Message-State: AOJu0Yx4ggRS4jPosWxpWsiFx4HAhg+SuIZ94B2WAT2g2eUBfPNvjxwi aZri0/AjiWmr+5odxlRZ58+8QWv0RoZyjmwEE98CdY4Rn9dmPqf8xBWV924eyM+1rI9N+NKSrCR nz+CD X-Gm-Gg: ASbGncsusBuQdH1H4lCmDJboLB+A9/AsMLnOvyXOwCla30uVwV4nPRIVTNcUk0wt3TI zT5a0T9syuLrMIBrc7gpik9ju9rJ2MLPMZBi0s4quMK7OODhqFv5KVBVjFocb/eQz5S5sPQ7hWJ UAF15mzyEy3hrWkawLW5Vsnu6yGtyMEuPHy3H33pjz9I20ZvxkhGh/S24RvLQq3PpcFxXo8F+A0 E5QvJ4wBp6bKg7oD/yYCAB1Od38+rOvTtnNLJejHKpXVrQLRKFhq09NzgiCHIZCBW0wFM2D+8i0 ZGzcgxBPOhYGj83eglSeDJ8q+gxIxGkyEVzhCPPaMuqH7c3P2WyhzwP5Wsme51B4fHhmfciINZU sH4YY9E9Fsq96XZi9q3oUHhkk0rKv X-Google-Smtp-Source: AGHT+IG6pj8AQ8C/K2XSJnWEqFbt0j7WlNorN+oVg5XDfQr8pXP6GohDsx+iOr0YsVOrIE5YyNoOSw== X-Received: by 2002:a05:6a21:3290:b0:24a:d857:fcab with SMTP id adf61e73a8af0-2cfdaf0bcdemr137108637.23.1758567009880; Mon, 22 Sep 2025 11:50:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 37/76] target/arm: Make helper_exception_return system-only Date: Mon, 22 Sep 2025 11:48:45 -0700 Message-ID: <20250922184924.2754205-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568288405116601 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/tcg/helper-a64.h | 5 ++++- target/arm/tcg/helper-a64.c | 2 ++ target/arm/tcg/translate-a64.c | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-a64.h b/target/arm/tcg/helper-a64.h index 85023465b7..b6008b5a3a 100644 --- a/target/arm/tcg/helper-a64.h +++ b/target/arm/tcg/helper-a64.h @@ -80,7 +80,6 @@ DEF_HELPER_3(vfp_ah_maxh, f16, f16, f16, fpst) DEF_HELPER_3(vfp_ah_maxs, f32, f32, f32, fpst) DEF_HELPER_3(vfp_ah_maxd, f64, f64, f64, fpst) =20 -DEF_HELPER_2(exception_return, void, env, i64) DEF_HELPER_FLAGS_2(dc_zva, TCG_CALL_NO_WG, void, env, i64) =20 DEF_HELPER_FLAGS_3(pacia, TCG_CALL_NO_WG, i64, env, i64, i64) @@ -145,3 +144,7 @@ DEF_HELPER_FLAGS_5(gvec_fmulx_d, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, fpst, i32 DEF_HELPER_FLAGS_5(gvec_fmulx_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= fpst, i32) DEF_HELPER_FLAGS_5(gvec_fmulx_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= fpst, i32) DEF_HELPER_FLAGS_5(gvec_fmulx_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= fpst, i32) + +#ifndef CONFIG_USER_ONLY +DEF_HELPER_2(exception_return, void, env, i64) +#endif diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index 71c6c44ee8..6d77fd0113 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -576,6 +576,7 @@ uint32_t HELPER(advsimd_rinth)(uint32_t x, float_status= *fp_status) return ret; } =20 +#ifndef CONFIG_USER_ONLY static int el_from_spsr(uint32_t spsr) { /* Return the exception level that this SPSR is requesting a return to, @@ -787,6 +788,7 @@ illegal_return: qemu_log_mask(LOG_GUEST_ERROR, "Illegal exception return at EL%d: " "resuming execution at 0x%" PRIx64 "\n", cur_el, env->pc= ); } +#endif /* !CONFIG_USER_ONLY */ =20 void HELPER(dc_zva)(CPUARMState *env, uint64_t vaddr_in) { diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 9dfcf4f993..ce5d597c93 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1870,6 +1870,9 @@ static bool trans_BLRA(DisasContext *s, arg_bra *a) =20 static bool trans_ERET(DisasContext *s, arg_ERET *a) { +#ifdef CONFIG_USER_ONLY + return false; +#else TCGv_i64 dst; =20 if (s->current_el =3D=3D 0) { @@ -1889,10 +1892,14 @@ static bool trans_ERET(DisasContext *s, arg_ERET *a) /* Must exit loop to check un-masked IRQs */ s->base.is_jmp =3D DISAS_EXIT; return true; +#endif } =20 static bool trans_ERETA(DisasContext *s, arg_reta *a) { +#ifdef CONFIG_USER_ONLY + return false; +#else TCGv_i64 dst; =20 if (!dc_isar_feature(aa64_pauth, s)) { @@ -1918,6 +1925,7 @@ static bool trans_ERETA(DisasContext *s, arg_reta *a) /* Must exit loop to check un-masked IRQs */ s->base.is_jmp =3D DISAS_EXIT; return true; +#endif } =20 static bool trans_NOP(DisasContext *s, arg_NOP *a) --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1758568202985713.8765795257451; Mon, 22 Sep 2025 12:10:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lcr-0005jo-4T; Mon, 22 Sep 2025 14:51:01 -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 1v0lcT-0005MP-Pc for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:42 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc4-0004Td-IH for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:36 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-77f38a9de0bso1270830b3a.0 for ; Mon, 22 Sep 2025 11:50:11 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567011; x=1759171811; darn=nongnu.org; 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=xDM1aWiuntpb3ZU1rgv8XRUZ2PXq26slIHJuXs5kBF0=; b=OUX2eV4IyTF9yHj/2s0qi0i35zsdrMvf6jiL93lmNy8vAqhTsBBv8VWgX68nNrEMXH A6qQ2ZaabmJAWNVq93qodiaM807ckIlpHu5NAOzkj+qHsIYcvGqChajTeHy9/fvleEWg JCuqWWXPKqnJZXKtEgrAPhNvieOCdy/5gPMb1TIwJ8VrUEYfM3uYQZdSUy+9lMLFpyWM ZDnAn59cl4r5i18GIJiwluXhE+gLT8mJ2VT3qBbAGc3LirBY/gAJyh1wwClfBNIxTgZF K70YA9TW39HeWn5xF8cpAxpvA207rJHbPF7o6JqTiT/Xc1W4rjLkFcrt3YEHIPjKEM+W 58zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567011; x=1759171811; 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=xDM1aWiuntpb3ZU1rgv8XRUZ2PXq26slIHJuXs5kBF0=; b=bIEm5vQbJ0HbgPD4CyTZ6Sbd1oNkAOyOA8j1NnKOZx1HRH3cjK0WY5L700vv3mmgTD y73H0x4VknNHLtT23GM+uS8GTI+4FH93HZavHXm8pEf/7GFEpfW93QW+IgrfQzIzMF2m Jxc+xzNYD6COCJqtU8SBpf25GlYIjGhL+G648/Mpf2lOKSBQB0QifpebRrfz0KH3LbP/ l92NetxG6Zt6QYObnK+2E3JDRUkwa8tfQjZupxqPJ6U2AuQ5mFkdmT+5MXCX4SL9yvf0 QYghY3FdvQM//ZWkOcIUJTZU9nOYKdTIOmReqlIEF9g1R/0SYQg4ONoUBINnTrUCVXoz dB6A== X-Gm-Message-State: AOJu0YzvbRTvLPzjswN1dTRyeMQM3OKvbO+h/GFhDmpwVbi/+PWurEiu J9zeCPa56p5uCPxVfVUzcRobNIo5O4PCjbHRKseA0FZMS5kZAlXlJJD42VSmwiQBKKzfo8dTxqP jKJ6e X-Gm-Gg: ASbGncs26Id9pN7+pff1nN9u4HRVJEVE36Ih43SZ2DqrwpnkrvH4OmwtfPglN8TXvns 5BokZ5dgKpeAdrpWhiyw1b/saFFY7uylRgPayOkS2u3VC2GxMniQ3/5Gp4Z44rmMCQXErZtbD0y OEKVVlpDv3FTYTX/6AfPtls56tawpQmqnkE7UhpIy42MCeEZpww1fxz98kNQ0p4DSNLi9/8lLQ0 wzWPxnV4uUJfc06T5pNYkRY8SqePFtuGSWalJeHQEGxjVI/wULQ07DUeS+bWQNGTdktcZEri/E3 F0jIfkOQxZyeXtYO7NosxJ33EakVvsX8HG7igtPMGDSgWC9XSNHodaYeEUsKAacDxKGizKQkaTf fzc0b3mATFf6Wn48Fvy9zuQ4UB6ES X-Google-Smtp-Source: AGHT+IG7G1oX6iI1DdDs2Ay8qkX+3z4V0xpHri1fABrzgvWBTy55bjVVTB7Jmj/JmMTbkY3CvilkGA== X-Received: by 2002:a05:6a00:1945:b0:777:b207:47b2 with SMTP id d2e1a72fcca58-77e4cc3daa6mr16691349b3a.2.1758567010733; Mon, 22 Sep 2025 11:50:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 38/76] target/arm: Export cpsr_{read_for, write_from}_spsr_elx Date: Mon, 22 Sep 2025 11:48:46 -0700 Message-ID: <20250922184924.2754205-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1758568203390116600 Content-Type: text/plain; charset="utf-8" Move cpsr_write_from_spsr_elx from tcg/helper-a64.c to helper.c, so that it's present with --disable-tcg. Declare both in internals.h. Signed-off-by: Richard Henderson --- target/arm/internals.h | 2 ++ target/arm/helper.c | 20 +++++++++++++++++++- target/arm/tcg/helper-a64.c | 20 -------------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index f72e95a5ba..3766a4ccfe 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1892,6 +1892,8 @@ void vfp_clear_float_status_exc_flags(CPUARMState *en= v); */ void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t val, uint32_t mask); bool arm_pan_enabled(CPUARMState *env); +uint32_t cpsr_read_for_spsr_elx(CPUARMState *env); +void cpsr_write_from_spsr_elx(CPUARMState *env, uint32_t val); =20 /* Compare uint64_t for qsort and bsearch. */ int compare_u64(const void *a, const void *b); diff --git a/target/arm/helper.c b/target/arm/helper.c index 3b9e7a822e..3f32eb7a9d 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -8882,7 +8882,7 @@ static int aarch64_regnum(CPUARMState *env, int aarch= 32_reg) } } =20 -static uint32_t cpsr_read_for_spsr_elx(CPUARMState *env) +uint32_t cpsr_read_for_spsr_elx(CPUARMState *env) { uint32_t ret =3D cpsr_read(env); =20 @@ -8897,6 +8897,24 @@ static uint32_t cpsr_read_for_spsr_elx(CPUARMState *= env) return ret; } =20 +void cpsr_write_from_spsr_elx(CPUARMState *env, uint32_t val) +{ + uint32_t mask; + + /* Save SPSR_ELx.SS into PSTATE. */ + env->pstate =3D (env->pstate & ~PSTATE_SS) | (val & PSTATE_SS); + val &=3D ~PSTATE_SS; + + /* Move DIT to the correct location for CPSR */ + if (val & PSTATE_DIT) { + val &=3D ~PSTATE_DIT; + val |=3D CPSR_DIT; + } + + mask =3D aarch32_cpsr_valid_mask(env->features, &env_archcpu(env)->isa= r); + cpsr_write(env, val, mask, CPSRWriteRaw); +} + static bool syndrome_is_sync_extabt(uint32_t syndrome) { /* Return true if this syndrome value is a synchronous external abort = */ diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index 6d77fd0113..eaea7859d3 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -615,26 +615,6 @@ static int el_from_spsr(uint32_t spsr) } } =20 -static void cpsr_write_from_spsr_elx(CPUARMState *env, - uint32_t val) -{ - uint32_t mask; - - /* Save SPSR_ELx.SS into PSTATE. */ - env->pstate =3D (env->pstate & ~PSTATE_SS) | (val & PSTATE_SS); - val &=3D ~PSTATE_SS; - - /* Move DIT to the correct location for CPSR */ - if (val & PSTATE_DIT) { - val &=3D ~PSTATE_DIT; - val |=3D CPSR_DIT; - } - - mask =3D aarch32_cpsr_valid_mask(env->features, \ - &env_archcpu(env)->isar); - cpsr_write(env, val, mask, CPSRWriteRaw); -} - void HELPER(exception_return)(CPUARMState *env, uint64_t new_pc) { ARMCPU *cpu =3D env_archcpu(env); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567134; cv=none; d=zohomail.com; s=zohoarc; b=i+9y2Kb/kDjY8GlXY+zIM+sOXMbLvKv2kgZNvshXD1V/dP7C1dsZd9FVnpyFu5TF9r+mb7Zno/9IpgYW/rwAGihS3OnSd+VyilS+/E41qAhfJ2utM06PeIwOQgN2VUFeJuEzf7Sb51Y0uANh5C7xSpii9JVTd4+UJg0RrRz5N9s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567134; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kzRq+g7qBeC/3U/opiG/f/Q7ctgJstcdudImAw6mqiY=; b=k3OcO8EitGSwDiDS4V23hVUHkn4ZctTXERqSrBmgtKHVWGTeHQMEKIBJsAcpkuNSVBTkb+nS/dOvtvrnkhEOYldpjO5oSn1xapE4vB9gifrpbUIEJE4VTDSLa42BhtvWHs2vKnmXkjmASmD4zVfN4G8J6TJ/hHtLthCTF9p9JrY= 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 175856713422238.831389322444466; Mon, 22 Sep 2025 11:52:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ldX-0006m1-8n; Mon, 22 Sep 2025 14:51:49 -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 1v0lcP-0005JF-SO for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:41 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lc6-0004UD-In for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:50:33 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-77ee6e252e5so2905580b3a.2 for ; Mon, 22 Sep 2025 11:50:13 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-77e5fe6de75sm10583861b3a.19.2025.09.22.11.50.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:50:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567011; x=1759171811; darn=nongnu.org; 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=kzRq+g7qBeC/3U/opiG/f/Q7ctgJstcdudImAw6mqiY=; b=M6R7cgJzELv1fJT+lSxPWoL1Tq98lSS5fXW0aJTBDE91LrdGfi/Dg/adecyY4YLcMy eQFmAyvactcYQ6pAfcXalQeX6QbQ1CAytQZKGqQGc75MD9blEtUpzcYtvuGV9fdnqUyH EGaoQntB/2ADMu2XCqfzK1+VZ9RNp2BLieUx0aDeN717RjvNQjZMcSzelbuI/XOUdreS rRhuSSUDfqObQnMFQ4SmGJbcsrIdAR4E47mW7EfyV8Du1Knlc6OQEz1D3Mb6Li9uZIX2 1cfXeTIFLk8SAzaCgDlnrF2CIFiWXy31qQHsyIrUUT1ld3xdaX5t7ywnc34UTRCcPKhv +hgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567011; x=1759171811; 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=kzRq+g7qBeC/3U/opiG/f/Q7ctgJstcdudImAw6mqiY=; b=Fgtn3xvb8n8H4kip2kkXoksiKV/RQP0RLzIBWfVPWx842cvJaLSN+oBWvCY/hKB6tA up7F+IwE+wlyuvsdsvr4tjLrBaOHD0LzDeGx8xFW+CgxvnncLGznuBVJnkYjont2Cxv9 4B3h9r6fVIk9U5Xi9bKdJtEAYAInSY01XqEbmYcEjoSJwhfYGjogpOUecTIS9kbR+dwY lygIUEaK25PwpudyZreblA7NJqmOJHiFMxryq76VHtGzbdD8FbjgDOqkOvN0DHu/sIYV MOJ09QHOg1bc5Ku0S+7VlvC4VU+I6aqC9odzypYzNskTPH1rZcIgGGpnyEXYHw7YVIhl PAOA== X-Gm-Message-State: AOJu0Yw6JhLaPfVu52iNIS2EHfhW762ZbXLsSmcGcB/jFROOpvqjdsbB mSxUBTA7X4rXq8XPo2OVl62ciHDRg2uMxwtVF5K7B2o4XNtqs1F0KCwy+gQ48qsVyBn22pJVJ3q orHAA X-Gm-Gg: ASbGncttA0F67Nni3EaJQ3MHQAjUtNOeEqO+xnEiPEY6BfhwFyG8+BgpYgspPohgTZv p/AyN/+WNBO3/ndz4dxFKU9oMxOUMuOo1+UyOJ26GyJPVQRli8qNQyOBnUxL3X7gLP18fqr9rhw 5Z9+zOBJwqdgaoMPDTncTXPHb7skw71lzDNUnMsw592eJiqrEmJPQSPCZaA4LlW0uiLY+U0jkwH VniY7/wKYF3XXA96SJYTbE/04/H29j3hBOyzk6dGvJiR9AOe8lahgO/5IiOw72kU/vUFFfFvPTf fH2qCp5y/m7CppIr4VySVI16/NgOb7t9gdTY/RvTyUXUZq4w8ZZUtNzH2OJr3lBgpXohRSYdRYM enUYWlhIFyu8Kx0eb9Q6zghtMBuIU2okBLmwT/mQ= X-Google-Smtp-Source: AGHT+IE7HL+cf2mZo8I2cW3KyeMmiIu4mkcR+lyvgPftZdhAAhwnklipFYpUn9fEqEFzdeJfnUPKzQ== X-Received: by 2002:a05:6a00:2ea9:b0:776:12ea:c737 with SMTP id d2e1a72fcca58-77e4f48f20fmr14052063b3a.23.1758567011534; Mon, 22 Sep 2025 11:50:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 39/76] target/arm: Expand pstate to 64 bits Date: Mon, 22 Sep 2025 11:48:47 -0700 Message-ID: <20250922184924.2754205-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567136840116600 Content-Type: text/plain; charset="utf-8" The ARM now defines 36 bits in SPSR_ELx in aarch64 mode, so it's time to bite the bullet and extend PSTATE to match. Most changes are straightforward, adjusting printf formats, changing local variable types. More complex is migration, where to maintain backward compatibility a new pstate64 record is introduced, and only when one of the extensions that sets bits 32-35 are active. The fate of gdbstub is left undecided for the moment. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu.h | 8 ++-- target/arm/tcg/translate.h | 20 ++++----- target/arm/cpu.c | 6 +-- target/arm/gdbstub64.c | 2 + target/arm/helper.c | 11 ++--- target/arm/machine.c | 81 +++++++++++++++++++++++++++++++++++++ target/arm/tcg/helper-a64.c | 2 +- 7 files changed, 107 insertions(+), 23 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 6a214557ac..c79393d9c2 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -268,7 +268,7 @@ typedef struct CPUArchState { uint64_t xregs[32]; uint64_t pc; /* PSTATE isn't an architectural register for ARMv8. However, it is - * convenient for us to assemble the underlying state into a 32 bit fo= rmat + * convenient for us to assemble the underlying state into a 64 bit fo= rmat * identical to the architectural format used for the SPSR. (This is a= lso * what the Linux kernel's 'pstate' field in signal handlers and KVM's * 'pstate' register are.) Of the PSTATE bits: @@ -280,7 +280,7 @@ typedef struct CPUArchState { * SM and ZA are kept in env->svcr * all other bits are stored in their correct places in env->pstate */ - uint32_t pstate; + uint64_t pstate; bool aarch64; /* True if CPU is in aarch64 state; inverse of PSTATE.nR= W */ bool thumb; /* True if CPU is in thumb mode; cpsr[5] */ =20 @@ -1538,7 +1538,7 @@ static inline unsigned int aarch64_pstate_mode(unsign= ed int el, bool handler) * interprocessing, so we don't attempt to sync with the cpsr state used by * the 32 bit decoder. */ -static inline uint32_t pstate_read(CPUARMState *env) +static inline uint64_t pstate_read(CPUARMState *env) { int ZF; =20 @@ -1548,7 +1548,7 @@ static inline uint32_t pstate_read(CPUARMState *env) | env->pstate | env->daif | (env->btype << 10); } =20 -static inline void pstate_write(CPUARMState *env, uint32_t val) +static inline void pstate_write(CPUARMState *env, uint64_t val) { env->ZF =3D (~val) & PSTATE_Z; env->NF =3D val; diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 761edded52..943dfd45fe 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -378,27 +378,27 @@ static inline TCGv_i32 get_ahp_flag(void) } =20 /* Set bits within PSTATE. */ -static inline void set_pstate_bits(uint32_t bits) +static inline void set_pstate_bits(uint64_t bits) { - TCGv_i32 p =3D tcg_temp_new_i32(); + TCGv_i64 p =3D tcg_temp_new_i64(); =20 tcg_debug_assert(!(bits & CACHED_PSTATE_BITS)); =20 - tcg_gen_ld_i32(p, tcg_env, offsetof(CPUARMState, pstate)); - tcg_gen_ori_i32(p, p, bits); - tcg_gen_st_i32(p, tcg_env, offsetof(CPUARMState, pstate)); + tcg_gen_ld_i64(p, tcg_env, offsetof(CPUARMState, pstate)); + tcg_gen_ori_i64(p, p, bits); + tcg_gen_st_i64(p, tcg_env, offsetof(CPUARMState, pstate)); } =20 /* Clear bits within PSTATE. */ -static inline void clear_pstate_bits(uint32_t bits) +static inline void clear_pstate_bits(uint64_t bits) { - TCGv_i32 p =3D tcg_temp_new_i32(); + TCGv_i64 p =3D tcg_temp_new_i64(); =20 tcg_debug_assert(!(bits & CACHED_PSTATE_BITS)); =20 - tcg_gen_ld_i32(p, tcg_env, offsetof(CPUARMState, pstate)); - tcg_gen_andi_i32(p, p, ~bits); - tcg_gen_st_i32(p, tcg_env, offsetof(CPUARMState, pstate)); + tcg_gen_ld_i64(p, tcg_env, offsetof(CPUARMState, pstate)); + tcg_gen_andi_i64(p, p, ~bits); + tcg_gen_st_i64(p, tcg_env, offsetof(CPUARMState, pstate)); } =20 /* If the singlestep state is Active-not-pending, advance to Active-pendin= g. */ diff --git a/target/arm/cpu.c b/target/arm/cpu.c index aab7250399..731b4d5725 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1190,7 +1190,7 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE= *f, int flags) { ARMCPU *cpu =3D ARM_CPU(cs); CPUARMState *env =3D &cpu->env; - uint32_t psr =3D pstate_read(env); + uint64_t psr =3D pstate_read(env); int i, j; int el =3D arm_current_el(env); uint64_t hcr =3D arm_hcr_el2_eff(env); @@ -1212,7 +1212,7 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE= *f, int flags) } else { ns_status =3D ""; } - qemu_fprintf(f, "PSTATE=3D%08x %c%c%c%c %sEL%d%c", + qemu_fprintf(f, "PSTATE=3D%016" PRIx64 " %c%c%c%c %sEL%d%c", psr, psr & PSTATE_N ? 'N' : '-', psr & PSTATE_Z ? 'Z' : '-', @@ -1229,7 +1229,7 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE= *f, int flags) (FIELD_EX64(env->svcr, SVCR, SM) ? 'S' : '-')); } if (cpu_isar_feature(aa64_bti, cpu)) { - qemu_fprintf(f, " BTYPE=3D%d", (psr & PSTATE_BTYPE) >> 10); + qemu_fprintf(f, " BTYPE=3D%d", (int)(psr & PSTATE_BTYPE) >> 10); } qemu_fprintf(f, "%s%s%s", (hcr & HCR_NV) ? " NV" : "", diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c index 3bccde2bf2..65d6bbe65f 100644 --- a/target/arm/gdbstub64.c +++ b/target/arm/gdbstub64.c @@ -47,6 +47,7 @@ int aarch64_cpu_gdb_read_register(CPUState *cs, GByteArra= y *mem_buf, int n) case 32: return gdb_get_reg64(mem_buf, env->pc); case 33: + /* pstate is now a 64-bit value; can we simply adjust the xml? */ return gdb_get_reg32(mem_buf, pstate_read(env)); } /* Unknown register. */ @@ -75,6 +76,7 @@ int aarch64_cpu_gdb_write_register(CPUState *cs, uint8_t = *mem_buf, int n) return 8; case 33: /* CPSR */ + /* pstate is now a 64-bit value; can we simply adjust the xml? */ pstate_write(env, tmp); return 4; } diff --git a/target/arm/helper.c b/target/arm/helper.c index 3f32eb7a9d..37cfd2064c 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -8947,8 +8947,8 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs) CPUARMState *env =3D &cpu->env; unsigned int new_el =3D env->exception.target_el; vaddr addr =3D env->cp15.vbar_el[new_el]; - unsigned int new_mode =3D aarch64_pstate_mode(new_el, true); - unsigned int old_mode; + uint64_t new_mode =3D aarch64_pstate_mode(new_el, true); + uint64_t old_mode; unsigned int cur_el =3D arm_current_el(env); int rt; =20 @@ -9096,7 +9096,7 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs) * If NV2 is disabled, change SPSR when NV,NV1 =3D=3D 1,0 = (I_ZJRNN) * If NV2 is enabled, change SPSR when NV is 1 (I_DBTLM) */ - old_mode =3D deposit32(old_mode, 2, 2, 2); + old_mode =3D deposit64(old_mode, 2, 2, 2); } } } else { @@ -9109,7 +9109,7 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs) } env->banked_spsr[aarch64_banked_spsr_index(new_el)] =3D old_mode; =20 - qemu_log_mask(CPU_LOG_INT, "...with SPSR 0x%x\n", old_mode); + qemu_log_mask(CPU_LOG_INT, "...with SPSR 0x%" PRIx64 "\n", old_mode); qemu_log_mask(CPU_LOG_INT, "...with ELR 0x%" PRIx64 "\n", env->elr_el[new_el]); =20 @@ -9163,7 +9163,8 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs) =20 env->pc =3D addr; =20 - qemu_log_mask(CPU_LOG_INT, "...to EL%d PC 0x%" PRIx64 " PSTATE 0x%x\n", + qemu_log_mask(CPU_LOG_INT, "...to EL%d PC 0x%" PRIx64 + " PSTATE 0x%" PRIx64 "\n", new_el, env->pc, pstate_read(env)); } =20 diff --git a/target/arm/machine.c b/target/arm/machine.c index ce20b46f50..44a0cf844b 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -816,6 +816,80 @@ static const VMStateInfo vmstate_cpsr =3D { .put =3D put_cpsr, }; =20 +static int get_pstate64(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field) +{ + ARMCPU *cpu =3D opaque; + CPUARMState *env =3D &cpu->env; + uint64_t val =3D qemu_get_be64(f); + + env->aarch64 =3D ((val & PSTATE_nRW) =3D=3D 0); + if (is_a64(env)) { + pstate_write(env, val); + } else { + cpsr_write_from_spsr_elx(env, val); + } + return 0; +} + +static int put_pstate64(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, JSONWriter *vmdesc) +{ + ARMCPU *cpu =3D opaque; + CPUARMState *env =3D &cpu->env; + uint64_t val; + + if (is_a64(env)) { + val =3D pstate_read(env); + } else { + val =3D cpsr_read_for_spsr_elx(env); + } + qemu_put_be64(f, val); + return 0; +} + +static bool pstate64_needed(void *opaque) +{ + ARMCPU *cpu =3D opaque; + CPUARMState *env =3D &cpu->env; + uint64_t val; + + if (arm_feature(env, ARM_FEATURE_M)) { + return false; + } + if (is_a64(env)) { + val =3D pstate_read(env); + } else { + val =3D cpsr_read_for_spsr_elx(env); + if (val & PSTATE_SS) { + return true; + } + } + return val > UINT32_MAX; +} + +static const VMStateDescription vmstate_pstate64 =3D { + .name =3D "cpu/pstate64", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D pstate64_needed, + .fields =3D (const VMStateField[]) { + { + .name =3D "pstate64", + .version_id =3D 0, + .size =3D sizeof(uint64_t), + .info =3D &(const VMStateInfo) { + .name =3D "pstate64", + .get =3D get_pstate64, + .put =3D put_pstate64, + }, + .flags =3D VMS_SINGLE, + .offset =3D 0, + }, + VMSTATE_END_OF_LIST() + }, +}; + static int get_power(QEMUFile *f, void *opaque, size_t size, const VMStateField *field) { @@ -1052,6 +1126,12 @@ const VMStateDescription vmstate_arm_cpu =3D { VMSTATE_UINT32_ARRAY(env.regs, ARMCPU, 16), VMSTATE_UINT64_ARRAY(env.xregs, ARMCPU, 32), VMSTATE_UINT64(env.pc, ARMCPU), + /* + * If any bits are set in the upper 32 bits of cpsr/pstate, + * or if the cpu is in aa32 mode and PSTATE.SS is set, then + * the cpu/pstate64 subsection will override this with the + * full 64 bit state. + */ { .name =3D "cpsr", .version_id =3D 0, @@ -1128,6 +1208,7 @@ const VMStateDescription vmstate_arm_cpu =3D { &vmstate_irq_line_state, &vmstate_wfxt_timer, &vmstate_syndrome64, + &vmstate_pstate64, NULL } }; diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index eaea7859d3..08b7db7c46 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -620,7 +620,7 @@ void HELPER(exception_return)(CPUARMState *env, uint64_= t new_pc) ARMCPU *cpu =3D env_archcpu(env); int cur_el =3D arm_current_el(env); unsigned int spsr_idx =3D aarch64_banked_spsr_index(cur_el); - uint32_t spsr =3D env->banked_spsr[spsr_idx]; + uint64_t spsr =3D env->banked_spsr[spsr_idx]; int new_el; bool return_to_aa64 =3D (spsr & PSTATE_nRW) =3D=3D 0; =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567834; cv=none; d=zohomail.com; s=zohoarc; b=WMKN9odvIf/vgSZxviVb9f7Mm7vfWqKgG5+suLbGYmioNOYgd5IpxmF3pww4nNr3DqKS2ZqC8RYvNdnGs8vZ/BzfpiRoeWEVki9w5tuMCYCnDK+TA7Z5gxmR8btVfSPLHheqtw5Cg+NG6C5xK3tp61owLcrfrB2z0g7gCDEdu/k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567834; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QDW+HxP2J6pK8IxGshUeq+u65rBy5XdnKzmGA8gxmkE=; b=oASUvGZxSivKOX3vHzfds7+zyd1Tn05pHtHTuPaodcdSODtBsLVsvzCu/DKpzOXG7k6OTewOruNQU2epNLvCtmHNdA67kozxl+xk/wo2UEHef8h93sec/a3pa/vT47leseBGQ7x4pEaKnBxZ4Hq/PzfPCiJEz4y84igvAjAtBGg= 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 1758567834528201.77931134364553; Mon, 22 Sep 2025 12:03:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfW-0003rW-BL; Mon, 22 Sep 2025 14:53:46 -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 1v0lf6-0003OG-UW for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:21 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf3-0004wD-9I for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:19 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-b55115148b4so3008459a12.3 for ; Mon, 22 Sep 2025 11:53:15 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567193; x=1759171993; darn=nongnu.org; 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=QDW+HxP2J6pK8IxGshUeq+u65rBy5XdnKzmGA8gxmkE=; b=fuWP2z2sb74PddQvvSCzQIBYzeEy3CbgJujj7ZDKngHs0aaWLKT253Sp2lDScu05Hy xwlFwhhJAyHl21iLVLSvljlym5uhX/8363mIwWdDKQImlkfpneTD4aQRGMBvJZPCrr3q +eXeLGxblu995/vRat7UeekojDielL0fQ69MFA2tNnArEIukA1qwUWIv8tNn1Mb+l2Ua Nu5keNTqfzH/t2okv5xb/MckZLMlhpsRqQ4eTyzN4X1Mrcy1ROItjQE8A+My0H7h0dua G92YiKCUP2ZBYdYJywKsN7T4awk73vx+YRIVJiABzuVF8c3+pxaMJFgrQ7NncObb6KMP WKiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567193; x=1759171993; 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=QDW+HxP2J6pK8IxGshUeq+u65rBy5XdnKzmGA8gxmkE=; b=anDQhc87KSQw9WmDKNGRAQ6mmW0yFUriRdh9jHtTYuiBOCrCUa49k4IgxuLhdPzyU4 /ZTzIQGk7o1s9xMMuBKqY4x/2KDuMgvGA688+YqcO7ds4fb/ZB5RLKwVMwvQZUaCXH7s kerKgM4bsnnCphzPkUvSVaz5wUhjXXlCU0Z1P0zcbnOFBf4sqM621DG4fTyKMeWzkDMi VKxPGgAgn053FaSGsUEwqKQ4PHF0D5LAf3gqV7BXIaDkiz5Aw1CzlSnD2oVBPJFYQLBx BtkG1xzHxV688l4/oARQcU6rzH1Rc5+aiiyGDJ4ep/CbZ8Bck3AytkQA64hTHVw68rG+ Y+nA== X-Gm-Message-State: AOJu0YxeQDsFyA7Hfv42xhlk2+q4WIuoYrtqPry7dawNNKqPQPPeQIzm DVaoAWDX1brEdg7/X8XXpzVJptCA88mD+cyxhODhKYNt2m5UVkMJL/No/OnCjcervV1bcFcmi7Y ugygu X-Gm-Gg: ASbGncuoACweSyGfI0SEBtePe7fEPEFlu7kGXqe6gUXBnewpAfi/uu6nggZwJ24cu/2 /RD6JyPsMcIyelkhdvyqBdJrXyVuAQa+2ZLRAYwGZfbyB83MOnOAV8T94DifglsprbYO1sCR7n2 ITy69RFfDCST3cIwQcxvfZPy+mHvhCi60/8FpnPiBM7lsgXJg5VGRmHWj5V+2MUHGTusJQD+9NK H9eEdX/OkKh+plETfz1HdUWWEQ7yOFLaI6JtHPd1xpgqi5nPuKl94+EM5sc2sdaA1hmTCrjbUDl SWuX77K4EZVdkJ3UsbXM4L2MaCVZy3Ws3djgotxpBG6u4TbEgMs5R3wO1oKQICjU5YSXZtQS1KM bdj2yQSSHqmCZn6/OWOmyaKlp+X3a X-Google-Smtp-Source: AGHT+IHX7slCyFV8nVKI7ApmZuCvisgxKvN0EoqauvZlFT5a4Fhhkp97BlbadwpD+PEAWyzsgquOVw== X-Received: by 2002:a17:902:e84c:b0:24b:640:ab6d with SMTP id d9443c01a7336-269ba538bb4mr210912855ad.49.1758567192963; Mon, 22 Sep 2025 11:53:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 40/76] target/arm: Add syndrome data for EC_GCS Date: Mon, 22 Sep 2025 11:48:48 -0700 Message-ID: <20250922184924.2754205-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567835662116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/syndrome.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/target/arm/syndrome.h b/target/arm/syndrome.h index c48d3b8587..bff61f052c 100644 --- a/target/arm/syndrome.h +++ b/target/arm/syndrome.h @@ -63,6 +63,7 @@ enum arm_exception_class { EC_MOP =3D 0x27, EC_AA32_FPTRAP =3D 0x28, EC_AA64_FPTRAP =3D 0x2c, + EC_GCS =3D 0x2d, EC_SERROR =3D 0x2f, EC_BREAKPOINT =3D 0x30, EC_BREAKPOINT_SAME_EL =3D 0x31, @@ -83,6 +84,23 @@ typedef enum { SME_ET_InaccessibleZT0, } SMEExceptionType; =20 +typedef enum { + GCS_ET_DataCheck, + GCS_ET_EXLOCK, + GCS_ET_GCSSTR_GCSSTTR, +} GCSExceptionType; + +typedef enum { + GCS_IT_RET_nPauth =3D 0, + GCS_IT_GCSPOPM =3D 1, + GCS_IT_RET_PauthA =3D 2, + GCS_IT_RET_PauthB =3D 3, + GCS_IT_GCSSS1 =3D 4, + GCS_IT_GCSSS2 =3D 5, + GCS_IT_GCSPOPCX =3D 8, + GCS_IT_GCSPOPX =3D 9, +} GCSInstructionType; + #define ARM_EL_EC_LENGTH 6 #define ARM_EL_EC_SHIFT 26 #define ARM_EL_IL_SHIFT 25 @@ -351,6 +369,23 @@ static inline uint32_t syn_pcalignment(void) return (EC_PCALIGNMENT << ARM_EL_EC_SHIFT) | ARM_EL_IL; } =20 +static inline uint32_t syn_gcs_data_check(GCSInstructionType it, int rn) +{ + return ((EC_GCS << ARM_EL_EC_SHIFT) | ARM_EL_IL | + (GCS_ET_DataCheck << 20) | (rn << 5) | it); +} + +static inline uint32_t syn_gcs_exlock(void) +{ + return (EC_GCS << ARM_EL_EC_SHIFT) | ARM_EL_IL | (GCS_ET_EXLOCK << 20); +} + +static inline uint32_t syn_gcs_gcsstr(int ra, int rn) +{ + return ((EC_GCS << ARM_EL_EC_SHIFT) | ARM_EL_IL | + (GCS_ET_GCSSTR_GCSSTTR << 20) | (ra << 10) | (rn << 5)); +} + static inline uint32_t syn_serror(uint32_t extra) { return (EC_SERROR << ARM_EL_EC_SHIFT) | ARM_EL_IL | extra; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567458; cv=none; d=zohomail.com; s=zohoarc; b=fykp0IsvImaYmPeN9Bjoma8bNf3Ye0/v7C69YUR3LTor9LOmE+1WRtzbKzdsRUi9Q+UrkFFVS66TJAD4j+4UvvUEaq7EGN7W+cbrMR1DkIZjcZiV7knaMYTj4koP1Rxze5u7KF7phynnrw6rYiTemTji7xvmdH4l4a5otSPOGTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567458; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=c8wyuys4m1d8GhLqeKYb3zwEPLO/sLqR4mHAelbDpjY=; b=eu1QEX60BwDwCvdXv+qDTr0eQDyJyTvxZmRcqFmWaCZ+2p/vHcJddfoww0Bv9tORoqkALVvvLXI0viZP8k8UY2Jl1INn42+Uo311g/f+58Rghev5uvOpOAhTZmpMzstqda0Y+GN6id3FEoG1mnlb60kSmzXQLlQ6oE43IcjKztA= 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 1758567458187219.64264180038992; Mon, 22 Sep 2025 11:57:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfg-0004Y9-CQ; Mon, 22 Sep 2025 14:53:58 -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 1v0lfC-0003Z2-QU for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:29 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf5-0004wK-K2 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:26 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-b4ee87cc81eso4591888a12.1 for ; Mon, 22 Sep 2025 11:53:15 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567194; x=1759171994; darn=nongnu.org; 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=c8wyuys4m1d8GhLqeKYb3zwEPLO/sLqR4mHAelbDpjY=; b=GRO4EMf2KFL/IY1EpbX25Eopao1U+R5cPMtyu9VaGDxxM79ZS1YsT3ty9JETv7IDvU C/4wQb/ecuSaKLgo/0Mlp0Iu+bOZ5HUAsvLLUw9UfAAeUKF5ywY3yFBf1dcYiUztAe4c RZmluZRqoSFT8vyR0Ob0ISqAdtsauqfyG0FWNBRAMa37CRGQUbK4VEhsJVWMB+sTT1Oi AQP9eGj9zLXxNZ5kevZKsEjZyWEj5QpMt7e681itR1b0Zsh1/DGEgS66BDykOWuEzjKG M3bSgiFSAloEzs0NHu5fFi7iZ77+616aVFcVjOBJkKF78zAgu1WR+jrxe/tcpQCZsPTE dmTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567194; x=1759171994; 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=c8wyuys4m1d8GhLqeKYb3zwEPLO/sLqR4mHAelbDpjY=; b=DFULTRMVinu6xVZbH/umWVjOLXEkiZqm9DhUyS1M0t9JCynshhW0KwFwbGQ7Y5jXAK Gga7zJbXwykaLAaZvYdG7PM/+o0fDyRgMVCDzjoJdSvKQmKbuy32h14NrebKRZSU/Hio zwyl09bpRvJZjGeDbPLX8VwNCJjqf/bRh3XgdRh1P4q7ZQyH+K6KnaBORcFlZnsTZmmm qVQ0noptOEoheiALBGl0OOh7DcNvwc9TtAg5JVTfYbThGASzXsDWhUKbwMk+XkhVSUJl pkcuUFnnnXARSC/j5RHmL2tXVi4CXYzx7HgTkhSHvxab6krdOFgE20B0plmOk6nWvcB7 +o/w== X-Gm-Message-State: AOJu0Yzf//DpfvGSuiklLBXewQWkNinxT46URdeh+xLdzviFEJCoWKCY MphEBAwToH72oEGBp2YwuN99hudRar299XZFeSrhHtjL5Ws5VLK1reoUklo04aaTxH9IR3AK6Ef npkrL X-Gm-Gg: ASbGncsfeDR+IAf8WETQ+IBbPGuJGsqvUKgEXHYF6aACxqNUWgMCfGe+tjhkZV191Vd oqI7JZRip1PQi1CCEyQQcSiQq7QCZDUJ1lukMyZNBaVtN3/TJLlcqdEi3uV/TOKyoNtHgOv1Tdf X+J0as2FseguuhzAMqGpjg+Sbys/ynb2whYlJ6+H0OxrUvxAEEJ1L5fIiIqCzk96WaEFfkegxlI sYUQhoRqmA6W2Zc6dVvjxZH4CvKxE4yglnp6Nq0RmdLNCuCl0GCFiRa+Bt+IgapLHoonmnrvAxQ zE5Hfv3TPZMs1RJQtMtcibxdakwa59+pax4Zqe8uCl2pW/6ybM3Oot4OFOk6L4X41eBj1dAIlZe E3Htlb1dBgRmDw7vS8peilfJkvyp5 X-Google-Smtp-Source: AGHT+IG5dEyukZKTtzWMUKbT+WNVl/fuUbv7f6jTIQPKZqdUH78QggLxTRJxyyqzFsbg93OGaGDOPw== X-Received: by 2002:a17:902:eccf:b0:269:8404:9a6b with SMTP id d9443c01a7336-269ba563609mr208360705ad.57.1758567194008; Mon, 22 Sep 2025 11:53:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 41/76] target/arm: Add arm_hcr_el2_nvx_eff Date: Mon, 22 Sep 2025 11:48:49 -0700 Message-ID: <20250922184924.2754205-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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 @linaro.org) X-ZM-MESSAGEID: 1758567460382116600 Content-Type: text/plain; charset="utf-8" Implement the pseudocode function EffectiveHCR_EL2_NVx. Signed-off-by: Richard Henderson --- target/arm/cpu.h | 1 + target/arm/helper.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c79393d9c2..b36436ee2b 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -2639,6 +2639,7 @@ static inline bool arm_is_el2_enabled(CPUARMState *en= v) */ uint64_t arm_hcr_el2_eff_secstate(CPUARMState *env, ARMSecuritySpace space= ); uint64_t arm_hcr_el2_eff(CPUARMState *env); +uint64_t arm_hcr_el2_nvx_eff(CPUARMState *env); uint64_t arm_hcrx_el2_eff(CPUARMState *env); =20 /* diff --git a/target/arm/helper.c b/target/arm/helper.c index 37cfd2064c..e3ea5254c5 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -3899,6 +3899,16 @@ uint64_t arm_hcr_el2_eff(CPUARMState *env) return arm_hcr_el2_eff_secstate(env, arm_security_space_below_el3(env)= ); } =20 +uint64_t arm_hcr_el2_nvx_eff(CPUARMState *env) +{ + uint64_t hcr =3D arm_hcr_el2_eff(env); + + if (!(hcr & HCR_NV)) { + return 0; /* CONSTRAINED UNPREDICTABLE wrt NV1 */ + } + return hcr & (HCR_NV2 | HCR_NV1 | HCR_NV); +} + /* * Corresponds to ARM pseudocode function ELIsInHost(). */ --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567751; cv=none; d=zohomail.com; s=zohoarc; b=Gj6ssx9CcQsUqFV3Iq2ZA34b0v6VMRglg5lKI8i5lX0AXRucXqDV3p88u/BfYXhGZ0SzE+vNq7maMV/VsgwgKtPo7WiGkra5rpyqeV78RKfcJTDz0slCZOqbvWoF+agpTuGcYbLY4vC3rjjn2mwbFGfiVbCSB7nanQlkJaxRajo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567751; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r/+MTJp0FVnVyO2Dilom7VZKL92xrFknYdg/x1N7080=; b=Fu0qUgjtHuO2s6EdkeD8TMHz2xpZ6/2I4sNrTntVXWZBG8/hKfg0kObFP6CdpChrq48AZaJgCyHAywiOs3ng/QW0zFIxmzsZfZg9/kaRgzXjVyml30fKH4k8hnIrtUYoky2ZlMHN4Dibr/312MimsHc86BYogDjsY52Uu46XbiA= 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 1758567751239230.62188398883893; Mon, 22 Sep 2025 12:02:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfW-0003rS-BD; Mon, 22 Sep 2025 14:53:46 -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 1v0lfD-0003Zu-PF for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:29 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf5-0004wR-MP for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:27 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-27c369f8986so2664445ad.3 for ; Mon, 22 Sep 2025 11:53:17 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567195; x=1759171995; darn=nongnu.org; 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=r/+MTJp0FVnVyO2Dilom7VZKL92xrFknYdg/x1N7080=; b=AvEVHPYzcutqp9rEGsI6DmDCAn6JOrjaLrdxXIe5/dqP8+lW2znD0ZIhpK7Smgl2UB EafwYSyg7jaR6mczjIgYgOQBj9eN6v+RMVnAhP14+5iJI6KtyIlJhn4WOG036acDYHpE 8xk+QCnYebleVLMT9kZWCnRKnQXHY77AwH4G1jGqIUQ0Ghy9fm9bMKLqwv/zlstSSwcV rGhjC7tIdQKW1KbcDUPkCSD7lcEVqVmA0Ry9t40lVFVR8gFgDRqAQwt5rbUGrAwAWnfp YR1u8yJANnr6h/F3K/SJPg53aZx1YywOr8Ct9d4mVH26ZYSWaD3lQTW3hRXDCnqNkXjz tqAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567195; x=1759171995; 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=r/+MTJp0FVnVyO2Dilom7VZKL92xrFknYdg/x1N7080=; b=PCkYITb2bfUeAQNzaZskyvFtH8a8ldMzZh1c3YKThenSmmSInaDkV7fvjIYtBq+VEx 5x4XAee8q6M720EIU1h9GEq40XvNFVWiBK745MLzIPrDwCLKOp55d1jGg36tF5RZ6c7O WqIIUnir2qiRbdlZpwUqFP3u0EHsE44CE6ey+XXosNU+Fs+izkoKGFp1wFM7aPEz+7km ywOMxJPJNZVSOsHrm1ORRHjYQhm5HppjQKrWtfE6goBkoXsskRTe4ZrJ6/fHmoVcTrX5 RtRGNAl+F6GsMVfM5J3ijfrN5Ed7VRnh0gtCtTEVSWfncBKIsq0UEafk/g+48CgfOUfY /gxw== X-Gm-Message-State: AOJu0YxK4ETh31V5uBEb6laTaN4pTcT2IQhGs0dmo6fgsjERpqN8Nj4x 3/7PKkpo1WugKFcqeFIOr9JO0UN9Vga04I+29mA29s5fbCWoQ1+XyBpmi31bOdEvKaetC5iw+nk DCCxX X-Gm-Gg: ASbGncv2RMQVg1IlhNdfSkAgXZK4sCAmQz7GstgOWzQaiQpr4HbbjKjpaDjdF4G4dad lbpbnoiL+9CR0PyK3THdce6xcn9N1fPs9+5yKBqYK3C1uICO2K2QvqiR/o/nbfvFICgxLBa/TmT IOvKlcCdd1OxPUQ59udD8RJdlZZRG10ywVvz9E4E3x5kFrn08yALHZNTb0tmnrQEbgaGBFkLihW svL0BgxMMfU6T5r5nquBiWiLXsAP3v5o15Hx6HpHEytqe2hwS6cgHYev2OhwqkMWFKHFeKTh79Z oG97xcmwpnynrQ6x+Ol8yTLTUO9Hn2Ij2nWVx4anmJpqLeJP422KoJ/hErTaShQfV9PkPD8UuiY nv9eYhYblTR6HP8py/pQ8oBGeWthB X-Google-Smtp-Source: AGHT+IF8q01WYMf2ytLpXH6ORmO9Y+M0xrI2gRQhsTZpJyzz6v3961fWIkQRu4zJ6xX66aLy9BZQmw== X-Received: by 2002:a17:902:ecc1:b0:272:f9c3:31fa with SMTP id d9443c01a7336-272f9c33570mr95270645ad.9.1758567194767; Mon, 22 Sep 2025 11:53:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 42/76] target/arm: Use arm_hcr_el2_nvx_eff in access_nv1 Date: Mon, 22 Sep 2025 11:48:50 -0700 Message-ID: <20250922184924.2754205-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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 @linaro.org) X-ZM-MESSAGEID: 1758567752354116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index e3ea5254c5..8b5ae0c543 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -3423,7 +3423,7 @@ static CPAccessResult access_nv1(CPUARMState *env, co= nst ARMCPRegInfo *ri, bool isread) { if (arm_current_el(env) =3D=3D 1) { - uint64_t hcr_nv =3D arm_hcr_el2_eff(env) & (HCR_NV | HCR_NV1 | HCR= _NV2); + uint64_t hcr_nv =3D arm_hcr_el2_nvx_eff(env); =20 if (hcr_nv =3D=3D (HCR_NV | HCR_NV1)) { return CP_ACCESS_TRAP_EL2; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568036; cv=none; d=zohomail.com; s=zohoarc; b=UyV9EQjMF06ARvirqz2VZyIzKZXDHh8Zc4CKq3HcxgPG3R45XPZlV/dKSWqGVfF5AkiytlfXwAoeexFLIcc3yy70TURogi3mS9wwmWFBfwBjrdcpK2ngL9Sqimj3anL/CrJXVuzjJ4W2grRf2pKEpTJB1s0+HoMh4Q7ptmjXHdw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568036; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=u3lppChNLDhQriahywEGch8lhsfYgg6UozfYzfSbm90=; b=F1gwhbWDtEe1hMWoVJZvKjdooBX5zNwkeCoL7jwHbnZCv4yB5684OvKDUwmsdquFsSKyyANLzZu/EUrbn+ANyOOdrgoH5bB1H1Dy3Y0wkA21msReMLWvIofpYOycZRdpunYNBfJ9FhfL/Sl/93Snj1XrVJrldpJ1mY2NUFevVZ8= 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 1758568036903619.2260776236382; Mon, 22 Sep 2025 12:07:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfX-000402-E9; Mon, 22 Sep 2025 14:53:47 -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 1v0lfG-0003eG-1d for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:33 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf7-0004wc-Nv for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:28 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-26a0a694ea8so29187835ad.3 for ; Mon, 22 Sep 2025 11:53:17 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567195; x=1759171995; darn=nongnu.org; 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=u3lppChNLDhQriahywEGch8lhsfYgg6UozfYzfSbm90=; b=CwCFgxFbrrRNLRbCi2GspvL5Rivxi+8e50PT1Y4UFZidTEzoVdKmDCTCZaTo295Phn m8dXMZrDArrIi27M5XwxJjToPfG3a7MjCBAs30U68lspgGmR4U3p7HCZP2SpoLO9Xg/J kpH0bOO5WanBnCqqKNLJZdKliF4XnLgKP9wCgEHd8qyATWnLSPFXPXeyPxjRqLICIiFc rwhkMCOBKAxGMon+T0orQ+eWz5z3wiFq7EgdQRy/SHEpJ16N7ParqZdAS6zLEhq89ber cHT7zztQe4nCsxhKaLTmFOThAApmFQlH73J7Jr8nSp/W+XdWBimrQU2OcAvEyggl/D3/ yKuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567195; x=1759171995; 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=u3lppChNLDhQriahywEGch8lhsfYgg6UozfYzfSbm90=; b=n1USvB5VtIy2w7ivRrZs/iFsMCugfMewp2SqAlerlhknpxYTROKyvBOPJfXf2q1Xug zmVVD/5DaTVNq4zH1f2g32u7fD8/fS5iCtYUDG6uk6VydwKLhSSibvJxaox45mO7tzoD rnL7UQdgoQCP5+IGZiE1n5CTiSTjrYCsNaip9yqKunlIp1qFIJb62INSZn0cnpO9A2cX UQvaTpGJ7H0QjK+o5AU7eDJ03lMdaHJygE/3GDXn6IKgY85A+AMiwCbXbPMGXyS5V67R e/pG68kHm4Py9T08ugLhVZqF2ZXq0ZHwoEq4qQ3SPHQeVWqZkTB18SXggeIQ6CgDP8y+ M5FA== X-Gm-Message-State: AOJu0YxAju7IBlHO6AjmB5hizlOtcriFGj3KkI6BmUCUYITwq8MTynCc k/ZZV19939xq4aC2BFiL1ayc5HRqKgA9b8vyowehmwmfmWu1vSSgePjtfjQ5F/nP2BADsCkP3/o R04OF X-Gm-Gg: ASbGncsddYWg2/JQsEnIyR0eGlsE/WbrTMIPAlJbUSEWQUs2k8rN5HQxBqQrp9CkBeI KigBXRwl0qUntdbeNVAMUdYOhL4C9YHt9RdvFjfoisKU/b474V59yxVo1DeQlgdtkpEkhOroSSA vzYuBo4FZwjUGuWKelsiE5gU1uJgiPyzjSVcAe1QmuPaLo/vzVyoB2Zp5/3M0XnsmFmQXhb7DWL XMqeCcv8GGVOEtJlrAo37AMPQkgI0snn0aisENEM2McNqyCi9RkxqW1/1N3US5MxUCzVKHK9sVZ 0cSk642QcAtjDg26S2CugT5eI7WvN1QRBPhk/amj3HQMMgVBCSnUmyFNqzI8WET/uheSRu+t+4B bdOIfrRQ5t19yMM57S0FHwAwaR+2E X-Google-Smtp-Source: AGHT+IF5f23Xjj5Et5bObngPcLqjWFuArJxPciSo1NR3ZyuUf2vxBEuGkqWStZo1Y3YVfmfM6Hja1A== X-Received: by 2002:a17:902:f645:b0:269:b2e5:ee48 with SMTP id d9443c01a7336-269ba52e56emr198628995ad.52.1758567195640; Mon, 22 Sep 2025 11:53:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 43/76] target/arm: Split out access_nv1_with_nvx Date: Mon, 22 Sep 2025 11:48:51 -0700 Message-ID: <20250922184924.2754205-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568037600116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/helper.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index 8b5ae0c543..5519484186 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -3419,15 +3419,16 @@ static void mdcr_el2_write(CPUARMState *env, const = ARMCPRegInfo *ri, } } =20 +static CPAccessResult access_nv1_with_nvx(uint64_t hcr_nv) +{ + return hcr_nv =3D=3D (HCR_NV | HCR_NV1) ? CP_ACCESS_TRAP_EL2 : CP_ACCE= SS_OK; +} + static CPAccessResult access_nv1(CPUARMState *env, const ARMCPRegInfo *ri, bool isread) { if (arm_current_el(env) =3D=3D 1) { - uint64_t hcr_nv =3D arm_hcr_el2_nvx_eff(env); - - if (hcr_nv =3D=3D (HCR_NV | HCR_NV1)) { - return CP_ACCESS_TRAP_EL2; - } + return access_nv1_with_nvx(arm_hcr_el2_nvx_eff(env)); } return CP_ACCESS_OK; } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568194; cv=none; d=zohomail.com; s=zohoarc; b=kZDr2MbDHaSH9D63EWkg8UGeB3WLwwvKuIQ1humaq7snLNVUHXnmQV9s5BwrrxNAdPTEu8kVe3cwnDHN+oNlClLPME8wlI5yeCtUpYO0bsRhSdxQe5tXFb31/pewsOB9n4durOIPOcetUnukBvoJN6y0VgCgCMGm21hAFZvHsHk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568194; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=v6UhbL1wlL/mcB0x0GrzT1zamkcYww0puSFWXXUpmdY=; b=SXU9UdhW0YMkHq914DwX2/sjrLchz2lnDXQ3BYok0iubJfyPDHbpoTMm7VMnR9DKZbAb261nZX+tWiLXHkQ/hQIh7e3FKsgfxHfzNY9pJR8zOcpCxmBhrbLyj5MjFGED3b7ofElu0PWD3150pcDJF7ftf9tugU5RwS8mfCovG/U= 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 1758568194700818.8886980862669; Mon, 22 Sep 2025 12:09:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfi-0004fC-9E; Mon, 22 Sep 2025 14:53:59 -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 1v0lfQ-0003t7-8D for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:43 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf6-0004wl-56 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:39 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-b5229007f31so3489383a12.2 for ; Mon, 22 Sep 2025 11:53:18 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567197; x=1759171997; darn=nongnu.org; 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=v6UhbL1wlL/mcB0x0GrzT1zamkcYww0puSFWXXUpmdY=; b=Q371F4DCtvP1LoKW0X69Wzf3ecok3xeIshTjrt+G3u0+HT+988j8RHKcGEo4uCIsrK wR48vni68s5Zyvvc8SmzAPBF4x7taP6MiSv/SuodQS7vgnjFEaMufnuSybkhlttY7kXv D1EYctHUEvStDb4i/1BZbND0hQm2mbAi18MlikXbiwZ9L8WTiCc5RC028kid8CTOl4Hl fjeaSN7Ct6qpIXQ1VLhPaw1NS+d0OOt3r4EP/vVlS5vgGlxNM4/A7ib59RK+NssX+qBG zo+bFSgsfH1dY0V3elBNzq/2NTEFagqqU+6AJZ/jq9H03/JPVlFJPqk7STS3bM5hGwbT HJZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567197; x=1759171997; 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=v6UhbL1wlL/mcB0x0GrzT1zamkcYww0puSFWXXUpmdY=; b=WfJdGR/bZewO0vKdMl5ISIPQG/afVz4tHpf+MW1PfBr5LMLSa5In/YKPQzlygokwCu A+zkqSXJ4I3d7JLBUp1+NcIKdyxqA301YaW7a+P+eV7w542oLzw+Y0QSis51Vgij9r9h Jfg5ZhVx7p5mksGAHDAL4XTSq0MLD7S9kDKONntex3zu4P5t5mjiYmFvEYH9MBwARrQY erTRhLO1bDtRQSwBTxyKpeTkupeCWQMdvx1HTLeXirjB9CzY6vbcX6gNe/NlUVWH9GIf XCWQhB3ij8Z/7a8e92yhQ52Rq5NJeh6asN3aDs7QhN0n/0D5XyTkK+oHG3qNtNJL1txW 95yQ== X-Gm-Message-State: AOJu0YylkBMUc8qnAbzeRY4fmrZmcoZnWqG+z1Osa7YsmCjIbWJqIlcT IVD097lxG1f9aUuQdBRxoUsbypZFH4DKT+VWyP3Xfcr/4HeFVbLKsOPEo9fEs97pY4XTKwAmL4u MX8Ok X-Gm-Gg: ASbGnctN5ep0tcrXhYmSPw843RMTLVKVcUsrAe+AMA06LqAUrk0dV92bGNqsFzTaysP Pr8LhYKue5F8j/g686nclg0aIRCrsgEFFpiaIs0zZl95TV4oxErsRO+2n2Datx1F2WbC9y7tlpP xJ8VvHDcNHTIxBfeFWo+WaQGVvVWcVSkntLy4ZmcWB/TS6o3xmIlyURekQT8n/sTNDwbPFWVRa6 q+llf1Pm3NEVOdVcDRoBWQKknbTU46djvCoqF3s2ZCxGyoLb4GfEcu3dQOvr7r/JIAFabQfBGwM URvnAkL+oxGMD97zjMDtHcospnBWdbdRCiDvQ+1OIH62T3Y4iuuaUvG7u3vvHU3FhQ37+Da3VKc R4aa+p5JbWEck1VaZCavyUbXrGYbig9qIOKvEqQs= X-Google-Smtp-Source: AGHT+IGkwd2kVoy9NlQG7nUZU589wUz+kJm1XWypVwk4RoTTsYvVdnc3Ewl2ClScgqsIRFj7u7YsFg== X-Received: by 2002:a17:902:e549:b0:26e:62c9:1cc4 with SMTP id d9443c01a7336-26e62c92042mr124693015ad.4.1758567196716; Mon, 22 Sep 2025 11:53:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 44/76] target/arm: Implement EXLOCKException for ELR_ELx and SPSR_ELx Date: Mon, 22 Sep 2025 11:48:52 -0700 Message-ID: <20250922184924.2754205-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568195509116600 Content-Type: text/plain; charset="utf-8" If PSTATE.EXLOCK is set, and the GCS EXLOCK enable bit is set, and nested virt is in the appropriate state, then we need to raise an EXLOCK exception. Since PSTATE.EXLOCK cannot be set without GCS being present and enabled, no explicit check for GCS is required. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 8 +++++ target/arm/cpu.h | 1 + target/arm/helper.c | 67 ++++++++++++++++++++++++++++++++++---- target/arm/tcg/op_helper.c | 7 ++++ 4 files changed, 77 insertions(+), 6 deletions(-) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index bd2121a336..a79f00351c 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -351,6 +351,14 @@ typedef enum CPAccessResult { * specified target EL. */ CP_ACCESS_UNDEFINED =3D (2 << 2), + + /* + * Access fails with EXLOCK, a GCS exception syndrome. + * These traps are always to the current execution EL, + * which is the same as the usual target EL because + * they cannot occur from EL0. + */ + CP_ACCESS_EXLOCK =3D (3 << 2), } CPAccessResult; =20 /* Indexes into fgt_read[] */ diff --git a/target/arm/cpu.h b/target/arm/cpu.h index b36436ee2b..97cdcd8cdc 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1502,6 +1502,7 @@ void pmu_init(ARMCPU *cpu); #define PSTATE_C (1U << 29) #define PSTATE_Z (1U << 30) #define PSTATE_N (1U << 31) +#define PSTATE_EXLOCK (1ULL << 34) #define PSTATE_NZCV (PSTATE_N | PSTATE_Z | PSTATE_C | PSTATE_V) #define PSTATE_DAIF (PSTATE_D | PSTATE_A | PSTATE_I | PSTATE_F) #define CACHED_PSTATE_BITS (PSTATE_NZCV | PSTATE_DAIF | PSTATE_BTYPE) diff --git a/target/arm/helper.c b/target/arm/helper.c index 5519484186..e90398acc9 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -3433,6 +3433,61 @@ static CPAccessResult access_nv1(CPUARMState *env, c= onst ARMCPRegInfo *ri, return CP_ACCESS_OK; } =20 +static CPAccessResult access_nv1_or_exlock_el1(CPUARMState *env, + const ARMCPRegInfo *ri, + bool isread) +{ + if (arm_current_el(env) =3D=3D 1) { + uint64_t nvx =3D arm_hcr_el2_nvx_eff(env); + + if (!isread && + (env->pstate & PSTATE_EXLOCK) && + (env->cp15.gcscr_el[1] & GCSCR_EXLOCKEN) && + !(nvx & HCR_NV1)) { + return CP_ACCESS_EXLOCK; + } + return access_nv1_with_nvx(nvx); + } + + /* + * At EL2, since VHE redirection is done at translation time, + * el_is_in_host is always false here, so EXLOCK does not apply. + */ + return CP_ACCESS_OK; +} + +static CPAccessResult access_exlock_el2(CPUARMState *env, + const ARMCPRegInfo *ri, bool isrea= d) +{ + int el =3D arm_current_el(env); + + if (el =3D=3D 3) { + return CP_ACCESS_OK; + } + + /* + * Access to the EL2 register from EL1 means NV is set, and + * EXLOCK has priority over an NV1 trap to EL2. + */ + if (!isread && + (env->pstate & PSTATE_EXLOCK) && + (env->cp15.gcscr_el[el] & GCSCR_EXLOCKEN)) { + return CP_ACCESS_EXLOCK; + } + return CP_ACCESS_OK; +} + +static CPAccessResult access_exlock_el3(CPUARMState *env, + const ARMCPRegInfo *ri, bool isrea= d) +{ + if (!isread && + (env->pstate & PSTATE_EXLOCK) && + (env->cp15.gcscr_el[3] & GCSCR_EXLOCKEN)) { + return CP_ACCESS_EXLOCK; + } + return CP_ACCESS_OK; +} + #ifdef CONFIG_USER_ONLY /* * `IC IVAU` is handled to improve compatibility with JITs that dual-map t= heir @@ -3604,7 +3659,7 @@ static const ARMCPRegInfo v8_cp_reginfo[] =3D { { .name =3D "ELR_EL1", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS, .opc0 =3D 3, .opc1 =3D 0, .crn =3D 4, .crm =3D 0, .opc2 =3D 1, - .access =3D PL1_RW, .accessfn =3D access_nv1, + .access =3D PL1_RW, .accessfn =3D access_nv1_or_exlock_el1, .nv2_redirect_offset =3D 0x230 | NV2_REDIR_NV1, .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 4, 0, 1), .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 4, 0, 1), @@ -3612,7 +3667,7 @@ static const ARMCPRegInfo v8_cp_reginfo[] =3D { { .name =3D "SPSR_EL1", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS, .opc0 =3D 3, .opc1 =3D 0, .crn =3D 4, .crm =3D 0, .opc2 =3D 0, - .access =3D PL1_RW, .accessfn =3D access_nv1, + .access =3D PL1_RW, .accessfn =3D access_nv1_or_exlock_el1, .nv2_redirect_offset =3D 0x160 | NV2_REDIR_NV1, .vhe_redir_to_el2 =3D ENCODE_AA64_CP_REG(3, 4, 4, 0, 0), .vhe_redir_to_el01 =3D ENCODE_AA64_CP_REG(3, 5, 4, 0, 0), @@ -4095,7 +4150,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] =3D { { .name =3D "ELR_EL2", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS | ARM_CP_NV2_REDIRECT, .opc0 =3D 3, .opc1 =3D 4, .crn =3D 4, .crm =3D 0, .opc2 =3D 1, - .access =3D PL2_RW, + .access =3D PL2_RW, .accessfn =3D access_exlock_el2, .fieldoffset =3D offsetof(CPUARMState, elr_el[2]) }, { .name =3D "ESR_EL2", .state =3D ARM_CP_STATE_BOTH, .type =3D ARM_CP_NV2_REDIRECT, @@ -4113,7 +4168,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] =3D { { .name =3D "SPSR_EL2", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS | ARM_CP_NV2_REDIRECT, .opc0 =3D 3, .opc1 =3D 4, .crn =3D 4, .crm =3D 0, .opc2 =3D 0, - .access =3D PL2_RW, + .access =3D PL2_RW, .accessfn =3D access_exlock_el2, .fieldoffset =3D offsetof(CPUARMState, banked_spsr[BANK_HYP]) }, { .name =3D "VBAR_EL2", .state =3D ARM_CP_STATE_BOTH, .opc0 =3D 3, .opc1 =3D 4, .crn =3D 12, .crm =3D 0, .opc2 =3D 0, @@ -4395,7 +4450,7 @@ static const ARMCPRegInfo el3_cp_reginfo[] =3D { { .name =3D "ELR_EL3", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS, .opc0 =3D 3, .opc1 =3D 6, .crn =3D 4, .crm =3D 0, .opc2 =3D 1, - .access =3D PL3_RW, + .access =3D PL3_RW, .accessfn =3D access_exlock_el3, .fieldoffset =3D offsetof(CPUARMState, elr_el[3]) }, { .name =3D "ESR_EL3", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 3, .opc1 =3D 6, .crn =3D 5, .crm =3D 2, .opc2 =3D 0, @@ -4406,7 +4461,7 @@ static const ARMCPRegInfo el3_cp_reginfo[] =3D { { .name =3D "SPSR_EL3", .state =3D ARM_CP_STATE_AA64, .type =3D ARM_CP_ALIAS, .opc0 =3D 3, .opc1 =3D 6, .crn =3D 4, .crm =3D 0, .opc2 =3D 0, - .access =3D PL3_RW, + .access =3D PL3_RW, .accessfn =3D access_exlock_el3, .fieldoffset =3D offsetof(CPUARMState, banked_spsr[BANK_MON]) }, { .name =3D "VBAR_EL3", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 3, .opc1 =3D 6, .crn =3D 12, .crm =3D 0, .opc2 =3D 0, diff --git a/target/arm/tcg/op_helper.c b/target/arm/tcg/op_helper.c index dd3700dc6f..4fbd219555 100644 --- a/target/arm/tcg/op_helper.c +++ b/target/arm/tcg/op_helper.c @@ -881,6 +881,13 @@ const void *HELPER(access_check_cp_reg)(CPUARMState *e= nv, uint32_t key, } syndrome =3D syn_uncategorized(); break; + case CP_ACCESS_EXLOCK: + /* + * CP_ACCESS_EXLOCK is always directed to the current EL, + * which is going to be the same as the usual target EL. + */ + syndrome =3D syn_gcs_exlock(); + break; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567462; cv=none; d=zohomail.com; s=zohoarc; b=g3rfQHhWGfGsnkWB3puU97faloOogsnakig/IMJxAIYi8hxB5ioTY40EXn42YfdLEJHJ8b5tZD6SBcNDEKbjMtrZK0JFiySEmUISQBCsRSsq5QpZU3pPhDbeRchyvoT09otAfJV6elmO6mqCL4G3u99R2jffbBXzsllHJfQsKdk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567462; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oWIuoMSiqJF4N4o+nZ0K+Ku+FE0azEDKcujW4yFEPEA=; b=B4GDMi2z47TrIaNzs5ZA8FQb90hSl+KOBwubdbrYK1vXFd/rjhwzP8OZOSKn3xohjtlKqYU1iFHTsf3dOjWdG0CqpfWnpU2E2ICD9AOu+dQYFnziNz/qfwzI3svdjdNI+Yjg37w1MqdecC2F7Bcl3NjCzIzs5MjhhvY5A3sjeNY= 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 1758567462695820.3011162526315; Mon, 22 Sep 2025 11:57:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgE-0005jz-EX; Mon, 22 Sep 2025 14:54:30 -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 1v0lfS-0003um-2T for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:44 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf8-0004wu-Ga for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:41 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-25669596921so50314945ad.1 for ; Mon, 22 Sep 2025 11:53:19 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567197; x=1759171997; darn=nongnu.org; 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=oWIuoMSiqJF4N4o+nZ0K+Ku+FE0azEDKcujW4yFEPEA=; b=u6CLfyD1pPdkC9zQ3VzVGrl3xfihIdDcnR1Yg21fnQ2z81zdjmO+CMA6HS614B8SFG M7NJeeoHzyJOuQU282zBQnXXD8tWoRBExOzGVPHecYz9usI8krJeGzUGvxuS4EuGuzco bWmym+odK0ccrxkjEPgkGF0dyaFCxtQy6tpq1ofCQ89oSK6vAy3wLhnUr/r+6Xy51Muv 7mxc1Qdy/maAbpNGlvH1RSOgmE2fPm1VSw8e6+P2CydnaawckdHsP2GZnAyxHMkQKs7A +MrAK2MjVfI5fEHxdJA+VberUc1h466U2VVZgLN4fSS50iL2pi4l3gCRRV4QV7h8gnzC BlOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567197; x=1759171997; 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=oWIuoMSiqJF4N4o+nZ0K+Ku+FE0azEDKcujW4yFEPEA=; b=OEVk+AXEAfDFM28nnAZDS8Rr5Gq4QIVUMnSZIlsBSDG+DTIeH/paM1Ob7/loeUs6VC ojdSNWolIzH6i2cArYe/q0UOkldORmqneBsjGZ2G90TYmCf6qi+6g9V4kZ0icucVQ3wV /3p3SvNVcxDFGC4ndF646LIR7eDhrXn/VWIMrz/yvbkWFZh2Kwe+i9M2/xVJAxXr5P6/ WFUdwdDpso86+lshO5kk3L5z0CAqtZZ58uqUYXEejoZAbMMIMvFxj5En9s4qf34OTIAi PM0j5i6dTrtwtpGxrZ+8Z9+IgMgTZtwqHjQpUxDRD9xknkiC30uw9+z0JuzFU65hEk4t 8oJQ== X-Gm-Message-State: AOJu0YxetCSKvgvr6lgoGyWS4Ghekv+1hZsRUOjJ3SPwrNVpua4joTrC 5dJ9WPvrH7RKzKY6Pvs12LUHIzEIqv6FuTjnln7XtAJEx1z8DgAeg2ute6+7b66rFwpZzG8beKq oNJqx X-Gm-Gg: ASbGncum8iHSOLSISup01KPZ3pgH4vtVqm6aGDcT0tb4Whnro8tPFmv705UJRSPnUA5 QMXDnCD70EAnWLO7B4bnDQYYzkrp5BtWngAaAcZdMBjb1U/cQC42kDlOyZBvByvup4sIg119vmf f/jClQAbJ89MvbCACVL7jbWdvcJ43YNKsbNQCrPMLIgCj2DEwAVQeS6V87oupvYRT8dwJE+ojEC ZAA+7P9c7zV//5ZrE0BvXa91cPxD1g7ZWfD8VrWyflJmxvYvxnr7TQqSD8iKDJSuQU7+pUPtiE/ zZd93/AbQej0/ZoX+yLM6IB9hO1ZYtIf48oex40tjpxeQ8s2U+FbPf/wXOgjWLs1+s+u8+C/aUk dpZ5PF/87dTa45orfz1O8xIJgZMAw X-Google-Smtp-Source: AGHT+IHQ8yqIpuAQK5OfMvs330q4027hPqWVvFRYu9qRAIabFv8sgYFsak3FJwKKkqmaWnpbwYalFA== X-Received: by 2002:a17:903:1b0b:b0:267:a942:788c with SMTP id d9443c01a7336-269ba3fa0afmr206941515ad.1.1758567197368; Mon, 22 Sep 2025 11:53:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 45/76] target/arm: Split {full,core}_a64_user_mem_index Date: Mon, 22 Sep 2025 11:48:53 -0700 Message-ID: <20250922184924.2754205-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567464567116600 Content-Type: text/plain; charset="utf-8" Separate get_a64_user_mem_index into two separate functions, one which returns the full ARMMMUIdx and one which returns the core mmu_idx. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index ce5d597c93..f0331830b5 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -93,7 +93,7 @@ void a64_translate_init(void) } =20 /* - * Return the core mmu_idx to use for A64 load/store insns which + * Return the full arm mmu_idx to use for A64 load/store insns which * have a "unprivileged load/store" variant. Those insns access * EL0 if executed from an EL which has control over EL0 (usually * EL1) but behave like normal loads and stores if executed from @@ -103,7 +103,7 @@ void a64_translate_init(void) * normal encoding (in which case we will return the same * thing as get_mem_index(). */ -static int get_a64_user_mem_index(DisasContext *s, bool unpriv) +static ARMMMUIdx full_a64_user_mem_index(DisasContext *s, bool unpriv) { /* * If AccType_UNPRIV is not used, the insn uses AccType_NORMAL, @@ -130,7 +130,13 @@ static int get_a64_user_mem_index(DisasContext *s, boo= l unpriv) g_assert_not_reached(); } } - return arm_to_core_mmu_idx(useridx); + return useridx; +} + +/* Return the core mmu_idx per above. */ +static int core_a64_user_mem_index(DisasContext *s, bool unpriv) +{ + return arm_to_core_mmu_idx(full_a64_user_mem_index(s, unpriv)); } =20 static void set_btype_raw(int val) @@ -3577,7 +3583,7 @@ static void op_addr_ldst_imm_pre(DisasContext *s, arg= _ldst_imm *a, if (!a->p) { tcg_gen_addi_i64(*dirty_addr, *dirty_addr, offset); } - memidx =3D get_a64_user_mem_index(s, a->unpriv); + memidx =3D core_a64_user_mem_index(s, a->unpriv); *clean_addr =3D gen_mte_check1_mmuidx(s, *dirty_addr, is_store, a->w || a->rn !=3D 31, mop, a->unpriv, memidx); @@ -3598,7 +3604,7 @@ static bool trans_STR_i(DisasContext *s, arg_ldst_imm= *a) { bool iss_sf, iss_valid =3D !a->w; TCGv_i64 clean_addr, dirty_addr, tcg_rt; - int memidx =3D get_a64_user_mem_index(s, a->unpriv); + int memidx =3D core_a64_user_mem_index(s, a->unpriv); MemOp mop =3D finalize_memop(s, a->sz + a->sign * MO_SIGN); =20 op_addr_ldst_imm_pre(s, a, &clean_addr, &dirty_addr, a->imm, true, mop= ); @@ -3616,7 +3622,7 @@ static bool trans_LDR_i(DisasContext *s, arg_ldst_imm= *a) { bool iss_sf, iss_valid =3D !a->w; TCGv_i64 clean_addr, dirty_addr, tcg_rt; - int memidx =3D get_a64_user_mem_index(s, a->unpriv); + int memidx =3D core_a64_user_mem_index(s, a->unpriv); MemOp mop =3D finalize_memop(s, a->sz + a->sign * MO_SIGN); =20 op_addr_ldst_imm_pre(s, a, &clean_addr, &dirty_addr, a->imm, false, mo= p); @@ -4514,7 +4520,7 @@ static bool do_SET(DisasContext *s, arg_set *a, bool = is_epilogue, return false; } =20 - memidx =3D get_a64_user_mem_index(s, a->unpriv); + memidx =3D core_a64_user_mem_index(s, a->unpriv); =20 /* * We pass option_a =3D=3D true, matching our implementation; @@ -4568,8 +4574,8 @@ static bool do_CPY(DisasContext *s, arg_cpy *a, bool = is_epilogue, CpyFn fn) return false; } =20 - rmemidx =3D get_a64_user_mem_index(s, runpriv); - wmemidx =3D get_a64_user_mem_index(s, wunpriv); + rmemidx =3D core_a64_user_mem_index(s, runpriv); + wmemidx =3D core_a64_user_mem_index(s, wunpriv); =20 /* * We pass option_a =3D=3D true, matching our implementation; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567490; cv=none; d=zohomail.com; s=zohoarc; b=EnTvxzdB2R35+H1t7TCoWMrW/+c96XLsuSwmLIMY1IseEBxyzl1HAm8mhQnZCeVOkWocNBrvZs8swuiIxb79NgkvyDNPLNLCvI4wIINfZP3ifkVYv8nm4PITiXNBNlE4t2DZ9L7O4/v5SDb6ujJarwc3+hGbqVr6SHXMIagd2QU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567490; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NSuK61F+DOMY4zp/EHxX3Vza3zAy1L/d4c+YvNNK7Ak=; b=L6/IIO8su1ylvGnzYy8PqcZkrVXZ9O1RBGaw61ZP8Mb45tM/5MyrZQ7mW3jCPbVxWn6U6xppICVaVLxL8vEwFAOco4vjJ4YsSAvrXW89oxKOkMigYW8mgK8duSEXh+teNxsJloQU4x/Iw90c9sXr7oSn2Cy3O+3yCyvn1C/tZoc= 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 1758567490526664.1033363526919; Mon, 22 Sep 2025 11:58:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfx-00050W-Lj; Mon, 22 Sep 2025 14:54:17 -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 1v0lfG-0003eE-0M for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:34 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf7-0004xD-Hq for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:29 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2698e4795ebso47453615ad.0 for ; Mon, 22 Sep 2025 11:53:19 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567198; x=1759171998; darn=nongnu.org; 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=NSuK61F+DOMY4zp/EHxX3Vza3zAy1L/d4c+YvNNK7Ak=; b=IKqT+rwmRddl+Thw1Hhv5jd2EnNoTKTtuYBU3EfMqHekAm3cYN1sNPcSzKH+U2rKbe GArIcusYpmTcZ3MyHsfbLq8cxzwcuW1/P2R8mtvMYKD0gGJAAGBEOTSN9PQbl29bd4lB 2zfqyk+abwS1oUsQx0XgK7IDfbA5daqkFXwy7yhAxKxPoUKnn6DBPy9oMWLYH7Z2tNlj 1aUM4MF08N+fw0M6AfWowmEzs2v3OddBGvLfP9s2/KYWI0YfLboW778PZ/JAEY6o1ZjS qTb8c5lMir5mv73Ka4BlQsNq+T/YlAuA/H1DbgIz7d6P3jVl6YV3i0KynlTrKj+s7Txp i5Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567198; x=1759171998; 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=NSuK61F+DOMY4zp/EHxX3Vza3zAy1L/d4c+YvNNK7Ak=; b=wmtzm2oYTeTBIeimwon6JOkFJIbIdYaERBBZEM1NBa+PcAY4oKxpyFNimoHyEb1ROY eKhckVi3+HKhCb7nF3kVjhh4zrJAHJKMBdEwOZtAQJCNmev3axR99t1HMiQF5Q1MIV25 osFmwcwGF7gOYeJjVmwrymNZvg45XjluTSOhzsZNPlmp1Z2Hxu2GK6VqycOyWNOt5cL3 qInCJ92Dp7e1KCkWHdNmsdsbtsTyAf1zsS0vIwejtET5QHDMeCKKJxRwU3kAFgob9dRa ctzVEp56whVftYU4w1ECLd8Q+OLNkpZqwlDjZ0JlHraYsuNveVCeOWQYjwmO2j/CrQ/d UvhA== X-Gm-Message-State: AOJu0YzB1/mN3DF/8sIN4nQgJdFFWhFsNQuogGXLrR0MuLwfOHA9VoMW N/JVFyUuC2Hoj3vxN0iCN/J3+IpJf8scUxyQJeRvBWdNLaf9qPuabszz9HU4sxJ00/PRxyEwnJI IaDya X-Gm-Gg: ASbGncsHS4e56KAQAXIrO7NjNTAoQynVg8xuMrsEfDcHsqsvlTkv1pNsL0FbAAHCgGM C7zJ7E/f5d7f4tS3A4B9Ruc12QDVHPUO8EC+H2qsPvLiVc1vgXgTHo4mJUnko7VIp7b//cxTfTi CKg+HnMbNyX+Uavq9gk7kLsaWxIhWxrkkT26JpIrB3JBPdIdcitCx+9MyMYFJZqf+joP7EYGcHw K/WUHNo1y2GuBrKDNDGgT+cOxQ4YbQgWKhcp2i5zJYdvdyLlAIeEOguowyC3e75HmsXSDukR/7Q eCspEX8Oxm3je872cUGTGG/Ehb/VrPP5c1qkiSaimwVXjkigguXFQuYcuJSseqGhyxt6L2N390L S5aif0WN7llZgJqUNWMd3oYf33Eh2 X-Google-Smtp-Source: AGHT+IEfvJc1KvQSu2JFdu4C7BiqxOZhjhLsle7gaCspFDvVzh4CaeGLf1sQkd6DaTjigMhii2lN2A== X-Received: by 2002:a17:902:e550:b0:272:2bf1:6a21 with SMTP id d9443c01a7336-2722bf16e99mr126364845ad.14.1758567198268; Mon, 22 Sep 2025 11:53:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 46/76] target/arm: Introduce delay_exception{_el} Date: Mon, 22 Sep 2025 11:48:54 -0700 Message-ID: <20250922184924.2754205-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567492771116600 Content-Type: text/plain; charset="utf-8" Add infrastructure to raise an exception out of line. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate.h | 20 +++++++++++++ target/arm/tcg/translate-a64.c | 2 ++ target/arm/tcg/translate.c | 53 ++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 943dfd45fe..9a85ea74db 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -21,9 +21,25 @@ typedef struct DisasLabel { target_ulong pc_save; } DisasLabel; =20 +/* + * Emit an exception call out of line. + */ +typedef struct DisasDelayException { + struct DisasDelayException *next; + TCGLabel *lab; + target_long pc_curr; + target_long pc_save; + int condexec_mask; + int condexec_cond; + uint32_t excp; + uint32_t syn; + uint32_t target_el; +} DisasDelayException; + typedef struct DisasContext { DisasContextBase base; const ARMISARegisters *isar; + DisasDelayException *delay_excp_list; =20 /* The address of the current instruction being translated. */ target_ulong pc_curr; @@ -365,6 +381,10 @@ void gen_exception_insn_el(DisasContext *s, target_lon= g pc_diff, int excp, uint32_t syn, uint32_t target_el); void gen_exception_insn(DisasContext *s, target_long pc_diff, int excp, uint32_t syn); +TCGLabel *delay_exception_el(DisasContext *s, int excp, + uint32_t syn, uint32_t target_el); +TCGLabel *delay_exception(DisasContext *s, int excp, uint32_t syn); +void emit_delayed_exceptions(DisasContext *s); =20 /* Return state of Alternate Half-precision flag, caller frees result */ static inline TCGv_i32 get_ahp_flag(void) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index f0331830b5..d607a0afd6 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -10601,6 +10601,8 @@ static void aarch64_tr_tb_stop(DisasContextBase *dc= base, CPUState *cpu) break; } } + + emit_delayed_exceptions(dc); } =20 const TranslatorOps aarch64_translator_ops =3D { diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c index e62dcc5d85..78d26aac04 100644 --- a/target/arm/tcg/translate.c +++ b/target/arm/tcg/translate.c @@ -1088,6 +1088,57 @@ void gen_exception_insn(DisasContext *s, target_long= pc_diff, s->base.is_jmp =3D DISAS_NORETURN; } =20 +TCGLabel *delay_exception_el(DisasContext *s, int excp, + uint32_t syn, uint32_t target_el) +{ + /* Use tcg_malloc for automatic release on longjmp out of translation.= */ + DisasDelayException *e =3D tcg_malloc(sizeof(DisasDelayException)); + + memset(e, 0, sizeof(*e)); + + /* Save enough of the current state to satisfy gen_exception_insn. */ + e->pc_curr =3D s->pc_curr; + e->pc_save =3D s->pc_save; + if (!s->aarch64) { + e->condexec_cond =3D s->condexec_cond; + e->condexec_mask =3D s->condexec_mask; + } + + e->excp =3D excp; + e->syn =3D syn; + e->target_el =3D target_el; + + e->next =3D s->delay_excp_list; + s->delay_excp_list =3D e; + + e->lab =3D gen_new_label(); + return e->lab; +} + +TCGLabel *delay_exception(DisasContext *s, int excp, uint32_t syn) +{ + return delay_exception_el(s, excp, syn, 0); +} + +void emit_delayed_exceptions(DisasContext *s) +{ + for (DisasDelayException *e =3D s->delay_excp_list; e ; e =3D e->next)= { + gen_set_label(e->lab); + + /* Restore the insn state to satisfy gen_exception_insn. */ + s->pc_curr =3D e->pc_curr; + s->pc_save =3D e->pc_save; + s->condexec_cond =3D e->condexec_cond; + s->condexec_mask =3D e->condexec_mask; + + if (e->target_el) { + gen_exception_insn_el(s, 0, e->excp, e->syn, e->target_el); + } else { + gen_exception_insn(s, 0, e->excp, e->syn); + } + } +} + static void gen_exception_bkpt_insn(DisasContext *s, uint32_t syn) { gen_set_condexec(s); @@ -6791,6 +6842,8 @@ static void arm_tr_tb_stop(DisasContextBase *dcbase, = CPUState *cpu) gen_goto_tb(dc, 1, curr_insn_len(dc)); } } + + emit_delayed_exceptions(dc); } =20 static const TranslatorOps arm_translator_ops =3D { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568217; cv=none; d=zohomail.com; s=zohoarc; b=Sn7zxB6nY5ay+Jwb331ETKvhqWmw62kpd3ARUWuVc8rp4wMlO6sEqYww9R+dc0IHDf51I3h4EF/ZbkX8TGHq02uwKlfh4+Psxn5f60yrZaR8tuGDVhLuXsos39WgV2MtiyYff36917nmHJyLsdTD2icYV+KEWYc7SChdhvRyWh0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568217; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TRMGkSahDRDIyhY1Pf+KcfrLPaCj+CJxCc4+NBDjs/c=; b=Fzc+9s3HWMhlh3ecMxQYfQsScC3n7niq7o5B4dlm3B7AyLaL8fR8f3j68REwfccehFCIH55XfLkuJDOPjyGgasxscjN407DgsdbcAoytyu/bru5HHhojhzT7S/t+8mIfZUTq4pvQ4C6XKe8EirH8AVIX5QOjT5v9nLYj+Asj8Hw= 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 1758568217014185.2277049495417; Mon, 22 Sep 2025 12:10:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfi-0004fI-9O; Mon, 22 Sep 2025 14:53:59 -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 1v0lfT-0003ux-O4 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:46 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf9-0004xN-T5 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:42 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-279e2554b6fso9432855ad.2 for ; Mon, 22 Sep 2025 11:53:20 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567199; x=1759171999; darn=nongnu.org; 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=TRMGkSahDRDIyhY1Pf+KcfrLPaCj+CJxCc4+NBDjs/c=; b=EXo+I5c5dou7oUmx/J32POv8Ej+lwIHgNq/lQsyBZwU2EElDu9udEUT5eFXoVoD9H9 CPSmZ0u2NSElDO3gcwZg8j8tnXatJyGsYA+EGSdgatTP4U4n49VztwYV5CwY0kvHC0Hy To30ggaYdlh15t85VqnJoqiBzch+lOZC7lXEdoHpmRsgiTNIF623hF+2CZ3DjMZP1UgG ltNaDlB3mPgNU7rRiyBQ8KxG5pocs9Wj8vMP6xEfYAwjjWVLpbuP1CDWZL2N3T/BQwx/ IZaoB12TMPWX4w6JVIYZp9BKGMVwAg2pkkRW63L8lKqnq7UhJQF+A3Di6Eo6Cc1w+0z3 /8cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567199; x=1759171999; 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=TRMGkSahDRDIyhY1Pf+KcfrLPaCj+CJxCc4+NBDjs/c=; b=wy13fx88IHydDTQF/edZedGI/nNFk2wjgn+jmaJcuXou6B+7HYMztovqfKLSv7KGii leu4f/9vdVKdtiFjlZ5U5sJOKIH80ZADU+u6RkRiPiy8gxlhGlS/M/z2sTYPLbMuhIMJ ZV5X9ZtgKG0Vb8WkHzb/YPmRStmrge9iWmOZMjIIRAehxbgEdzLz60W74i8UoTQkaJN1 OM7ms4zPPub8l3NoYzOd7vl1PujBJAxbqPRsuhEzWye2wOSprWfv06XHbJCyiWqxUg+N BREsHfqNPpMjXUe/lWL0NQEJWfsMFjPpjvPkEk93AH95aQUe7S44W9Yq8C1fOYrCpdhk hsiA== X-Gm-Message-State: AOJu0YyLvvtye/AeN8D8P1fCP7q9vjNlqnYTzkZZuirJrKRG/W6Ievel CJTxYe/wxytTuRiOploXgW8jO3HccVgTV83MAg1a3A4lnwgKpA48A7AlAybp19wb6TzMhZuS0uw af5RA X-Gm-Gg: ASbGnctJ8hxQMUnXjbQGpIEBJAW1hEA/oSncx0CEN41TgMRelYuXY8ftsQcDFyCf4oh y+mOFm6wwKaB3WPn6Ty7pr/1dXqMvuLPrV7mOqV1J0Lvhe4k8HwHnlYeDLk7h7sEhvDh/NEFSDZ gitBrAUgax4bnIDE/JoqQ6ARLlg4g2HHIwv7mLTbP6Ex1MtwKR+wif7t8go9xMDtPQz+dw5wjUf lfLz9nQoMZIcPCAp19+Z1450WluIlyldLRAEx5o1d28PamY3GRXOrBGzHqcPywzW/OEZRNGNxwr e74nFf0TRAiYHj3JOl7Io/Lpu41DIcF47HwjfCuCExzF6Qr8/lcALvQDjo7Wmx3r/aGkniKVRPy 3GlRGFEFITWgaqQMgIAh4UWaW0F4EpcXHuCwnWW4= X-Google-Smtp-Source: AGHT+IExyq1klN3I6uzuB/YJNf++Vp8JA6G2zCD5/7hU3EOr4Brz+R0bFXwQK3i5cXT7IDyPOLHl1g== X-Received: by 2002:a17:902:ea02:b0:27b:472e:3a23 with SMTP id d9443c01a7336-27b472e3b6fmr29636145ad.14.1758567199079; Mon, 22 Sep 2025 11:53:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 47/76] target/arm: Emit HSTR trap exception out of line Date: Mon, 22 Sep 2025 11:48:55 -0700 Message-ID: <20250922184924.2754205-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568217596116600 Content-Type: text/plain; charset="utf-8" Use delay_exception_el to move the exception out of line. Use TCG_COND_TSTNE instead of separate AND+NE. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c index 78d26aac04..57bc8ea4c5 100644 --- a/target/arm/tcg/translate.c +++ b/target/arm/tcg/translate.c @@ -1774,21 +1774,11 @@ static void do_coproc_insn(DisasContext *s, int cpn= um, int is64, =20 if (maskbit !=3D 4 && maskbit !=3D 14) { /* T4 and T14 are RES0 so never cause traps */ - TCGv_i32 t; - DisasLabel over =3D gen_disas_label(s); + TCGLabel *fail =3D delay_exception_el(s, EXCP_UDEF, syndrome, = 2); + TCGv_i32 t =3D + load_cpu_offset(offsetoflow32(CPUARMState, cp15.hstr_el2)); =20 - t =3D load_cpu_offset(offsetoflow32(CPUARMState, cp15.hstr_el2= )); - tcg_gen_andi_i32(t, t, 1u << maskbit); - tcg_gen_brcondi_i32(TCG_COND_EQ, t, 0, over.label); - - gen_exception_insn_el(s, 0, EXCP_UDEF, syndrome, 2); - /* - * gen_exception_insn() will set is_jmp to DISAS_NORETURN, - * but since we're conditionally branching over it, we want - * to assume continue-to-next-instruction. - */ - s->base.is_jmp =3D DISAS_NEXT; - set_disas_label(s, over); + tcg_gen_brcondi_i32(TCG_COND_TSTNE, t, 1u << maskbit, fail); } } =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567495; cv=none; d=zohomail.com; s=zohoarc; b=OQ0V1SXldkODcvjK0HbQ5Xv3HZj8p/Sw4LtxXl/19/6Yuio2Af9dWlPD375nW2tEH2zVaZVFQ1pcIOPKJoMgBt31k9/PRJfKJgqjR52JBi4gR1NSSU0tFc3dOU/W45wsXLvdup9uXFCahA3HV6vP5IAF0xhWkyZAg1ftdBsyS+E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567495; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UArNSBfDRY0R4yQf7I4KwaZGkKosB9HEkNsmXAhE3vY=; b=hWeVGfk2iq3Bjg/A6GRik3U1cr9zJIQ/fEVmoYL2OAAdQtnbSA5Uwb6NmoE4r67ToTHFxBYSXg3G8D5JmD/Cq6Zu/TVakDdzxjZf2c/oJyVTz2knyBNwJZhj6QvirCziX1izRiQWFgmahF7fDfwQJ8KC253K6lT4cZawmoqbk4E= 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 1758567495680985.443425849062; Mon, 22 Sep 2025 11:58:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgB-0005Pt-Q2; Mon, 22 Sep 2025 14:54:27 -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 1v0lfP-0003rQ-55 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:42 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lf7-0004xd-UM for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:37 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2698384978dso40276175ad.0 for ; Mon, 22 Sep 2025 11:53:21 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567200; x=1759172000; darn=nongnu.org; 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=UArNSBfDRY0R4yQf7I4KwaZGkKosB9HEkNsmXAhE3vY=; b=kkmdIEEExRzQG7UXnm5a3+o7OE/UzSw5ksMDoavDLJV4v/ac9bw5dPLhVFF9riXFLL YSx7zVVeANoPxDoT7h2PXncZiR5n3HdDndPMr5VLApbDBWdM6ooa+qyOUrNU+MTHUjSA pZatrW682wFw40e43Ycfp4RJ7+qoaYJrJvhHSjwKq4CkpAS26Kr8OePCipVBi0/Jmwgv Mh3+o5CBWJES9BOHd+BZgB9vqY8hGLL3QcN4hJW2vNQEQQNLET+E+xgy+I82F1oUt5zK sNs8PnBjfwdagJnWhy2wk8E1TzWKovxjj7JGrlUcyotytVMZuh4qDMokt1cY1wg4SSeN WTRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567200; x=1759172000; 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=UArNSBfDRY0R4yQf7I4KwaZGkKosB9HEkNsmXAhE3vY=; b=rXcoNZpEUHS6wSCvyxPGiyt6mlij0nK9mKX5WR/qAVJv7ACJJGIsDn6dR/tMf51kTF nx7uUpuUw7H7kmag3ifDhBliaod5zzjryfJfK7XBNIjrgODah3D8nomZuhl5c0N2omTF X+dhsDfmrvjs+501YWaNl6ZtHnP9rQ6mf9DdX3bRj7GTWE9nxV5KQDozj4qOPpOyBQzO KttkaLaLrSo7K5k816cZASdeY4OqvZ5V2jzI+K/nrELUxcdMsgLjDJdrEnDq4bu5yDCQ 1ZBozM0oJRK0DbbkMCaCfriHzwuKUpJL2Hdomn/MOZZ4P4GarhDDqPJzGd8P6gBsKc6O 8rVw== X-Gm-Message-State: AOJu0YzgHdAloY09SnBkUB7nsO5RFrKRLxL94BWYKVNP+j7gOMf88RfU SzfAiyvTKNJE5QBOBgPRLKD2gczcumtIR6YrIjDweZ1pciT1kijBtvBb0kSMwEDtVQa0Z9+5rvL EVrnK X-Gm-Gg: ASbGncsabD/ewMIsRNUDA/IGpsgklccc0k1XypIVKiQvI00MzauVpF1qmlXsx5vuR0R tpRGv/a8LGKP5FfL95z3T9rGOQEIizXCFfyCOvzFKFA93Ed/HcDda/NNQ+cE5yRQMUJbSDLvTuJ ljlcPcged6oGo9ATskjLt+UbR162PyIygFyb6evoHTaJ6X0ec3dOPHsmyA4HAFU1h/92kEmnGK9 RcMoV/jWj2XtglLVyY8yLdYwjHl9BYrK7Ko7J3CGqdZM4P4QiM9Dto6WrG4WiICD27AK98ZxVq4 zcppP35azS4aY5nK0TZVxbL+b/FPLmdmY/cCG8RVWHSfryxPNPKe578jT1RzLUniUEgluxeQgr/ vNYVWtjMU9I99h1ji4nFbDswiYAvq X-Google-Smtp-Source: AGHT+IGMG41LBzRR5kJxvDnmCzZVc91o4fst+YtFHmwnkOSzHvM43kiQybuoBwLFOdAkcBNyT16BCw== X-Received: by 2002:a17:902:e84c:b0:25c:b6fb:778 with SMTP id d9443c01a7336-269ba43115amr202392815ad.14.1758567199984; Mon, 22 Sep 2025 11:53:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 48/76] target/arm: Emit v7m LTPSIZE exception out of line Date: Mon, 22 Sep 2025 11:48:56 -0700 Message-ID: <20250922184924.2754205-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567496834116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c index 57bc8ea4c5..3df0bbcb7f 100644 --- a/target/arm/tcg/translate.c +++ b/target/arm/tcg/translate.c @@ -5598,11 +5598,10 @@ static bool trans_LE(DisasContext *s, arg_LE *a) =20 if (!a->tp && dc_isar_feature(aa32_mve, s) && fpu_active) { /* Need to do a runtime check for LTPSIZE !=3D 4 */ - DisasLabel skipexc =3D gen_disas_label(s); + TCGLabel *fail =3D delay_exception(s, EXCP_INVSTATE, syn_uncategor= ized()); + tmp =3D load_cpu_field(v7m.ltpsize); - tcg_gen_brcondi_i32(TCG_COND_EQ, tmp, 4, skipexc.label); - gen_exception_insn(s, 0, EXCP_INVSTATE, syn_uncategorized()); - set_disas_label(s, skipexc); + tcg_gen_brcondi_i32(TCG_COND_NE, tmp, 4, fail); } =20 if (a->f) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567510; cv=none; d=zohomail.com; s=zohoarc; b=cwBqerq9q0hNwzVpMt9pAAsZzh7hHtLxONW2PN8RaKHpeTHYA5VoA19jAR0v3mU8AqhZPVhWAkRjpgRGcFvRFGAeWJzrs9MkUv8STOs//s5ilqGU/4/45mjMTbPaMTxN07IaJ1caQIDedUe9lkaMm/Y3VcZJTsI2b7ngR7t7znk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567510; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d4yOr54Zvd4hVdN3lAOIT39h+3zJgH0PiAcUhU01jqA=; b=V5ZkYPv2NVNznujyzV6K1/xu9mn+6wQuKriS3C7NjsuAt4Wgxu++1imbN3NtkP6U+rrs4PDm9/f+PO/7o8s2MqZHYR5Q/bHcd9uZ36nw3kXYBOnPei0/sZqrRvBjcJqi2CgqH5GBh+82MOXF1PpMsVdMO5ePHd7s1VfE2gv1wGA= 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 1758567510670147.30911551029635; Mon, 22 Sep 2025 11:58:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgk-0006OJ-2a; Mon, 22 Sep 2025 14:55:02 -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 1v0lfa-00049a-Gi for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:50 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfE-0004xo-Sb for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:49 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-25669596921so50316275ad.1 for ; Mon, 22 Sep 2025 11:53:21 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567201; x=1759172001; darn=nongnu.org; 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=d4yOr54Zvd4hVdN3lAOIT39h+3zJgH0PiAcUhU01jqA=; b=TiufOf39sUIEhm/Nuv0S6yCg7a4O0HK2TbE+9sH86Q8lj0U5cjUu6rHzKrZAVaDmdw /yYmgAWoQY4Jperwltr3vjY8w0MH80rYF8TrV2MYW2kMKuueHhMgcuIqsDSCfSUmfydw 3+PDUVc/jy1VYllUNiXtCB5wtaFsAePjS+8mz4lbBkG1mlM9T0CLVk46+qjHIDvqVBpq 3iaP7N2qYKGrRl2ABVOvVD86Z0L6bzBD137RTOy9fwoSdORaPudz/rY2GhGiAufs0RVY rSYGF26f6Hyq20XpdwyRm6MdkXBDC0ByAaO7ywSGSM2LlmmhFs1LFRYMLAHSPaofvYuC sQZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567201; x=1759172001; 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=d4yOr54Zvd4hVdN3lAOIT39h+3zJgH0PiAcUhU01jqA=; b=cxESjNzCFqQ+16G06Hz6LngVPsOMjlb7aqF3qCGbMUljhaccwxvF0lz+ztMQwCQ9bC I8KcBQaDyXrvZYdyzVI1m1CeVKaAyeWqr+uUV3yMWN+uAmHTGoh6exKV2NV/rinVenDK VEzId8hNOoyM4NDV6ohhVMJRdz3eqoVKlvb+pZBpVjIViZHnmh7fk8VAtuXVtL+s8OAB qoe/YNV8CeOJ9jXbO5XhsWxZhK6OLsSozpofDbmM/sehU9GXonx+r+Esv/6V+KhSqpmb Yjhmly6tg4Rghi2e5z1lQVL7Zh6ejRvom9x+Nv0dTH/PEo9NbIE/zn2PoUvmVW1sZ6Pc 7IfA== X-Gm-Message-State: AOJu0YxmqLlxdRfJiVfLg44jzSiuyxs+HWywjOV3NMYbYpeEeO4iQP9p nXMsFtDzZqFscRxQwcyN3IcMd2nQHMh1Aumd6rNgLisbyO/+2C124AoVwaE8u2oWh4gLfxKAGGM 7bb3F X-Gm-Gg: ASbGncsgyYamXx4FnOL8YEzE8GeyrxqOtlwDjRVne4wCWMViniMnR8vSw4xxoUKo8Ec 3Tn7LnITTMLFsRvWpMnvr0MlgZkYoea9nstkBMmDOsxcSp830KOyL88j59/XAUK5e8b9qYQzTLd mRrpOItt4H8rKSEgzcpxAMgIQ2YFzp+Nx/vkfWwlLBUVcqNGsmoBfq3Er3EMHa0yhiqVyCr2f2q m6rNHA52VCpKRzDzxEZ0ypFxwcEWDhS3Va0ibdc349qGdYjsHVA45lURclnn5BZ26tBjknTlzdw 92y7PIkeBsYbLT4G3Z8mxAoH08WYja9D4roJbYG4PXXwTEgd5JSeD6qnbhtnsWqsAZTyg5BeY6s LEaWcsZQCHQeR/Hp8QCOQcfy5lVFM X-Google-Smtp-Source: AGHT+IFMc7gm0OTwbfHcHSv6eNbwOnoeYYuqx7EiCNaoZBZZxxOmjVvYW/F1+yaHXLKcDeKIOgQqRA== X-Received: by 2002:a17:903:2301:b0:275:6dc5:a288 with SMTP id d9443c01a7336-2756dc5b866mr88680215ad.45.1758567200857; Mon, 22 Sep 2025 11:53:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 49/76] target/arm: Implement GCSSTR, GCSSTTR Date: Mon, 22 Sep 2025 11:48:57 -0700 Message-ID: <20250922184924.2754205-50-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567511104116600 Content-Type: text/plain; charset="utf-8" Note that CreateAccDescGCS() does not enable tagchecked, and Data Aborts from GCS instructions do not set iss.isv. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 42 ++++++++++++++++++++++++++++++++++ target/arm/tcg/a64.decode | 3 +++ 2 files changed, 45 insertions(+) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index d607a0afd6..2849805f1c 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -139,6 +139,12 @@ static int core_a64_user_mem_index(DisasContext *s, bo= ol unpriv) return arm_to_core_mmu_idx(full_a64_user_mem_index(s, unpriv)); } =20 +/* For a given translation regime, return the core mmu_idx for gcs access.= */ +static int core_gcs_mem_index(ARMMMUIdx armidx) +{ + return arm_to_core_mmu_idx(regime_to_gcs(armidx)); +} + static void set_btype_raw(int val) { tcg_gen_st_i32(tcg_constant_i32(val), tcg_env, @@ -3989,6 +3995,42 @@ static bool trans_STLR_i(DisasContext *s, arg_ldapr_= stlr_i *a) return true; } =20 +static bool trans_GCSSTR(DisasContext *s, arg_GCSSTR *a) +{ + ARMMMUIdx armidx; + + if (!dc_isar_feature(aa64_gcs, s)) { + return false; + } + + /* + * The pseudocode for GCSSTTR is + * + * effective_el =3D AArch64.IsUnprivAccessPriv() ? PSTATE.EL : EL0; + * if (effective_el =3D=3D PSTATE.EL) CheckGCSSTREnabled(); + * + * We have cached the result of IsUnprivAccessPriv in DisasContext, + * but since we need the result of full_a64_user_mem_index anyway, + * use the mmu_idx test as a proxy for the effective_el test. + */ + armidx =3D full_a64_user_mem_index(s, a->unpriv); + if (armidx =3D=3D s->mmu_idx && s->gcsstr_el !=3D 0) { + gen_exception_insn_el(s, 0, EXCP_UDEF, + syn_gcs_gcsstr(a->rn, a->rt), + s->gcsstr_el); + return true; + } + + if (a->rn =3D=3D 31) { + gen_check_sp_alignment(s); + } + tcg_gen_qemu_st_i64(cpu_reg(s, a->rt), + clean_data_tbi(s, cpu_reg_sp(s, a->rn)), + core_gcs_mem_index(armidx), + finalize_memop(s, MO_64 | MO_ALIGN)); + return true; +} + static bool trans_LD_mult(DisasContext *s, arg_ldst_mult *a) { TCGv_i64 clean_addr, tcg_rn, tcg_ebytes; diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode index 8283a9c83d..2ae73f443a 100644 --- a/target/arm/tcg/a64.decode +++ b/target/arm/tcg/a64.decode @@ -571,6 +571,9 @@ LDAPR_i 10 011001 10 0 ......... 00 ..... .....= @ldapr_stlr_i sign=3D1 ext LDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign= =3D1 ext=3D1 sz=3D0 LDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign= =3D1 ext=3D1 sz=3D1 =20 +# GCSSTR, GCSSTTR +GCSSTR 11011001 000 11111 000 unpriv:1 11 rn:5 rt:5 + # Load/store multiple structures # The 4-bit opcode in [15:12] encodes repeat count and structure elements &ldst_mult rm rn rt sz q p rpt selem --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567864; cv=none; d=zohomail.com; s=zohoarc; b=D3I2+7wV9KT6ZrM2nDP/a6werWKjlfgrv1bUc/rGbfyAy6Qc7ADEi/eyWKvHmwrDCmhEPWZfuLsegn8lQMdsg1Cuk8ggnbgAAg8lfrt3T8/Gf6jAqhXoqqD015qMH2NBaoXdJLQe1DpmyS3GHMFMqS8LR8AScqgrSy158enbpS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567864; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YZyzytTG6Yaz6DpHagIM25/JOwu8QYdC7JKQkoo6/E4=; b=nLeUyfyEXoYsYtIrvh5g6fu/3XSzvjjTkRD4uogL5DzIYwyTYDQSLfysaxmy3xpN7viYmDqEeaWE4EIFguGcSYkN9ysFtVcJAXDlIaA/BbSQMyhgEc4QNJP0TLsKl5GBQS1idmADFo8/QQpyyu9Jxx+wMHx8cIYbFETAewnd1mk= 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 1758567864114416.6466976920709; Mon, 22 Sep 2025 12:04:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgF-0005jd-36; Mon, 22 Sep 2025 14:54:31 -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 1v0lfd-0004bP-IY for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:54 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfC-0004yB-KT for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:52 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-269639879c3so47715595ad.2 for ; Mon, 22 Sep 2025 11:53:26 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567202; x=1759172002; darn=nongnu.org; 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=YZyzytTG6Yaz6DpHagIM25/JOwu8QYdC7JKQkoo6/E4=; b=a9vlamDycBmA8SELDISum7J9sR3vKBdiDtOpUXarUOveL5g/kNwDfCi+gS4EL+9QfV hJvW1voW2THeQysSb/JlWO7lydhtnWa2Q7c/Q/Z6Ct6s56BHpOcuKPHzkg1PWuv4jedF Su+lOsL3LNuDCUQDt3fgNxw0mw3e76lS/Dw/SlQlzBt6McS+KsGkqaO8QVakurFA6iEt p46YXM3on1xeQhxJPy50k1U8OV50REjp/AjZxJWyxirihNZaq0k89sRNiHVRFPrXUgKT meRiAHj3gpN3gQ/YB4QqtCBPDg2m3fPKvsnQlMhZBGvSs6B6G62GdxgG3VYOsukUAz2b s7BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567202; x=1759172002; 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=YZyzytTG6Yaz6DpHagIM25/JOwu8QYdC7JKQkoo6/E4=; b=w5rrj/i7sPr+xKldnDYCR9OJXgK2/jx32vKMZ8MoRGtMbNNQKTNmv3wjDOWrR/O5ZZ CYT5D+vDns3S4DJ5wFdng1ueCpVfrKIErt7dYVIRfnAACNOwCMorpCh3jkaM/fjrYjB6 XsyvViH/gA+K6f3pRkVEeWm7wdP974cw3+GI3zBnuvDThsFD7u/KtLgGN1AiyN3ZluXb sEjkjV1ajYQSRJVPah8Opzou8o9+sbZ+vc/Ln0cLkHvWkakqkYmNO6R0s2hsm/pH16Tg ADtrpGhLoPha86bWfm04/7EMtra62JRQN4kEhOhsoCM8NZa8z/FHBIn4+OyYyGIAtNlZ U9TA== X-Gm-Message-State: AOJu0Ywln33mT67Q2gQGDgLFdkRcnMGsnF1z7SfowfnWlqVNFDrPCUx4 2YJT04vl7cais/KfE93ET041xig8QN9kH6tRmv/4bazOZsbW3xblQ1ctpDgYMy8NXGWXFIKHJYP x3yJm X-Gm-Gg: ASbGncvfJXrBeTLvD8Z6lDAZGVrRIiq8vZtcbwrLEtEjuaJPqKQdW0+FdHGv0AQgzCV Gl7xjO3fdM1Tu1u5lszcgHjin7YZoKsTWXTAV+nqAc185Z+0mQLoM3xsurG7HG3/e4HGxsFzXRq m0/Mh1hijbphfbYPkliHdnyffP7RD8ksvHCUbOFRv0GvtlXAgisd6/NPKFx4nGanL281UuCx2zc OasuL1d++1J4ENglKFln2vuiAdIJOe7zXgvpX3tGM4qHfQpd+T+onc4CdVxkZhZsr2zPqcChsqa aAQDF1dF5j2gQdVMfJdu/C6wuzvZWZooNDVat0+Ke5iSJeDRrssQIOj6O/LH5SGBV8uc5wdWdEW VLVT/hN/3dfCH1TMUZTfEXTQWkRj2 X-Google-Smtp-Source: AGHT+IHDF+lSQomXVZ77tmiKbqM6PI0GOUCHza8kOVKg7aq9Bp+GxqJJgPIEDgsyh0aiNAOSTlOp4A== X-Received: by 2002:a17:902:e550:b0:272:2bf1:6a21 with SMTP id d9443c01a7336-2722bf16e99mr126366715ad.14.1758567201849; Mon, 22 Sep 2025 11:53:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 50/76] target/arm: Implement GCSB Date: Mon, 22 Sep 2025 11:48:58 -0700 Message-ID: <20250922184924.2754205-51-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567865988116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 8 ++++++++ target/arm/tcg/a64.decode | 1 + 2 files changed, 9 insertions(+) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 2849805f1c..7e45197d8a 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2080,6 +2080,14 @@ static bool trans_ESB(DisasContext *s, arg_ESB *a) return true; } =20 +static bool trans_GCSB(DisasContext *s, arg_GCSB *a) +{ + if (dc_isar_feature(aa64_gcs, s)) { + tcg_gen_mb(TCG_BAR_SC | TCG_MO_ALL); + } + return true; +} + static bool trans_PACIAZ(DisasContext *s, arg_PACIAZ *a) { if (s->pauth_active) { diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode index 2ae73f443a..01b1b3e38b 100644 --- a/target/arm/tcg/a64.decode +++ b/target/arm/tcg/a64.decode @@ -248,6 +248,7 @@ ERETA 1101011 0100 11111 00001 m:1 11111 1111= 1 &reta # ERETAA, ERETAB AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 ESB 1101 0101 0000 0011 0010 0010 000 11111 + GCSB 1101 0101 0000 0011 0010 0010 011 11111 PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 PACIASP 1101 0101 0000 0011 0010 0011 001 11111 PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568207; cv=none; d=zohomail.com; s=zohoarc; b=OQxFVjBn+IJpNOOAEDkzra75zaYphZEEUTCdpcOdGs+5O3XV7Jlw+aEuA19br7DdlWMriJ7+V0aPjOvx1tzOXb6iFjCOfO7KSogwqJI/XM1xNndsLutHg+OMYMEh52QixaREHi19toauK+CE6BGfWtIummKYhAuwe0WpW0TiAB4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568207; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=z0CTHCHuiAatusdRHQp8yXTYIa1OlsScLvAXyNFVs1Y=; b=gAGoyNVZZIaIy5a8ohMXg6RANvJUBMeZT5+nYoYK3kV4YTilD/h0Y6UTMnKSD0UeXRTU2WIZXiMbhPPXR0DhOTaNeM6n0gE1qAiSOhfJMmAp+68EPSCN1k0e7ES36DmFf1WOSZ1lo1ypbgTOEBSXb8YQ21Q+7PuTSijC5fC/cGs= 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 1758568207032206.19011148423942; Mon, 22 Sep 2025 12:10:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgi-0006Me-7S; Mon, 22 Sep 2025 14:55:01 -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 1v0lfV-000401-13 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:46 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfC-0004yG-Vt for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:44 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-b551350adfaso3678681a12.3 for ; Mon, 22 Sep 2025 11:53:25 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567203; x=1759172003; darn=nongnu.org; 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=z0CTHCHuiAatusdRHQp8yXTYIa1OlsScLvAXyNFVs1Y=; b=WqfN9J84b3Ejglxc/eOiiVNZRn2ZH7XR34/CnVq47689nQd/C+EOK6zbcEf75OINTO ARnlSNMgiFMrzW8hKkGQN+OwlFWTsLMy9iOBIalGeqD4n1v/+F6FUytGaAU+3qzJo7xJ SySMOwSRpfBFMwLqXe243Ffi27EQWEryyltz21sPuZpTS0M5nbycDeMsESAH8eY1kRg6 A1Ru3TIt7pSXjNa4LdekIW7WFa6N6sLsGGK38WukULSKFD8CxSG8yhciL5hBkQR5FtV9 tO8wsGE6IQ/y4Qbya7gBi88oAC6KzGOSpCQGDxJxjxNXXJIrLxrNe5osVnFoJaIyVSX9 8OxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567203; x=1759172003; 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=z0CTHCHuiAatusdRHQp8yXTYIa1OlsScLvAXyNFVs1Y=; b=HkNoyzO5LBfmrQHaQ7uXj1joEzAUX+zqIpnw5u6h5HSfJZ5q89jVRha+HitpMV8CoH 2AGdmTE/69nfX0JtWm0Zc98GjRnNWxUzzvcL1Q5ylvSSvjZ8jTYyw4LNU7GJEwLwcDW1 tQEFtJJlymzPhtaqWuEzYBtm86+J2Es6JBPqykVtUrOpS+HrtCSzqeBH8E9pfTP/V1J2 sNlfKENsTFAjgNMx3vkhEwgxdDypEJzWk3vgh5QjEnuEQoZAFIpRMHVx1pzuEiC9K00b 5Jnnq3STOiuZK2Y+o0/zagGDoZ0b2hBXWrTDqEealxhnMR+cS3kdS8HWXQQPieuS4XfQ paCw== X-Gm-Message-State: AOJu0Ywe9t3+mbF/0EYm/ylgwaQFpjQE8c8jgCWnJRozmO/nuz+w/ckC H5Ep8rHubO2WId0SDQ+N4LIgx4hjZNgaVctfqonzA0v15h5P/o9XJBvCwCPB3Cw63zhA6z0kN07 B+ook X-Gm-Gg: ASbGncsFoIpOwPDcrlGLDuK8TpeErHFVvyK4G/6k7+4qOyX4MaX0z9R6Le/d3hMNeUx laVG/FOHZNMymR3114Ybhe23opUB1W6gb7VR+pmgNDTW/2UrSTUpspkQC4tyKd2APZCc3ynZU/0 NJb/bn4+GKuxEKRccR45QgF91YceKmFMDIYwQ+W/uSxfx3zRHWd0cXmLYIFEvstKdAkI/QWcl+/ 0PK7/yKyDv37DQMHrrU7E9ZIdHhI3LnxF3EnC8dGCtDrxcsqbfYLM53W8ZII+CEFxO5wkE9txVu 5BMk86GwXA0JUa2TrqL80mepbpKfbGeBj1fCaud6nAYX59xbcD4ncmQLo4JhXbeHGOOprdaafeq h/2yvlgiVNoO2X8muPerBgP8BtVXd X-Google-Smtp-Source: AGHT+IH/yOmd3njL5lk9yBqpACCUQYga68P914PkIhdkCoAbb1eyVFUy+ejyCqnVofIIGZbptjsRQQ== X-Received: by 2002:a17:903:2285:b0:268:f83a:835a with SMTP id d9443c01a7336-269ba575f3emr162514145ad.60.1758567202804; Mon, 22 Sep 2025 11:53:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org Subject: [PATCH v5 51/76] target/arm: Implement GCSPUSHM Date: Mon, 22 Sep 2025 11:48:59 -0700 Message-ID: <20250922184924.2754205-52-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568207418116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 3 +++ target/arm/cpregs-gcs.c | 15 +++++++++++++++ target/arm/tcg/translate-a64.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index a79f00351c..d22ae383cd 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -47,6 +47,8 @@ enum { ARM_CP_DC_ZVA =3D 0x0005, ARM_CP_DC_GVA =3D 0x0006, ARM_CP_DC_GZVA =3D 0x0007, + /* Special: gcs instructions */ + ARM_CP_GCSPUSHM =3D 0x0008, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, @@ -871,6 +873,7 @@ typedef enum FGTBit { DO_BIT(HFGITR, DVPRCTX), DO_BIT(HFGITR, CPPRCTX), DO_BIT(HFGITR, DCCVAC), + DO_REV_BIT(HFGITR, NGCSPUSHM_EL1), DO_BIT(HFGITR, ATS1E1A), } FGTBit; =20 diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index 1ff041811d..cc5a0b86e4 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -43,6 +43,16 @@ static void gcspr_write(CPUARMState *env, const ARMCPReg= Info *ri, raw_write(env, ri, value & ~7); } =20 +static CPAccessResult access_gcspushm(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + int el =3D arm_current_el(env); + if (!(env->cp15.gcscr_el[el] & GCSCR_PUSHMEN)) { + return CP_ACCESS_TRAP_BIT | (el ? el : 1); + } + return CP_ACCESS_OK; +} + static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSCRE0_EL1", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 2, @@ -85,6 +95,11 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { .opc0 =3D 3, .opc1 =3D 6, .crn =3D 2, .crm =3D 5, .opc2 =3D 1, .access =3D PL3_RW, .writefn =3D gcspr_write, .fieldoffset =3D offsetof(CPUARMState, cp15.gcspr_el[2]) }, + + { .name =3D "GCSPUSHM", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 0, + .access =3D PL0_W, .accessfn =3D access_gcspushm, + .fgt =3D FGT_NGCSPUSHM_EL1, .type =3D ARM_CP_GCSPUSHM }, }; =20 void define_gcs_cpregs(ARMCPU *cpu) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 7e45197d8a..e2af10c075 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -26,6 +26,7 @@ #include "cpregs.h" =20 static TCGv_i64 cpu_X[32]; +static TCGv_i64 cpu_gcspr[32]; static TCGv_i64 cpu_pc; =20 /* Load/store exclusive handling */ @@ -77,6 +78,10 @@ static int scale_by_log2_tag_granule(DisasContext *s, in= t x) /* initialize TCG globals. */ void a64_translate_init(void) { + static const char gcspr_names[4][12] =3D { + "gcspr_el0", "gcspr_el1", "gcspr_el2", "gcspr_el3" + }; + int i; =20 cpu_pc =3D tcg_global_mem_new_i64(tcg_env, @@ -90,6 +95,13 @@ void a64_translate_init(void) =20 cpu_exclusive_high =3D tcg_global_mem_new_i64(tcg_env, offsetof(CPUARMState, exclusive_high), "exclusive_high"); + + for (i =3D 0; i < 4; i++) { + cpu_gcspr[i] =3D + tcg_global_mem_new_i64(tcg_env, + offsetof(CPUARMState, cp15.gcspr_el[i]), + gcspr_names[i]); + } } =20 /* @@ -420,6 +432,18 @@ static MemOp check_ordered_align(DisasContext *s, int = rn, int imm, return finalize_memop(s, mop); } =20 +static void gen_add_gcs_record(DisasContext *s, TCGv_i64 value) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + + tcg_gen_addi_i64(addr, gcspr, -8); + tcg_gen_qemu_st_i64(value, clean_data_tbi(s, addr), mmuidx, mop); + tcg_gen_mov_i64(gcspr, addr); +} + typedef struct DisasCompare64 { TCGCond cond; TCGv_i64 value; @@ -2803,6 +2827,11 @@ static void handle_sys(DisasContext *s, bool isread, } } return; + case ARM_CP_GCSPUSHM: + if (s->gcs_en) { + gen_add_gcs_record(s, cpu_reg(s, rt)); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567463; cv=none; d=zohomail.com; s=zohoarc; b=g6O/bTcOSCP9e9YK86s6S+KnKhjjl4NRFT3jsG5BxUMuaKPjU/7EngbruwM+KEsKhnunMqptEyr0oSLeM0nfUwd3/XUN9r7xXHmTCW6673UaGztleBJ6vZ+GKWR2WvvkjWL1U/1eSbOOKw+Da1++2lEC3ibh8Zs4e0FdkdXgMIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567463; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KT3njcGs3vlqxz+Aow0s8BlO+cvKAJjqrO8q+9uXab8=; b=Sq4m+ZQKQDYpDH2b17b/8DvknPUSJ5XFBrScZOBNHbXafeGg3NohgZTdVIQrMUrKuTesK3o5vkSehAiZfNmO0S4Rbi6hMY2q3XtyJuzV9qm9uflKuWm7WF0jyv2j6oFIwaE8f5yVomngbmEc0ZBsfZYU+ItVazuTdOoMZ1vLMig= 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 1758567463065485.4395858853079; Mon, 22 Sep 2025 11:57:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lfx-00050U-M7; Mon, 22 Sep 2025 14:54:17 -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 1v0lfX-00044P-4q for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:47 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfD-0004yP-0j for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:46 -0400 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-b55517e74e3so1361945a12.2 for ; Mon, 22 Sep 2025 11:53:25 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567204; x=1759172004; darn=nongnu.org; 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=KT3njcGs3vlqxz+Aow0s8BlO+cvKAJjqrO8q+9uXab8=; b=DDgZh9wrDbwWFozu/+amIkiUQw7D+zpuO0mpBwPmXJMIWJyMehxXILD4YAGn27UG7s v73nriBqgQ5tXia2aYmIUipnU74OQpTE/ATNx4lbRjWmUBlgbu9A7n1BYAmLZhTDd5e5 AeyBobKM1CNP/RYNPKVFZEHgnPuZ1SfbgaJWgtnJEic3gK9SUNKhg+8ijXVbrr/JPsWk 5sHNmIBwWPbA8yCsJ3mOM9sMVziHvZo6Giw94gsHANS/0oPVjkJFy43gGPt+pVqk//rB YJS5fGeCqS+2XKaqa1wvNqnc/EI255B/j3lKYv31cKXYR4xCsdmdl1tQhO3AvmNErkLQ HKOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567204; x=1759172004; 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=KT3njcGs3vlqxz+Aow0s8BlO+cvKAJjqrO8q+9uXab8=; b=JVNe2HibKSYVVGjpkxNh2voXdD9k22n+3iXcJsEUTLRb82USqM86fZSe5lvToUnHCw CDn9XM3wyrV8mhdRf/pbtR02fPen8pfbdFRHEfFh5e25Cf6MPnzXFzd7yWN9LZ7GA9fh 0jYWtngIqhV0YQYo0ZMdbdHd29UlftpOeGNhnEXKrXvNnXOidRlUs8wd5fYWOBRR2OVf xbe9S2po1aYmJaCaWYKbNL+9/lwp4AhRyNjxAUlJz+vGEnnzgLwJEfZTF0OPhA6ZEMfw uNFWz0Jc8kxpg0QZZ1kdHPZNshLq1blvsDxHJ9BugzuipS/L5Dsuby7J5uoS6V4SBggS FTrw== X-Gm-Message-State: AOJu0YzekB+FVCwd/htBZKUX5lYPFXmbCFg+Q4VHH/BAEz4MKvaUohiT uaxu+F5kJ7zmW0jyHguUj9SMjvV0WALGWcq5//dIvBBlviCE2WJ7yZQiE38LRXELDs9a2LVT+5H B5MNC X-Gm-Gg: ASbGnctXzJKEr5PjTK5KcCRePYI693MG/slw2DTlexMR6Z/xmVLVE0FOkZq/AUjRGRF 7L8yACndGyCX6C21/lOinUfuW3c+I3qOupIvUCjpnRY/PyVA7qHph9zJ7cE0jhfqFwoyvI5iVjE bv7b1Ri1PsLDQdNpVvPJB8/Wh4+IX9quCAbQcOIZpBjLVbFu9uS2yxm8ypISapw1/eEfNCnE7xd OOsAMmNvdKym4ojfXfJ3YX7tZbUT/9hnnRcEXMR48zmOGsWt/FmZ4Btuus0hJ2wPtE5e3AwgvsB PrY5LbhDqdEmwMfo+GplxGPjqvUdqXYdioWz6pDYfqZFq9V0ZtHbTNH6aNIQMgQubSl4sG/9mix Qfix/2YQiIBgTORGJ5IWj9rxX7zco X-Google-Smtp-Source: AGHT+IHj8n8IItN0eTMc7vp39f1NJ0fYhpL3F7oia4f6F21zcFsXwWHfljHADvwuyM0xrZpybIogxQ== X-Received: by 2002:a17:903:b48:b0:24b:e55:334 with SMTP id d9443c01a7336-269ba3ec96cmr146371725ad.8.1758567203575; Mon, 22 Sep 2025 11:53:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 52/76] target/arm: Implement GCSPOPM Date: Mon, 22 Sep 2025 11:49:00 -0700 Message-ID: <20250922184924.2754205-53-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567464561116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 1 + target/arm/cpregs-gcs.c | 3 +++ target/arm/tcg/translate-a64.c | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index d22ae383cd..81d8f0e32b 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -49,6 +49,7 @@ enum { ARM_CP_DC_GZVA =3D 0x0007, /* Special: gcs instructions */ ARM_CP_GCSPUSHM =3D 0x0008, + ARM_CP_GCSPOPM =3D 0x0009, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index cc5a0b86e4..15d383b2a4 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -100,6 +100,9 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 0, .access =3D PL0_W, .accessfn =3D access_gcspushm, .fgt =3D FGT_NGCSPUSHM_EL1, .type =3D ARM_CP_GCSPUSHM }, + { .name =3D "GCSPOPM", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 1, + .access =3D PL0_R, .type =3D ARM_CP_GCSPOPM }, }; =20 void define_gcs_cpregs(ARMCPU *cpu) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index e2af10c075..c52b02b003 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2521,6 +2521,24 @@ static void gen_sysreg_undef(DisasContext *s, bool i= sread, gen_exception_insn(s, 0, EXCP_UDEF, syndrome); } =20 +static void gen_gcspopm(DisasContext *s, int rt) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 value =3D tcg_temp_new_i64(); + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(GCS_IT_GCSPOPM, r= t)); + + /* The value at top-of-stack must have low 2 bits clear. */ + tcg_gen_qemu_ld_i64(value, clean_data_tbi(s, gcspr), mmuidx, mop); + tcg_gen_brcondi_i64(TCG_COND_TSTNE, value, 3, fail_label); + + /* Complete the pop and return the value. */ + tcg_gen_addi_i64(gcspr, gcspr, 8); + tcg_gen_mov_i64(cpu_reg(s, rt), value); +} + /* * Look up @key, returning the cpreg, which must exist. * Additionally, the new cpreg must also be accessible. @@ -2832,6 +2850,12 @@ static void handle_sys(DisasContext *s, bool isread, gen_add_gcs_record(s, cpu_reg(s, rt)); } return; + case ARM_CP_GCSPOPM: + /* Note that X[rt] is unchanged if !GCSEnabled. */ + if (s->gcs_en) { + gen_gcspopm(s, rt); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567595; cv=none; d=zohomail.com; s=zohoarc; b=i3ZmOikMDZI0YfIeGcvC1JAuHi/dlD+jyX0G/fWpASARGGYCM7jV+pg7kPn6iLbZt6qgh5avKgxb93CVQTtu48L6Rrhs/8UFmHPcpcjDqeTWmir872kgivdAbu5sVWR/lb+txFOcSlZiuca804qYuTu1aQjSmibqpDZJoZlS2mI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567595; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nJnBJjRiP4y1OwdJ2Ay72udjkm2SYCj+86pxIAQKNCE=; b=bVK3uAdYK3P8NhXg0SrTaQWrO22SwhGdVlmuX12FOLZn7WEyZ6F2mN/j11Q0i0EwpRrcx/xurMmRVMZ3WzJq5VHxQA3tPTnbZNiGm829/woeb6gqq/7T8ovu1toReKFtiOX3LY0zXkk3xSmg+m6PbO8g7bsVh83itOuU9/ceH4w= 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 1758567595674613.549693967734; Mon, 22 Sep 2025 11:59:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhF-0006uR-6x; Mon, 22 Sep 2025 14:55:35 -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 1v0lfe-0004hD-Vt for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:56 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfD-0004yb-Eh for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:53 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-27a6c3f482dso8198785ad.1 for ; Mon, 22 Sep 2025 11:53:26 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567205; x=1759172005; darn=nongnu.org; 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=nJnBJjRiP4y1OwdJ2Ay72udjkm2SYCj+86pxIAQKNCE=; b=EJ5acCxYA4rwYJsEzbyfi8TxxKNHYZim8wa4Lx0qmeYUBDgLRvJ55eeOTwKQRFR22I p/OTYa8FV8Z5e/z6Q5AGD44xAWWIT5OL2F2MfZWLWDj25KuKU6RhrhoekIrm7gwXMsNa j/OhBSC/tr7IYF91tcPvemLtVR/jEjVrpf/j2r7ykoyWsDhXmG1x4CX9ef+aCRmYhEVz zevH0GhppNWIFyhJ4Cy4UbssYtlTtXXFv8cwvocx5EUHN+7M8GOiiqaBwwKqbemKLR5S 499xIwKyGQwN7TVk6rNeU7zNpewjihEe5SBQ8QENijonZca3iJ/XLSvbXNR0fEgwSTlD +mSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567205; x=1759172005; 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=nJnBJjRiP4y1OwdJ2Ay72udjkm2SYCj+86pxIAQKNCE=; b=XMSgjhWS+9ARrfNlbMBTgNif+lLfmKLcP1Ist+v6XYP2YoSfQZgfWgiFJVbYxB5mjG 3CFsfP0eh9Mhme/arhOx1el96hP9BkP1qx7BT8O48Wloo1lizW2gOF6yzVSFXE3hcRaM aZlfaTgIhnooKL+/XDFC0S3ZRFsCtG0zq1l0EPn2zhfE7hKZezn/WolfCSEPNpcrQMP/ EPGB57HDKw3Qjn+q2nkCbuJVxUkMoMRqRI+ACORD5d6yJJgBJXD2OIChK8mohKwSkj5n 6J3D19hoY6BsPuOD3b+2I1NiNwYNblvUpaGCMXpcd6zvL8gGomcvmaoxLXcdHROpQU0F EP+Q== X-Gm-Message-State: AOJu0Yx2nXK9bZLskzZgm+UKODtPaP42ZaGn64m94G5wvm2qfyTefmRQ trCPW3tnCN2yblzQ/GnXbrBJZ7xZlIFmVFqaOkSu0DTKpKq6HaI+LhHSL8c9uS2tblP9fkyzTtl Y3Dsb X-Gm-Gg: ASbGncv9sb997pYYBFNWFeyOzYTnnqP/wlZLl1xUwnEakPUjcsuG8lGcgQgPYeO1QiX s+hrG8DV5z9d1qbuZd99cyOxwOHF5xIbUehfhs5Q6IxxYA/9kQhDpkuu9+RD0wRO0ovKTz2AjR9 2d9VWH+1M/NzNkl/WM2byC4WA0S7T4UUGP9FSV0cp9qCbDoqsabRRFVNcmb0oCbC0rP8XLIoKXu 2ljBuftsmtg1W2JHsv1RQCil9zNQAfvDRYj+V3ylbZYchZpVFk2RSGbhpTDFg8mgX97nTDjDxec yiABbRZwkVOL15g9UW4XNK4+wWKMMWM2TjHGEceB3OvPzrSB9QmXfvJlnBka06yc8DJoaHpjVWF 9uCqWRdue5HY/MxM6/OPOD3q9fLUnVzY158f4K1M= X-Google-Smtp-Source: AGHT+IHgLgesiMCFf2XrkmVacjLeG/kS2zjrYQJcMylxE2oiEUg2pp0Tl5i22vTBZhGfwFpR3mJFAA== X-Received: by 2002:a17:903:4b04:b0:235:ed02:288b with SMTP id d9443c01a7336-269ba5167bemr156647975ad.30.1758567204641; Mon, 22 Sep 2025 11:53:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 53/76] target/arm: Implement GCSPUSHX Date: Mon, 22 Sep 2025 11:49:01 -0700 Message-ID: <20250922184924.2754205-54-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567596239116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 2 ++ target/arm/cpregs-gcs.c | 17 ++++++++++++++++ target/arm/tcg/translate-a64.c | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 81d8f0e32b..909916b7fd 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -50,6 +50,7 @@ enum { /* Special: gcs instructions */ ARM_CP_GCSPUSHM =3D 0x0008, ARM_CP_GCSPOPM =3D 0x0009, + ARM_CP_GCSPUSHX =3D 0x000a, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, @@ -875,6 +876,7 @@ typedef enum FGTBit { DO_BIT(HFGITR, CPPRCTX), DO_BIT(HFGITR, DCCVAC), DO_REV_BIT(HFGITR, NGCSPUSHM_EL1), + DO_REV_BIT(HFGITR, NGCSEPP), DO_BIT(HFGITR, ATS1E1A), } FGTBit; =20 diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index 15d383b2a4..e6c7025d02 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -53,6 +53,19 @@ static CPAccessResult access_gcspushm(CPUARMState *env, = const ARMCPRegInfo *ri, return CP_ACCESS_OK; } =20 +static CPAccessResult access_gcspushx(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + /* Trap if lock taken, and enabled. */ + if (!(env->pstate & PSTATE_EXLOCK)) { + int el =3D arm_current_el(env); + if (env->cp15.gcscr_el[el] & GCSCR_EXLOCKEN) { + return CP_ACCESS_EXLOCK; + } + } + return CP_ACCESS_OK; +} + static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSCRE0_EL1", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 2, @@ -103,6 +116,10 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSPOPM", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 1, .access =3D PL0_R, .type =3D ARM_CP_GCSPOPM }, + { .name =3D "GCSPUSHX", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 4, + .access =3D PL1_W, .accessfn =3D access_gcspushx, .fgt =3D FGT_NGCSE= PP, + .type =3D ARM_CP_GCSPUSHX }, }; =20 void define_gcs_cpregs(ARMCPU *cpu) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index c52b02b003..6fe6a77b34 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2539,6 +2539,35 @@ static void gen_gcspopm(DisasContext *s, int rt) tcg_gen_mov_i64(cpu_reg(s, rt), value); } =20 +static void gen_gcspushx(DisasContext *s) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int spsr_idx =3D aarch64_banked_spsr_index(s->current_el); + int spsr_off =3D offsetof(CPUARMState, banked_spsr[spsr_idx]); + int elr_off =3D offsetof(CPUARMState, elr_el[s->current_el]); + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 tmp =3D tcg_temp_new_i64(); + + tcg_gen_addi_i64(addr, gcspr, -8); + tcg_gen_qemu_st_i64(cpu_reg(s, 30), addr, mmuidx, mop); + + tcg_gen_ld_i64(tmp, tcg_env, spsr_off); + tcg_gen_addi_i64(addr, addr, -8); + tcg_gen_qemu_st_i64(tmp, addr, mmuidx, mop); + + tcg_gen_ld_i64(tmp, tcg_env, elr_off); + tcg_gen_addi_i64(addr, addr, -8); + tcg_gen_qemu_st_i64(tmp, addr, mmuidx, mop); + + tcg_gen_addi_i64(addr, addr, -8); + tcg_gen_qemu_st_i64(tcg_constant_i64(0b1001), addr, mmuidx, mop); + + tcg_gen_mov_i64(gcspr, addr); + clear_pstate_bits(PSTATE_EXLOCK); +} + /* * Look up @key, returning the cpreg, which must exist. * Additionally, the new cpreg must also be accessible. @@ -2856,6 +2885,14 @@ static void handle_sys(DisasContext *s, bool isread, gen_gcspopm(s, rt); } return; + case ARM_CP_GCSPUSHX: + /* Choose the CONSTRAINED UNPREDICTABLE for UNDEF. */ + if (rt !=3D 31) { + unallocated_encoding(s); + } else if (s->gcs_en) { + gen_gcspushx(s); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567645; cv=none; d=zohomail.com; s=zohoarc; b=GybWFuH6wF/nMX3ns86nGYWPXQTSUX4lBNkm+eY+6VvbXfaCklQr7cCwTJr7FTAjv2IMK/oiCzgoKQkoKPEP8Uug1NLgk2Ads4eT/L7s02M5Vm5bZTUeDBxyxx8ohuEFPten2eZJqCdGvJEw92Z/1p8atUgl2ahd2jW/xyZq5ZY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567645; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QyGSBtDt/qdLtu6eEffMpzz9yijul6ARqOZAVPBfMMo=; b=WkxWWOyhfm4x+AA2HY608oaOJwJeVwTeoz/PAahIRgp7kx2JIoXOkIPsF8GvA/VXPPbbAZbFtzuHLnV9q0OB8u2dDyMjJLzm/T5MFx9f/C0bVD9TNTZbuC/hUvAvFND6d27pJapaMlF5F0zyx1npnMjsIJKcdG9u51S5vdt/gYY= 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 1758567645477356.2383057574848; Mon, 22 Sep 2025 12:00:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhO-00070B-Jv; Mon, 22 Sep 2025 14:55:46 -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 1v0lfi-0004kv-H1 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:59 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfG-0004yq-R6 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:58 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-25669596955so42735345ad.0 for ; Mon, 22 Sep 2025 11:53:28 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567205; x=1759172005; darn=nongnu.org; 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=QyGSBtDt/qdLtu6eEffMpzz9yijul6ARqOZAVPBfMMo=; b=jpleQRElbu7wspTOxSOhfnGJgrlXPIcdkfA14M0nf2EqIDWE+HxndIP04OlzbtP5eu UuJ63Z/Ywubs1bFfefW4U/gOwzs3jVTTu1kjfL9bGxgb1tgMXuxx7NUZLwPidr941u8/ lNf+XekLiX2ofYPFBmypppLE1olE+4lGGAH5LzhuRYMTlTAUsdOc0hpU2b+1irbmkYHv JQV0zuCVmkg1Mvp9qNj/JYkE/eziKAhP7D4DLVL+JuSLHdNcm604qgarLPrtraCEI/Gd Js+cypvZbn5Q+pj4opyIkkHNsKRiNHRiZTu5uC2XkKVqq/dambtWfWjV5+xjejlefmNJ X/ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567205; x=1759172005; 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=QyGSBtDt/qdLtu6eEffMpzz9yijul6ARqOZAVPBfMMo=; b=jjW4NAlSqoQlp5bdJuUsOyNh/jc2xnrDmertcyAoBAx/Sa02AX6z0gTSdjYZN5BVga KU/Sy0Y6LQamJE9fNXrLP4PE2k7rvB96s4KuKt22vS1rK/EWt4GHoCaiHckv9CHJdpez iSlcW2jIM80qg69LTOmk1RMnwzHTaomY/Aq78CRzyIv73vFYcUshotSy0fpQ1bLdlhTs kCgR6fisEH7uXXDu36rooHMYVxnNrHNzXuWaPqpW9yCHURttzQur/R2TFI/f/N7xlPMX dmTLcGGTVRPqF2p7QxfILLYZDAMVb5ypW3lgB2Fk2Xs1s2R/eE7ut+22M+KWJn8Ed+dY CxMA== X-Gm-Message-State: AOJu0YzS5RQ/W9zAkg1EAWxEjV8eDsv4b2/lUib3AQ7J6b5nHmcd3Glr 211fU8ZP7M8NFy4MeZ48Hiob/LhY328yA89M2Fz3oVBnbew+fOpPVQyf2vnsNQu9CdW1JQuFWVs H4uHX X-Gm-Gg: ASbGncusJQynZyRa6dtZKtDH1dp6JYEwFVE77i2frWxwbIGjiwSWk5i1NtgI1Hu5YTG yQG5Y2PyBmbXRh0bxFbKPKJWiKnaAaw7377Al0I+CtqWYoM3J/VK7Mkr2It8ihOIQ807iWTkeuG lVyWpNnNJpNGcbTq1P8FDv8dAb4Q9oS+QM8xSF7I/IpFVUFQIIBKcyM/gUK+9LxrpgvFy3M6HOq 5MAIEcH8u51Q8mdBfZ2bBWTSGZJ3swrIVGKzHHEU0T391/6lj06zasQ59lBriUf7FJo1Qzlmx/0 s+bPcFRttsaHqL9waxEGMfNrG7F+iDSTQu6yPNxow6jrPhC3+SvcZPvWvR5mY74BXekYNiY5YNW 2DvTA1kor9ICTfuYasM5oWGFTYTCd X-Google-Smtp-Source: AGHT+IFXmwOU7IOzEX3sH0O58U3wfiEe62J54tNcSMYVqazDPNrJv/s9kenDsHXUTIt1M0GkShBpuA== X-Received: by 2002:a17:903:19eb:b0:276:9863:44da with SMTP id d9443c01a7336-276986347dbmr66180185ad.8.1758567205625; Mon, 22 Sep 2025 11:53:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 54/76] target/arm: Implement GCSPOPX Date: Mon, 22 Sep 2025 11:49:02 -0700 Message-ID: <20250922184924.2754205-55-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567646996116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 1 + target/arm/cpregs-gcs.c | 3 +++ target/arm/tcg/translate-a64.c | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 909916b7fd..ccf45fd136 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -51,6 +51,7 @@ enum { ARM_CP_GCSPUSHM =3D 0x0008, ARM_CP_GCSPOPM =3D 0x0009, ARM_CP_GCSPUSHX =3D 0x000a, + ARM_CP_GCSPOPX =3D 0x000b, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index e6c7025d02..5b5b895a09 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -120,6 +120,9 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 4, .access =3D PL1_W, .accessfn =3D access_gcspushx, .fgt =3D FGT_NGCSE= PP, .type =3D ARM_CP_GCSPUSHX }, + { .name =3D "GCSPOPX", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 6, + .access =3D PL1_W, .type =3D ARM_CP_GCSPOPX }, }; =20 void define_gcs_cpregs(ARMCPU *cpu) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 6fe6a77b34..c1852e2c5d 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2568,6 +2568,33 @@ static void gen_gcspushx(DisasContext *s) clear_pstate_bits(PSTATE_EXLOCK); } =20 +static void gen_gcspopx(DisasContext *s) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 tmp =3D tcg_temp_new_i64(); + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(GCS_IT_GCSPOPX, 3= 1)); + + /* The value at top-of-stack must be an exception token. */ + tcg_gen_qemu_ld_i64(tmp, gcspr, mmuidx, mop); + tcg_gen_brcondi_i64(TCG_COND_NE, tmp, 0b1001, fail_label); + + /* + * The other three values in the exception return record + * are ignored, but are loaded anyway to raise faults. + */ + tcg_gen_addi_i64(addr, gcspr, 8); + tcg_gen_qemu_ld_i64(tmp, addr, mmuidx, mop); + tcg_gen_addi_i64(addr, addr, 8); + tcg_gen_qemu_ld_i64(tmp, addr, mmuidx, mop); + tcg_gen_addi_i64(addr, addr, 8); + tcg_gen_qemu_ld_i64(tmp, addr, mmuidx, mop); + tcg_gen_addi_i64(gcspr, addr, 8); +} + /* * Look up @key, returning the cpreg, which must exist. * Additionally, the new cpreg must also be accessible. @@ -2893,6 +2920,14 @@ static void handle_sys(DisasContext *s, bool isread, gen_gcspushx(s); } return; + case ARM_CP_GCSPOPX: + /* Choose the CONSTRAINED UNPREDICTABLE for UNDEF. */ + if (rt !=3D 31) { + unallocated_encoding(s); + } else if (s->gcs_en) { + gen_gcspopx(s); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568011; cv=none; d=zohomail.com; s=zohoarc; b=UKviSLtBy/5MuzDHTdkVlqoke6WfIuy3n/oOYlpCROeozSSIJpOYtk4FmjogD9VIheLUMPtBNtFZ9ybvV2w8KfGVQbRW2R0Z39dG+e9EDkyoj3p2u5beYYGkTOdnX1mb68j/6iU1bL/3tqM7c1VcM8SgatwbiQrMXUfyf0Bc7ME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568011; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FOf+V7iXKEQ87gc87S31iBQI+ufnBC8kf+Au1UAqMt4=; b=is3MGktDg7k9ALKZ/Nndg10Xwz9BLf5XaxE6O+mQ+BstUJs3uPTckJY4Di3fdhyRdDTuHdExBCWVqypYuRbdWMjdqRAneUTpKEreEBV1aKST3akDQa+BlGsQRb/D5daaWY1GYXTLg8yBgnaEF3AL0Ti/fXu9EvjqGTw4jrm7mXY= 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 1758568010919910.164338969231; Mon, 22 Sep 2025 12:06:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lge-0006DH-Eo; Mon, 22 Sep 2025 14:54:58 -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 1v0lfk-0004lE-61 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:01 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfF-0004z8-Ap for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:58 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2570bf6058aso63814785ad.0 for ; Mon, 22 Sep 2025 11:53:27 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567206; x=1759172006; darn=nongnu.org; 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=FOf+V7iXKEQ87gc87S31iBQI+ufnBC8kf+Au1UAqMt4=; b=Uh/2BSn5bPqOh/3OS4tp/PK+c61YPXwhiKukmKdTpUrh1aBS6ZtzojshIHa3k3xxQE J7sJGebRkvv625GdgPloeWJme7XT2NrabE9tK4W/RH77MS2zK+YVKv7RUs35BSsnlSU2 qk3t8Q4AjyidvU4+ZXhRVJZVH53GwJ0mkBEmU/HOddxUuXnkBjBf82ExFJIiEIW0ML8t Zf8c5gX8M1wnVvS7X6sq/7lZZDJes548Kb6uwoKhFP3Jfg3B78vLxk/YEMHNz7uGMFim kmDbKW1hshVe3mPsl6bZI2TtnVhMJm10WDMQwNQZk8Qiw3qEJqlEsPOZcYwJKkrOc6r8 prtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567206; x=1759172006; 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=FOf+V7iXKEQ87gc87S31iBQI+ufnBC8kf+Au1UAqMt4=; b=NLtew80OuFtEH++aEX7QrbutXOs02JVKgpq/QC+q9I1oLa9vGzcfuaKLlUbphicBOc eFxG8BJWOKXJ6ZpARrlY0qHzr13ry4xTDf/uOFF2dhIdowGSMVjg26Dcdm74VpJt/wDP dMdRPErX84nrDBHqvMXYBuZBO0VGjsSQo8/Gwfq6tmpYWWCAd+JIYWl5NBv4xfCPRHwt MxHpAWRmXOtrc3D9ujNv7fMFxttA8CgpexTArwYuyrM4/FYotLumnnjdMGG7jLleebpp YEa0f+qLSrh3K3O2aThS0E2iF73PHI7m0KWd50aGk7CINvNc1mhWLngZJTFMbS2C1BQu 5Mrw== X-Gm-Message-State: AOJu0Yz0Jj2KTBWq+S2t35tFTgRHZ8cTn1jNz9EZO/6nhZ0Z5zs7wvCr z+6TmHkYAe3xB2ZudFfd8WtwdhUIEVM0mzpANmeLldeFRNBi0DBBcMpTc7NW9EQS5fo9zinZ8+T LHh76 X-Gm-Gg: ASbGncveveVq+TB0JRS2IjR1hDrI8L5rrQb0x08sYFCb36mK1xNzarGmSU+9VdjpgLS nuVe16rj+ScApu4+gHkcRGun7JiAwSzzvGLpkYZ/HxTfOdgFxgE1HuwoRO5H6FVeUdYhZfIbHKl qqzA6VMCvFbCu/tJenVco2qNtolZwH/5fnh1puv++PGjpiQwLSxVJWURw1Cq5V70AOiUmHFfaed Jjt1WMIdS07o3sO2+H+ns61yRwaR/ENPRsfM+nKAd7WNblWAq0CXzCL5eHHXoT5kBvl8I6aiPT8 mQ2EcBXqguR6kSQfx3JG6Y6wQ+uLpGMSGiYBQMxE6dVnCdXFIO43ie8NhdJKMsxsKtSdHKLIpPk nopxQot8hhFiwkV6zryqVfnIfHnw1 X-Google-Smtp-Source: AGHT+IHCCKV+nnFgyIC4gxg1U5Z6rPO1ZUp5OQwJyINZdG7oNwPgj2yFV1GzH2k9tW8JAB0/DO8lAw== X-Received: by 2002:a17:902:db0e:b0:24c:ca55:6d90 with SMTP id d9443c01a7336-269ba5762dfmr157929885ad.61.1758567206414; Mon, 22 Sep 2025 11:53:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 55/76] target/arm: Implement GCSPOPCX Date: Mon, 22 Sep 2025 11:49:03 -0700 Message-ID: <20250922184924.2754205-56-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568013489116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 1 + target/arm/cpregs-gcs.c | 17 +++++++++++ target/arm/tcg/translate-a64.c | 56 ++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index ccf45fd136..6d9145109f 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -52,6 +52,7 @@ enum { ARM_CP_GCSPOPM =3D 0x0009, ARM_CP_GCSPUSHX =3D 0x000a, ARM_CP_GCSPOPX =3D 0x000b, + ARM_CP_GCSPOPCX =3D 0x000c, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index 5b5b895a09..3795bf7f36 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -66,6 +66,19 @@ static CPAccessResult access_gcspushx(CPUARMState *env, = const ARMCPRegInfo *ri, return CP_ACCESS_OK; } =20 +static CPAccessResult access_gcspopcx(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + /* Trap if lock not taken, and enabled. */ + if (env->pstate & PSTATE_EXLOCK) { + int el =3D arm_current_el(env); + if (env->cp15.gcscr_el[el] & GCSCR_EXLOCKEN) { + return CP_ACCESS_EXLOCK; + } + } + return CP_ACCESS_OK; +} + static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSCRE0_EL1", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 3, .opc1 =3D 0, .crn =3D 2, .crm =3D 5, .opc2 =3D 2, @@ -120,6 +133,10 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 4, .access =3D PL1_W, .accessfn =3D access_gcspushx, .fgt =3D FGT_NGCSE= PP, .type =3D ARM_CP_GCSPUSHX }, + { .name =3D "GCSPOPCX", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 5, + .access =3D PL1_W, .accessfn =3D access_gcspopcx, .fgt =3D FGT_NGCSE= PP, + .type =3D ARM_CP_GCSPOPCX }, { .name =3D "GCSPOPX", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 6, .access =3D PL1_W, .type =3D ARM_CP_GCSPOPX }, diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index c1852e2c5d..c601ff790b 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2568,6 +2568,54 @@ static void gen_gcspushx(DisasContext *s) clear_pstate_bits(PSTATE_EXLOCK); } =20 +static void gen_gcspopcx(DisasContext *s) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int spsr_idx =3D aarch64_banked_spsr_index(s->current_el); + int spsr_off =3D offsetof(CPUARMState, banked_spsr[spsr_idx]); + int elr_off =3D offsetof(CPUARMState, elr_el[s->current_el]); + int gcscr_off =3D offsetof(CPUARMState, cp15.gcscr_el[s->current_el]); + int pstate_off =3D offsetof(CPUARMState, pstate); + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 addr =3D tcg_temp_new_i64(); + TCGv_i64 tmp1 =3D tcg_temp_new_i64(); + TCGv_i64 tmp2 =3D tcg_temp_new_i64(); + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(GCS_IT_GCSPOPCX, = 31)); + + /* The value at top-of-stack must be an exception token. */ + tcg_gen_qemu_ld_i64(tmp1, gcspr, mmuidx, mop); + tcg_gen_brcondi_i64(TCG_COND_NE, tmp1, 0b1001, fail_label); + + /* Validate in turn, ELR ... */ + tcg_gen_addi_i64(addr, gcspr, 8); + tcg_gen_qemu_ld_i64(tmp1, addr, mmuidx, mop); + tcg_gen_ld_i64(tmp2, tcg_env, elr_off); + tcg_gen_brcond_i64(TCG_COND_NE, tmp1, tmp2, fail_label); + + /* ... SPSR ... */ + tcg_gen_addi_i64(addr, addr, 8); + tcg_gen_qemu_ld_i64(tmp1, addr, mmuidx, mop); + tcg_gen_ld_i64(tmp2, tcg_env, spsr_off); + tcg_gen_brcond_i64(TCG_COND_NE, tmp1, tmp2, fail_label); + + /* ... and LR. */ + tcg_gen_addi_i64(addr, addr, 8); + tcg_gen_qemu_ld_i64(tmp1, addr, mmuidx, mop); + tcg_gen_brcond_i64(TCG_COND_NE, tmp1, cpu_reg(s, 30), fail_label); + + /* Writeback stack pointer after pop. */ + tcg_gen_addi_i64(gcspr, addr, 8); + + /* PSTATE.EXLOCK =3D GetCurrentEXLOCKEN(). */ + tcg_gen_ld_i64(tmp1, tcg_env, gcscr_off); + tcg_gen_ld_i64(tmp2, tcg_env, pstate_off); + tcg_gen_shri_i64(tmp1, tmp1, ctz64(GCSCR_EXLOCKEN)); + tcg_gen_deposit_i64(tmp2, tmp2, tmp1, ctz64(PSTATE_EXLOCK), 1); + tcg_gen_st_i64(tmp2, tcg_env, pstate_off); +} + static void gen_gcspopx(DisasContext *s) { TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; @@ -2920,6 +2968,14 @@ static void handle_sys(DisasContext *s, bool isread, gen_gcspushx(s); } return; + case ARM_CP_GCSPOPCX: + /* Choose the CONSTRAINED UNPREDICTABLE for UNDEF. */ + if (rt !=3D 31) { + unallocated_encoding(s); + } else if (s->gcs_en) { + gen_gcspopcx(s); + } + return; case ARM_CP_GCSPOPX: /* Choose the CONSTRAINED UNPREDICTABLE for UNDEF. */ if (rt !=3D 31) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567560; cv=none; d=zohomail.com; s=zohoarc; b=LXvFMJewGx9fsEwqIQj2H/IyyhVPKVqHxTk3Q32HqeTQTi62dDfyyV16v7IJkqUFxbCVCj1zLu/kqBW35y81XnZ1/2JmYBHYhUqMK6wwdMffGB3HuWjfDnDulbUCIM9wVWQp0V5IZBq6R8ohe+EKuppFDqLUQz3iTpnXo7kPlRg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567560; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r7rwZf/Zg8OwtOGVMlND2TzYNF4uLWoBORNdt1IjSzU=; b=IxQTqkJ/BwEcxJIWMUcuKZiU9lbqD7BNRE9V/BNRwUsY5RiF7MdkvrttBnYDZ1+UFd7b01hr2oxqA/0DdT8oDFox0kkF23NaDT75qIncAo4F11H1NXk4InCt1WCvE5OgIrFoyZuFJwb22PfJKTSmEFuILRxYvVkQGbp9lreG1ms= 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 1758567560754526.0042322620543; Mon, 22 Sep 2025 11:59:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhd-0007Yv-Or; Mon, 22 Sep 2025 14:55:57 -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 1v0lfi-0004lB-HS for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:59 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfI-0004zL-B4 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:53:57 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-267facf9b58so34909385ad.2 for ; Mon, 22 Sep 2025 11:53:28 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567207; x=1759172007; darn=nongnu.org; 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=r7rwZf/Zg8OwtOGVMlND2TzYNF4uLWoBORNdt1IjSzU=; b=hlgjKfbCrNay4V3tRwhV7GXcQBMILrSatr5Pq1IGMy7UfF0wcIP6MOywW35uVM5xql CVwd7bVLZ18TODOl6s8K4pnhVKYJMZ6wPr/9gmXgq+C9OhhUheDRFrR81aj8SE2uyXc9 cZB5qC6yUo5y37ihffSve9jOKkvYC1LZ0qadGrGucixeM09EgRIy+JK5b9vFy1SrqLES WR9PD9cUr6qOeKdX+Ud7UwHsgkGhGA3XRponNYXgTnLV+BGKvQXUmLtSAe6N0Ib4ZdW7 Hoy309K85nYw0Mr6h3n79EkJFLKx0WYyD0aVK29Cevusth7GnhaT6PDDFi+BWzFRuVnE HGxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567207; x=1759172007; 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=r7rwZf/Zg8OwtOGVMlND2TzYNF4uLWoBORNdt1IjSzU=; b=STw5jAYlbeNjChHeQKF1t4A3qBx7wb3vnKQRzyQYqgEysUSTfzeZc8LMqwzurFZRBK 2MPO8fIYA6Doye9dkfK0l5zPbpuswHwpbSVybGKSk7fcqnWFqOEvG6K9vtUWMvG2kwag YKXnhD8n4vP4hhs55NGmWxoIyq4Po+ahs+HFXVaqaDSC8JzN1IMp3qDY1BeMDrnEUrxk /xFEB0/2SwUdCT0zP/yqo4bUkw/uye/oz2DzsMaqI6YJXV5ouAFzuz32oUv8MF7TR18M Da5YKQ2VuyvFIsT4/v952BCV8K5Oc1pFCXn+kfFwFh4643CnVqFYodV2AX60iF5+VjDl EzvA== X-Gm-Message-State: AOJu0YwXkjkZaIxGQYmWimq4Wx8yclhPYv9kblzG1GYUpr5jgDJYlNQp 2kDE3O/ZKqsR01AcoZMczgjS7dYAMxAnFOQ5yvoJcetBHta8ZWBToUz2lmBzJVGBGk7cbKMJrcW kfLZJ X-Gm-Gg: ASbGncsFLFKw4zh3qOyYuOWFYfOhftoJSFuRx5RYhFRlQ/3me6BYE0YE9EnVZoZ5a0X a5T9sASM0I/B5sBv8MsyIgBYolitFRYJOL0QE3fPkdhfiWwvuyx4arTZRMdiyfeqPDNoeEBSKuX RKe6uCc9V27BgeBhYPfrNAEWJ0xwNPbiSkNPWHPZ7iPjqaxJhxeM5frvVVYwCJaYpx7Moj+xQDr XRGuDdlzccf5Y7tHItBK8/emie1FGAmDNveyuIL3Isk0yU20lZ0h4WBVO6KVu7g8P/7PgZKjsH7 4UJYoGM5lP4Q4g7cqnmBX+Zi8yD9RzxUUFFqAuw7puxPv0E1Jem+dWYoo4cprTmzuVxTosDC/cB 6Qi5+HbXVXLOpS++SnN/vcO9vDGLw X-Google-Smtp-Source: AGHT+IEryQJJ+eu0PUcIkyUpHHV/Fam3/7YGkXLcFmXer0719BQV6USHUIkrbnJyHt2dURNoGJ7GNQ== X-Received: by 2002:a17:903:40c5:b0:262:663c:8d25 with SMTP id d9443c01a7336-269ba5596e8mr210255145ad.57.1758567207461; Mon, 22 Sep 2025 11:53:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 56/76] target/arm: Implement GCSSS1 Date: Mon, 22 Sep 2025 11:49:04 -0700 Message-ID: <20250922184924.2754205-57-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567561661116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 1 + target/arm/cpregs-gcs.c | 3 +++ target/arm/tcg/translate-a64.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 6d9145109f..e7e7050880 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -53,6 +53,7 @@ enum { ARM_CP_GCSPUSHX =3D 0x000a, ARM_CP_GCSPOPX =3D 0x000b, ARM_CP_GCSPOPCX =3D 0x000c, + ARM_CP_GCSSS1 =3D 0x000d, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index 3795bf7f36..eda5c498d7 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -129,6 +129,9 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSPOPM", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 1, .access =3D PL0_R, .type =3D ARM_CP_GCSPOPM }, + { .name =3D "GCSSS1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 2, + .access =3D PL0_W, .type =3D ARM_CP_GCSSS1 }, { .name =3D "GCSPUSHX", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 4, .access =3D PL1_W, .accessfn =3D access_gcspushx, .fgt =3D FGT_NGCSE= PP, diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index c601ff790b..54e7546c8f 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2643,6 +2643,31 @@ static void gen_gcspopx(DisasContext *s) tcg_gen_addi_i64(gcspr, addr, 8); } =20 +static void gen_gcsss1(DisasContext *s, int rt) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 inptr =3D cpu_reg(s, rt); + TCGv_i64 cmp =3D tcg_temp_new_i64(); + TCGv_i64 new =3D tcg_temp_new_i64(); + TCGv_i64 old =3D tcg_temp_new_i64(); + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(GCS_IT_GCSSS1, rt= )); + + /* Compute the valid cap entry that the new stack must have. */ + tcg_gen_deposit_i64(cmp, inptr, tcg_constant_i64(1), 0, 12); + /* Compute the in-progress cap entry for the old stack. */ + tcg_gen_deposit_i64(new, gcspr, tcg_constant_i64(5), 0, 3); + + /* Swap the valid cap the with the in-progress cap. */ + tcg_gen_atomic_cmpxchg_i64(old, inptr, cmp, new, mmuidx, mop); + tcg_gen_brcond_i64(TCG_COND_NE, old, cmp, fail_label); + + /* The new stack had a valid cap: change gcspr. */ + tcg_gen_andi_i64(gcspr, inptr, ~7); +} + /* * Look up @key, returning the cpreg, which must exist. * Additionally, the new cpreg must also be accessible. @@ -2984,6 +3009,11 @@ static void handle_sys(DisasContext *s, bool isread, gen_gcspopx(s); } return; + case ARM_CP_GCSSS1: + if (s->gcs_en) { + gen_gcsss1(s, rt); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568003; cv=none; d=zohomail.com; s=zohoarc; b=a6HO62KwAql82dDOVgAtfhSnaxiYgK8f/WvUikThDj2qGJ+C72U0oz2iC+A+6mgYEc3YriuGffKR7SW45uKS6eAOgL+19o+Xm51CPpH/Upp//d7q+1fxr4Dw0wDxYysQ709B4H4ZUbs1YURCFuiNzuCD+mY5Mq2fvbKS+oCs2is= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568003; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r9D+fehUgbWL+gWO3WeerFLaijU6kYDwf2dSp0estdI=; b=SyP7R7Nmu24sXF2RUeTblJZqa32TqngwddVVaF1Uxer7QouP80qlHg4B+2c+/hvGkhsmGsT4/CyEY5sJIp1OeRF26s6qRYC8mBFZCseKvI1sPPwYkAxXhWZEQuVcmgE4cibDfPR/UHFkmzFEjoIXJt9nkQlfxj8twcVBClXkh+8= 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 1758568003944671.6134568025542; Mon, 22 Sep 2025 12:06:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lgn-0006S7-K0; Mon, 22 Sep 2025 14:55:06 -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 1v0lfr-0004yw-Sp for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:07 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfL-0004zZ-EW for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:04 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2570bf6058aso63815255ad.0 for ; Mon, 22 Sep 2025 11:53:31 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567209; x=1759172009; darn=nongnu.org; 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=r9D+fehUgbWL+gWO3WeerFLaijU6kYDwf2dSp0estdI=; b=pio1LLdoWM8OqG3hxvjPpGD1z3ej9Rj7T+2KThH2I90FXHnWlhf/VhBghtuSH8vnq8 W+YGvoZOjmMtRbhQEfHlM0pAzCW//t33l+5zNnxllQQTxqJ9e/jk6Cj4jQ8PWOFoa+4j KJxNJzPwq783YRhPmJ4intfSDc4WlKJuEszdHOoJy5o5lFoK/t+exvGZ3c/olP1bonzX 4/C4T/18vXNl2kgkgwqxMmAXYSqltXi/v3Sf4zpQvikguuoAmfZkUFUSK6CYwSApzpeY fbxW0cdwZUu7XMutFU5Od2pX1u/bQNWOunSBiJjl/GM63TWPwh/a0XiNAvUjb0xRIXNi Xhzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567209; x=1759172009; 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=r9D+fehUgbWL+gWO3WeerFLaijU6kYDwf2dSp0estdI=; b=NcdqDVbzA9PG6LX2mfsegxN85mncYIfZcp3n9ij0J7N6Sa4HppOA1uH3G6NI5HzZe1 AL82pcNyBsKFGlWY5BArkMHd9xOuX4t14RIWA0R6O+aaQkLgy5PHtQewWGCNhQEbrUcB He6wfgr3JYa1PKr+rkl6le0EORhBcmBbAQtfAjM/sPM+ewupTu6Kc9Td8Nhzb0zMyj74 10R3aaJ5skXN5v1OPaEATiKBTxVTAqnp3LCMv8ekxym3wUG9KiO/oUCQURWnlGJDxnAi Sb/fjgsNyXUHhrEWJnRolNPzNj7p+qGfSpehqploxZGptxEUsQEiUInU6WwWKHEGyqe8 KUgw== X-Gm-Message-State: AOJu0Yx5FE4bU7lvDLQLFbtDotZyl0SIzXhQGu3JUiji39tj//V0qbvl DQAO45lWt+CJe6A+pUIH+SCnKpTKsYjRxbS3bV/35yIkC99FNSBPSLU+qz947O7zmnpiyX4rriF mGeeN X-Gm-Gg: ASbGncvlkbPuMRIejKCxc4pzBXuFyD1rgT3L1QSzmeNic0J7H1C+4IWMi4ZejDLtPJ3 MutVAej9nu+rjFTDB0KLo2/d0zVAD4c8bN1R7LjXzN2vh04W0Y/XZr77d1L3IY+H9ki4nXx+E9D 1p9LeExy6kr4o4aH1q5g1BsRL6YztPQhzJpAKinnNHKJ1lTtGbQYxAt7CGi4TtzwMiGkQiyo7LO Al9Vj7ZQWNmfuxfIlKgGC28Jzqlg7vYiTkxyfasUNuuRP3lJhTCua5kAYW3FPLiv7a4E3z4zugX P7MQA1y4aRYmD8B9WBsvCB9ItUHgEAsHxIblEytgvcItvRpDdfDh6V1KFk1O3sRUEWXv740ZOqz hJbCQ1FjBLiezv5XWJ7lmzlF9ZbnS X-Google-Smtp-Source: AGHT+IHBhJq9LgTMKfvvEOZuuS+eirzR9Xj8AOaDe7roxLo/US/Sm70MW/WO5CJHenG5Bk6RfC2pUQ== X-Received: by 2002:a17:903:19f0:b0:26b:3aab:f6b8 with SMTP id d9443c01a7336-26b3aabf9c6mr171634265ad.58.1758567208812; Mon, 22 Sep 2025 11:53:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 57/76] target/arm: Implement GCSSS2 Date: Mon, 22 Sep 2025 11:49:05 -0700 Message-ID: <20250922184924.2754205-58-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758568005333116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpregs.h | 1 + target/arm/cpregs-gcs.c | 3 +++ target/arm/tcg/translate-a64.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index e7e7050880..732c07506d 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -54,6 +54,7 @@ enum { ARM_CP_GCSPOPX =3D 0x000b, ARM_CP_GCSPOPCX =3D 0x000c, ARM_CP_GCSSS1 =3D 0x000d, + ARM_CP_GCSSS2 =3D 0x000e, =20 /* Flag: reads produce resetvalue; writes ignored. */ ARM_CP_CONST =3D 1 << 4, diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index eda5c498d7..1ed52a211a 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -132,6 +132,9 @@ static const ARMCPRegInfo gcs_reginfo[] =3D { { .name =3D "GCSSS1", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 2, .access =3D PL0_W, .type =3D ARM_CP_GCSSS1 }, + { .name =3D "GCSSS2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 3, .crn =3D 7, .crm =3D 7, .opc2 =3D 3, + .access =3D PL0_R, .type =3D ARM_CP_GCSSS2 }, { .name =3D "GCSPUSHX", .state =3D ARM_CP_STATE_AA64, .opc0 =3D 1, .opc1 =3D 0, .crn =3D 7, .crm =3D 7, .opc2 =3D 4, .access =3D PL1_W, .accessfn =3D access_gcspushx, .fgt =3D FGT_NGCSE= PP, diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 54e7546c8f..dfa2a6d64c 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -2668,6 +2668,35 @@ static void gen_gcsss1(DisasContext *s, int rt) tcg_gen_andi_i64(gcspr, inptr, ~7); } =20 +static void gen_gcsss2(DisasContext *s, int rt) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 outptr =3D tcg_temp_new_i64(); + TCGv_i64 tmp =3D tcg_temp_new_i64(); + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(GCS_IT_GCSSS2, rt= )); + + /* Validate that the new stack has an in-progress cap. */ + tcg_gen_qemu_ld_i64(outptr, gcspr, mmuidx, mop); + tcg_gen_andi_i64(tmp, outptr, 7); + tcg_gen_brcondi_i64(TCG_COND_NE, tmp, 5, fail_label); + + /* Push a valid cap to the old stack. */ + tcg_gen_andi_i64(outptr, outptr, ~7); + tcg_gen_addi_i64(outptr, outptr, -8); + tcg_gen_deposit_i64(tmp, outptr, tcg_constant_i64(1), 0, 12); + tcg_gen_qemu_st_i64(tmp, outptr, mmuidx, mop); + tcg_gen_mb(TCG_BAR_SC | TCG_MO_ALL); + + /* Pop the in-progress cap from the new stack. */ + tcg_gen_addi_i64(gcspr, gcspr, 8); + + /* Return a pointer to the old stack cap. */ + tcg_gen_mov_i64(cpu_reg(s, rt), outptr); +} + /* * Look up @key, returning the cpreg, which must exist. * Additionally, the new cpreg must also be accessible. @@ -3014,6 +3043,11 @@ static void handle_sys(DisasContext *s, bool isread, gen_gcsss1(s, rt); } return; + case ARM_CP_GCSSS2: + if (s->gcs_en) { + gen_gcsss2(s, rt); + } + return; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567484; cv=none; d=zohomail.com; s=zohoarc; b=CMFlQqY5OeH1QPu7i/Vqe1TCP/z8tAjfYBAQR5tbX7UNSo7VHSsyB0M+AURVK7ZJgjhfgzeaaMnhTjA//g64vxIIYxxuqKpEdbDGMUb7MXF2NEh0W4cURhbfBY3B+39FLxqmy/QpETVUABiODXQ4soBc7w4YXaOgraytUKhENLI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567484; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HpGCCThsena9eJaUjNGXk5YpWbCZ6xAMscsxPYodbx8=; b=kgdT5LS4Hq2ha0XCiRsNwY6XQdy/0Ni+rYrCbIyUo5ocrHFr9ievzVnqWKvioIUGIK5lmO50JOY2uICIM32ix46JxPzqNHs/vX2t6WYC1Lz18s29tnVolZJdfr1e/08918g0zUAiOmmjGethMOtNAmLMZOrFUKVy/GzpT4d/TOs= 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 1758567484586833.5383992083449; Mon, 22 Sep 2025 11:58:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhc-0007Zi-OJ; Mon, 22 Sep 2025 14:55:57 -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 1v0lfw-00050B-7h for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:14 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfJ-0004zw-3P for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:09 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-b5507d3ccd8so4285089a12.0 for ; Mon, 22 Sep 2025 11:53:31 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567210; x=1759172010; darn=nongnu.org; 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=HpGCCThsena9eJaUjNGXk5YpWbCZ6xAMscsxPYodbx8=; b=gcZPAXs64dU6OyFHwehKkhgYM8459ZpjiC689a156nUCPACjsmjbQOZ7cNtBBzMPS6 pqo4enIpGvk12X+Ot8FfRgoYWn00K/mbekpsHJ61UllzDQsq9KP1nrSUnlYNovOORm+Q iqHURhwmDPQRxJV6R56vgeAzrzQtrClujKeGBx3m5oLSst+Jh0ikdJpUEkFOO+LkSiqw uFyu/q9pRBSLwJRrEYA0Y/sl6tWDiegllf/JVsYHaFH1MQo0/KoRHVrKkbLiCPR0XvVQ iAUv8TOVIM4e8pwcX2p0rG0DjpdkcY2ZCOzIrfXYgl6KiKJWaPmMWLnSI4mUOtX6Z3OT HshA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567210; x=1759172010; 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=HpGCCThsena9eJaUjNGXk5YpWbCZ6xAMscsxPYodbx8=; b=aUQWs2NMjTpfdvNki4dPWwlNeziPz08GXH5/h8DtgbFwWK/ZGM3Q4UFVFiGRmirLH8 GBpzdHYWMepn2fdB4LJ7tk7bZPifoA4UgafLrpCrA3u4yy9mGizgUSkGoP4efldl1qhS Yq8QTHXATJJR+z0AJaC5scTB737NrkoFzb1ya0sI1mJj8/shzi/UP95yNBpfFZWwlm/p aNLO+V3kZqqtfsBMHxcwFTBsAS1PPLB1hGTfFhKej6i8SKUPOg1Yr1Az7YI861IOXtzw 2YEVmlHocXPnNVqLivW4moziQLjbpMVxke5SGc3RmFooSXY03MTWMATPZjmAyxv+s+v8 RiZA== X-Gm-Message-State: AOJu0YwVOkTJHmyPN28WUGjAX6dsK5fKclaU0JjflUQ/CFIq+fpDPdAf VQHhLxQlWXLgdToWj7/UDhH/5VfuB4wuoKMaQgIvJQZ6W3TB/o0UaLSiV57hemaxyou19TGWlme cGdya X-Gm-Gg: ASbGncs6vaxPDEw0Kcj2UqqpWBm7U3Duj1yk1GG9PgbUKNT1435LLs9IXz/fIl7VYQp psgKJahaPSLloADK4mAKDz4pCISt38qC5Bg1L1gri5GwS10lZkg2H4XT/Jh274taPjY5pScop0B gvcfvThFxnMg8lMP3ip+nDDOHTzzI5w6qyskcajb7OEgUpFEyINNU7aEFE8zbQBp4RI0itrUz+l omBeT0289W0cRt5VGQc2/aj2BN8I1qUfXeszQiO8q7KJT9UZs0gYvIY4F1+cN9bF+TJw3Qpttcc pkqIp3Ulz6coDlZRWqRfN3i21917CQ5LEa2OQHr8FHXiPX0yhfmhQblsJsL3lAsc57NTe23XdFT C0m1WlHMp/upxRV87n8aJuU/EAmNt X-Google-Smtp-Source: AGHT+IGMJVqFOItknxpQo3V6c4ovsfSSQmZdRMN2JSs6XoVFOR0nMcUfY3XO/oCPdkDEjklKKPM5iQ== X-Received: by 2002:a17:903:3884:b0:24c:82ad:a503 with SMTP id d9443c01a7336-269ba53a976mr164010435ad.41.1758567209883; Mon, 22 Sep 2025 11:53:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 58/76] target/arm: Add gcs record for BL Date: Mon, 22 Sep 2025 11:49:06 -0700 Message-ID: <20250922184924.2754205-59-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=no 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 @linaro.org) X-ZM-MESSAGEID: 1758567486701116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index dfa2a6d64c..6eca241f12 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1678,7 +1678,14 @@ static bool trans_B(DisasContext *s, arg_i *a) =20 static bool trans_BL(DisasContext *s, arg_i *a) { - gen_pc_plus_diff(s, cpu_reg(s, 30), curr_insn_len(s)); + TCGv_i64 link =3D tcg_temp_new_i64(); + + gen_pc_plus_diff(s, link, 4); + if (s->gcs_en) { + gen_add_gcs_record(s, link); + } + tcg_gen_mov_i64(cpu_reg(s, 30), link); + reset_btype(s); gen_goto_tb(s, 0, a->imm); return true; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568009; cv=none; d=zohomail.com; s=zohoarc; b=kvgE5BNOuFqjkncqR2Fu7/2ScuXLeOns2J0UoOHpMb6Iyc9e1oH6X9hC364jvs+cnLJwCHjC96QOdz1Y9REsowks+ez2EHqAuxp1WBjK89FsW38smAK1frNtbvT4mGFESpp8sn1Ziqam4YA7BuewI7k4R3syTPS5r61YPsEzLbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568009; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AH0Uenjp2D4e4yuH/PEh4ImofNJohar5VRmQYhtWJng=; b=h9MhUAbh+Mzjh3nW2yRJ+yJq0cGHpTwp5vLLrBW6Mj1NLXHzXNM6k04Jz4d18+CD7OT0OqfA3uE2cYv6NIea+gzdVgTcRsE4BQJnA6WdpzAtF+n8Vyi9exTDvR2wK+3gRfNb+E8CJdTWTHmcsOh3qRDQ0lo880QjCFLWWkSVB0o= 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 1758568009834759.5548657166861; Mon, 22 Sep 2025 12:06:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0li7-0000Xy-Er; Mon, 22 Sep 2025 14:56:27 -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 1v0lfx-000532-MU for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:18 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfM-000505-Mi for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:12 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2445806e03cso60745685ad.1 for ; Mon, 22 Sep 2025 11:53:32 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567211; x=1759172011; darn=nongnu.org; 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=AH0Uenjp2D4e4yuH/PEh4ImofNJohar5VRmQYhtWJng=; b=YrGgzJe0NsqcjW7s05CpJq0n4Q45MBTG5VDcOHI2AZD4o28MvEK4v3mu9X+hzvz+7I PBWTeAmilp79DW4P4b61hUe6XwyBc8aYKwydIgRzwSeystlj9iuEutbvh+1u/AUjzX+L AlTpg0/rcMdGHDilYmAdpOeuWbHeZezG8Kl1WAGO7T9i8aJyF66n2do5J0eywOPL30M2 zeChgMKDmGPQDsgJTbOyjUIkthON8wn5kOSvkFFUzOVjk4/IFzeIwkhmmVcZM4xbiD7E S72Q4slIhsc5xvhPOOKWrh8hl2RYhXIoQl6S2g9dKn511yPiw3KhXGJ/eObIZz1TZLCf P/Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567211; x=1759172011; 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=AH0Uenjp2D4e4yuH/PEh4ImofNJohar5VRmQYhtWJng=; b=ka0GKpL7SS7/184PubaNhvThF3PT+CH9x39PunhZnIfm9voPhw7Fd/p9zyySOCET+w qWZashWr8ziSP+TrTlmVJAXQ4ATtL4veX6lhR76JYhfVDbUDHgA9VmHPH51OClyTGEVi UMEpp0/e4HK72EwWR8+Vn3gseL42ycfXHSR+c+OqCH4zlW73wVITBO3R3FTS/SYIasbh /ga0cL98471j4x6ZMv5keDKHhuzM4MbzcOBpm4ikr8i5Ic21aJ+iHHA6OmsXmj9KWbkN p/Ycai1tzUIFWj1PnF2ujham6zbFkX42kDOnHDdr0Q1IhVOJ/q+/gyOf3+s4mR6XHhhV tYbA== X-Gm-Message-State: AOJu0YzNXf9M7KtqxnuOXRZUkygC7vSubBfi3NiYJP0tD5h0nhC+Y+g7 RFCCYkPcNXCW69B4ME7quGPiVJLg7cJMI3XIg+zk5IEownQBagOtuNzWL93TXgBwp7C9fqoxBfR jzB89 X-Gm-Gg: ASbGnctXnyql/vttC7swlJQfuP0m2/aXBImAwPFrA6fMbI9bJ21RRJkQeLkxqdQC0JO srkeyzIdBTK4Ch6Q6pL7H/9HRdzO3MYSYSx8Ts0Ym9Vp74yjXj6wv8DtKgyN8v5U01XtbQinMZ0 Awzp8FA6+EpgD3AcV6i6U7URnrPxR1dHYWRio005gB0IfbMpT6tg2S2h/8t+Dj9lvQC9svS3K2P knFIhqZ9/yjq73+uULjvSCwhZAU+hX/ii1C/xLQebWJrvZg+t6BuqzWD+SNQoLWPiyWjB0rtYjm cVtznKZ6XMHbZgAP3kxtJOXCXMSY8bT97T23XPbwWM8l6ri43lf77HvUO1JNRcgRMI7woRe1MPz A4j6emCbQdszArN92OMAoL2l2LtUv X-Google-Smtp-Source: AGHT+IE2q1p3jgJmVNlqItbB/dkvtPUXzJSNPxEBiPQ6wBzi+g7I8Is3Ed0SBb6KKvgoA0NFB46LQw== X-Received: by 2002:a17:903:94e:b0:269:9ae5:26af with SMTP id d9443c01a7336-269ba43a000mr184654645ad.13.1758567210860; Mon, 22 Sep 2025 11:53:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 59/76] target/arm: Add gcs record for BLR Date: Mon, 22 Sep 2025 11:49:07 -0700 Message-ID: <20250922184924.2754205-60-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568011252116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 6eca241f12..79fc7b8c3d 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1782,15 +1782,15 @@ static bool trans_BR(DisasContext *s, arg_r *a) =20 static bool trans_BLR(DisasContext *s, arg_r *a) { - TCGv_i64 dst =3D cpu_reg(s, a->rn); - TCGv_i64 lr =3D cpu_reg(s, 30); - if (dst =3D=3D lr) { - TCGv_i64 tmp =3D tcg_temp_new_i64(); - tcg_gen_mov_i64(tmp, dst); - dst =3D tmp; + TCGv_i64 link =3D tcg_temp_new_i64(); + + gen_pc_plus_diff(s, link, 4); + if (s->gcs_en) { + gen_add_gcs_record(s, link); } - gen_pc_plus_diff(s, lr, curr_insn_len(s)); - gen_a64_set_pc(s, dst); + gen_a64_set_pc(s, cpu_reg(s, a->rn)); + tcg_gen_mov_i64(cpu_reg(s, 30), link); + set_btype_for_blr(s); s->base.is_jmp =3D DISAS_JUMP; return true; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568134; cv=none; d=zohomail.com; s=zohoarc; b=gFHZfcYmjc7pcVMsvU3iZ/mipvgZWGITu3ipeQFKNXYDXDf7LfZY7RV4R4vUQRetH7K32PEYx1I+Yb4UGiusLRZ9/BQ2P6h1HHC9lbUM1ynnpbW6ADs0ZH57DvDy7YyEKvjQk5111H2pH+LaIh4BIaiQaU6cSAkhyAlMwVJ+Lm4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568134; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=V+vOWjqjVhjZBnSwWBDevzrEa0tx9HH7KqcxFqdDEmU=; b=XQzRTz5rghw6Lkd9pLzzokXvwQDuJnrKBif1k6hnib4hzNS2HxQhCj63U/eiDI3tIXIX2vkStMHYMv4SEPh4zYNxDRQfMMHRzLzzxYB0Oxo2kruBjzmnGMfloWWxMiLsEYG0/NAVPN6TCa5+nwrhxRJVLH7LPVEOJjjLsYeLh1E= 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 1758568134584914.0889105291744; Mon, 22 Sep 2025 12:08:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0liM-00012I-AA; Mon, 22 Sep 2025 14:56:45 -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 1v0lg1-00057N-BT for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:19 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfP-00050J-B5 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:16 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-269af38418aso50836415ad.1 for ; Mon, 22 Sep 2025 11:53:35 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567212; x=1759172012; darn=nongnu.org; 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=V+vOWjqjVhjZBnSwWBDevzrEa0tx9HH7KqcxFqdDEmU=; b=uW6B2o/CM2+IaJLevJfESwJNpiXLH4j+jdbcAn/igTAgZaIClYYWl1MeL6h3F6NIOQ g2CX5T9OBpMrCRy6jdQr5L0wznXZ0YblRCTLDGDKnrgYvmxvgAWAe/KKinDcHkkPD0uz RS6K5ZflFGk94pmKDqki4ppOvsxy/GDj9elgnBysED0vxIjP9oLjSM8UQyTvS3J58Iy7 takEQmp7kE5PfUu+Qg3teWG1dReTB2OQS/uIyfkCNWFerdssqsIPDaeqVI9lbdzVAFYW qsLAYOB50x95uRWe45tV0Fn8eWyjAYDT2inBKEbo11gQhIjGzm9dc5E7pvbDX3QSnuhe xYng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567212; x=1759172012; 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=V+vOWjqjVhjZBnSwWBDevzrEa0tx9HH7KqcxFqdDEmU=; b=b7HYJ9+HYTbbz3tuxS633z1hwX3OyMgkzjWNeC+xoxP7hW1mDRoDJtafdBTa15ZAmy Fukk/3zyWpDnj6yOfq9TyOV68otPYsqze/S0gNImK1Zg+7DBKQf8fr4tcRQJGiKqY/LJ OhLi0rIJvVCLgUpW8bGkzUHWdwo0kLpELB4dJ2O5VRlOlAsxSC+BqRqePjOUSMBWkm+3 dfSFw5L3ftD7L1k/fQspd+48rCiPukICFofpAxclWzIoKKYWw8EZsP0wJ9Hw9iuS5eno T50qKZfQxbGsGcPWpO2Sn7pb6/YTKTodEe2LR5vp4KSe+N//PtBViS7A/dE77lhqsR9s gFrw== X-Gm-Message-State: AOJu0Yz5S7CsBtz3gV0bDeBJo9K4mgkWj9/QXe6AZ3VruPMtt0x3pwfg hIKvE0DIghypdaVxKAU33dPaRH9StIXd9jg7TexBM4eK/Pkv/gmSW7YUvs4vmAYcawfmz3nIij+ fjtxi X-Gm-Gg: ASbGnctK1otQpvG23uw25CQ0kYMO23Q4vLeqLjZ85FJWxGssFVu3GgEVbz1i8soHV+c VHx5xcMx4m7v1lFEJllQgUE2utc3UOI201tKU9RD30Q504xgItL46bGPvWS36QFMDOWLZWNToDC KKSrX9zcDIX8cBonlRaSGNP3xzWHsG1wKrTs4UsEdIfQldbB61DiVnnDPwrEhoiyx0TfZ/dnScS mqEhM1mrgUpkEe97kLrGFPbT4BGjfFsgnAf+CSkBlfgca2gKIbis0QTbbfKu3zPKacQ9OXB4K/r IsaOWrXGjKW2lSTZEnWuMg4F7/PR/mFRxbDyOjsvFP3DZazXMYQofJqLlb2F39uj4JNHlxQAH36 l3J4rd5f/viFQNltFJDNAhQL16uAH X-Google-Smtp-Source: AGHT+IGNEaenhRPjkiWefT5VawfX6fEyYedFzSnEHNie8boIk99AOG8zaI5Gu0fNV5rh/WxUwvDupQ== X-Received: by 2002:a17:903:246:b0:269:a8a8:4029 with SMTP id d9443c01a7336-269ba3ea13bmr199516385ad.5.1758567211882; Mon, 22 Sep 2025 11:53:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 60/76] target/arm: Add gcs record for BLR with PAuth Date: Mon, 22 Sep 2025 11:49:08 -0700 Message-ID: <20250922184924.2754205-61-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=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 @linaro.org) X-ZM-MESSAGEID: 1758568136661116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 79fc7b8c3d..529c5bef0c 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1842,21 +1842,21 @@ static bool trans_BRAZ(DisasContext *s, arg_braz *a) =20 static bool trans_BLRAZ(DisasContext *s, arg_braz *a) { - TCGv_i64 dst, lr; + TCGv_i64 dst, link; =20 if (!dc_isar_feature(aa64_pauth, s)) { return false; } - dst =3D auth_branch_target(s, cpu_reg(s, a->rn), tcg_constant_i64(0), = !a->m); - lr =3D cpu_reg(s, 30); - if (dst =3D=3D lr) { - TCGv_i64 tmp =3D tcg_temp_new_i64(); - tcg_gen_mov_i64(tmp, dst); - dst =3D tmp; + + link =3D tcg_temp_new_i64(); + gen_pc_plus_diff(s, link, 4); + if (s->gcs_en) { + gen_add_gcs_record(s, link); } - gen_pc_plus_diff(s, lr, curr_insn_len(s)); gen_a64_set_pc(s, dst); + tcg_gen_mov_i64(cpu_reg(s, 30), link); + set_btype_for_blr(s); s->base.is_jmp =3D DISAS_JUMP; return true; @@ -1892,20 +1892,21 @@ static bool trans_BRA(DisasContext *s, arg_bra *a) =20 static bool trans_BLRA(DisasContext *s, arg_bra *a) { - TCGv_i64 dst, lr; + TCGv_i64 dst, link; =20 if (!dc_isar_feature(aa64_pauth, s)) { return false; } dst =3D auth_branch_target(s, cpu_reg(s, a->rn), cpu_reg_sp(s, a->rm),= !a->m); - lr =3D cpu_reg(s, 30); - if (dst =3D=3D lr) { - TCGv_i64 tmp =3D tcg_temp_new_i64(); - tcg_gen_mov_i64(tmp, dst); - dst =3D tmp; + + link =3D tcg_temp_new_i64(); + gen_pc_plus_diff(s, link, 4); + if (s->gcs_en) { + gen_add_gcs_record(s, link); } - gen_pc_plus_diff(s, lr, curr_insn_len(s)); gen_a64_set_pc(s, dst); + tcg_gen_mov_i64(cpu_reg(s, 30), link); + set_btype_for_blr(s); s->base.is_jmp =3D DISAS_JUMP; return true; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568223; cv=none; d=zohomail.com; s=zohoarc; b=Z8Z6cVRvsNwzu7SdT9zbAbKAbYdTShlQjwlcbuH1C7q0agMvCJ36JEA5j3ofJv1jB9nwaIYBWf7cw+ODuVAYMIw8Do/XHbrTDFi7OuGploLL5MA4Yx7JpEdoRW6Sjo6k4kn4YY4Y1K2ZYK3S8IuUBYGdHNjw92heRYlUYWb6JkE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568223; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lV01EAejMZtOUVdGrh8FhpDGLA+CmMEq51hjadKy0iI=; b=FXDsI8wnqT7mwarTdIzfadBtjNEbHDSuVuUXVigE9Of08VnQkm0J3mqAG5hstm9fXO8tG4t6N1RJANNP8uBYlvv3pAm5JEz1CtqwNEbRK0St63nJ0r5nTqZpYLTNVCcw1Gd88L7jfVUtn4XYcRgF0OWwLnXi4nwnj9cCBiymTSc= 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 175856822323029.722525035853096; Mon, 22 Sep 2025 12:10:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhi-0007uf-5h; Mon, 22 Sep 2025 14:56:02 -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 1v0lg6-0005Cy-MJ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:23 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfO-00050S-Fx for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:19 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-b4f9d61e7deso3194182a12.2 for ; Mon, 22 Sep 2025 11:53:35 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567213; x=1759172013; darn=nongnu.org; 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=lV01EAejMZtOUVdGrh8FhpDGLA+CmMEq51hjadKy0iI=; b=ckPdObCBSVtwzn8RZIH7YYJrxr9fcO3+K5S3lZ305I9X5CFDwFIadQMYTN4p1Xlntt QqAJ2d5mCvQMC6wDmvUguQU375Gvan+loVsiyQQimO86P37uGFgBlagSFTp4cCua4MOO j5O7AmfI32pH9MUBVcIH8YEvxZIh8dY+2hxpeUez+3oIjFLUlEDlszTtp65wjqU2ugfC gJKRXtBQbufkE6QclKXMtxNSrOoDImLU3jzGHwtHOAVzBFT4yjx2ear0ZS5EH4OAY/5R ZqIACJ7VSTEtwTRf0jPGx8t+jj1jzHwkXDgZ7+bA0pMnZDrmMvIUr9jETE99QOXvdrRP C4VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567213; x=1759172013; 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=lV01EAejMZtOUVdGrh8FhpDGLA+CmMEq51hjadKy0iI=; b=PSUoi7hf8WjokaIcI3N0dqwl95CGF3/K1oqdpR69eXpE9FLNWqOZS34VgbD5uqugKZ ULWUiOVqJMubvT5lSeMIQPuho+wuCSe2LU6Jnpshi9JzxwDivr+X3S7+OPz4AJdHTQMj qiiCu8g0DU+/aP9BSVZQLMhRhlI/kBLiJf6SKOS5E5TOLvqJeWAEZslboLN5tPufilbl oY3cvvSpskZ8/xySlduUWKK/Cs6CxznVrVF6u0jgWXfFa6TRVSd2GhfzZRx86undPYeD +agcb0x2VZVqU/7LfLH4H1Xxws5+dXkGYMIqJi4LRTSNimmiUxbon9I9TF6B7/RNz6QM ZkUA== X-Gm-Message-State: AOJu0YxWttKSMLmIXfdCx7AL5Jg94TAVLl7odvQo21S1XNPcSO6qDSAr WckwpPX+mdLknaCKmpXmzPylsTPAD8ZXSHg0RkQpmfwuoI0VgEru+MpoDtAoVdjA5OAIze/3/+A JUBoq X-Gm-Gg: ASbGnctmT0bi/vunFguT2lo711mbrrTNX02RnjIJzY4lYR6hlXxcUnjixZpHyJbxbjM fzUlPrLQ/6rtwCJAl+xVI4BbWn/HbsZdsgA0UKPefRtS+7DavdnncamVZuBAb9tw8mWNj88FliG L93eVcuGdVk9+iTRJ0BM/oU3OYcQ2Dl58eSAReP2SEzdKisq+Ar+pRzIxZkE1mYExNzLdw2Vg78 oZL4bfTPGSdPwYxm8R5Tr+NSJqxB/Iac+xDD1y9M7PvTeSAXRjlObYCtQCurZclitFXPRGrd0iG HnTXDfn+HWO2z/2cTNWrfs2j91WzRGGvZHRzdTgLD4irI5HEB6X7ZehrPNorUJPwv3rukWkIJ9y kCilRaiDECKTnOsJD1Dn8RxCC3EOW X-Google-Smtp-Source: AGHT+IEpDmEToQ1+L5xmeMw9xV9VsFid0A5cTQZvLbC6YIXZnYlEPMA9Gc5twiztSWeSRLZ0KyGY5Q== X-Received: by 2002:a17:902:d487:b0:269:96ee:17d3 with SMTP id d9443c01a7336-269ba523685mr157701145ad.51.1758567213071; Mon, 22 Sep 2025 11:53:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 61/76] target/arm: Load gcs record for RET Date: Mon, 22 Sep 2025 11:49:09 -0700 Message-ID: <20250922184924.2754205-62-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568223570116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 529c5bef0c..462c61032b 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -444,6 +444,27 @@ static void gen_add_gcs_record(DisasContext *s, TCGv_i= 64 value) tcg_gen_mov_i64(gcspr, addr); } =20 +static void gen_load_check_gcs_record(DisasContext *s, TCGv_i64 target, + GCSInstructionType it, int rt) +{ + TCGv_i64 gcspr =3D cpu_gcspr[s->current_el]; + int mmuidx =3D core_gcs_mem_index(s->mmu_idx); + MemOp mop =3D finalize_memop(s, MO_64 | MO_ALIGN); + TCGv_i64 rec_va =3D tcg_temp_new_i64(); + + tcg_gen_qemu_ld_i64(rec_va, clean_data_tbi(s, gcspr), mmuidx, mop); + + if (s->gcs_rvcen) { + TCGLabel *fail_label =3D + delay_exception(s, EXCP_UDEF, syn_gcs_data_check(it, rt)); + + tcg_gen_brcond_i64(TCG_COND_NE, rec_va, target, fail_label); + } + + gen_a64_set_pc(s, rec_va); + tcg_gen_addi_i64(gcspr, gcspr, 8); +} + typedef struct DisasCompare64 { TCGCond cond; TCGv_i64 value; @@ -1798,7 +1819,13 @@ static bool trans_BLR(DisasContext *s, arg_r *a) =20 static bool trans_RET(DisasContext *s, arg_r *a) { - gen_a64_set_pc(s, cpu_reg(s, a->rn)); + TCGv_i64 target =3D cpu_reg(s, a->rn); + + if (s->gcs_en) { + gen_load_check_gcs_record(s, target, GCS_IT_RET_nPauth, a->rn); + } else { + gen_a64_set_pc(s, target); + } s->base.is_jmp =3D DISAS_JUMP; return true; } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567453; cv=none; d=zohomail.com; s=zohoarc; b=fqSucwQQP2O3WREqxLTiy+GCgoDYHyMp/xPCyJ8aMXrTNbdNrF0fz98yVdT3a2PQzyfjJjwZGMMP04bTI3A9I63Uoec5jwyQ/efRCtViBrSFpoJUNO6Iiw7E9Sswbx/pn6VQgHx7GmIVWGoAHEMhf+G1Nn3AjiTIcLY84p4Scpk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567453; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=I2QV3v6q0puRhrfNpRSWoo8b8YYN0t1SOeYhVDpb47A=; b=QyphaLPglU86g055M+ppVsNLuO9EuhPVA6kMpqjRqWpzUBbsQqYVPDgTG1MdAxm2M993e0hEelmGKu8l2/Hx47RjWrNUSP58TuDDHhyWNbsXaXr9NLkixAx2PUKLzwRc/GE50EiBI06cktrjsvQcn0Xa8kacNJA01efB8g01u6k= 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 1758567453087748.0049023917184; Mon, 22 Sep 2025 11:57:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhg-0007nI-KH; Mon, 22 Sep 2025 14:56:00 -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 1v0lg3-0005AM-PE for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:21 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfP-00050t-J7 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:18 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-77f41086c11so1133293b3a.0 for ; Mon, 22 Sep 2025 11:53:37 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567214; x=1759172014; darn=nongnu.org; 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=I2QV3v6q0puRhrfNpRSWoo8b8YYN0t1SOeYhVDpb47A=; b=wrf91L7iei04UENZYm3qBdu6cr9+JV4Z9Anqgj7nq9abdhrxLdyPTxcvbqReaAslho u7r01ikXqbtpRugYH4uppMWLLkr52rMhd+lNWUAVsIG7NOefZ1CsYF4Pi8OsfjUb4DYN sVvRw7QfByUHDlfVZQPNHN2MTPRKKmNAjSskoPccyMSvxKYZyDDGla3AOIubnwABmK6t xDktBo9+DFN58RzajCoMwjNL6p2SDST/c0zigyfN1c1On1OIHrKia+wyiT2kydHI/KVq 05GKAAkrgZ+Llv6DNYJps6aUYnuj8QyY0RPHMX94ufRH6Kd/317b36VFfm6d9NyEzP4u sM7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567214; x=1759172014; 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=I2QV3v6q0puRhrfNpRSWoo8b8YYN0t1SOeYhVDpb47A=; b=Cj9SI0KGG9vf8mHQdr1IK6FKIJx8vxWIKg1ZdGKQdSprlWjbqVkspx8aYvaPK7W3gJ BTwAVIfQCZkcdq6Xnx9RVGYYLuATsZqERph88DwQsTyf6hg/sPbFYYaBSwchGN5sbHyQ viTW2OvzYFHO0wHmnU8BqYJEuZOEzV1mAn/rfw30vzDEERyaKxFvkVRgmlCtjmjppCha hX9/lrSb2ucdUrzFyJYXqMXDoYrS8G/WthBOmOvDNEif8ByIvbPiQ74SfuJ1t1ciqlHa 5sd1bI/G003/AIO+E2nhN2HcRTSGxBA+4q9I0Hu97a1bV0WurE+g1+HikxDZwgdW9VJV PpwA== X-Gm-Message-State: AOJu0YyWhAWFwQ9H1R7fJaC4uu2SARd2Eogkl5fbaE6spbB5+PVvt/Oa rWLFqfiUjYYKrPXZ7c8K3bACQDfvh8NkLCQpIwZnYxtfxYItZ/FUEHBr9QST+JKnoO713Cj1j5U m/mbq X-Gm-Gg: ASbGncv6Sfqb89IHnw03yEL5sQYMoQo+GtdhOj7IvdQDINwmLj3XkvfB2dobYFZHS8+ nJ0pc7ZXJ0aVIIDMSLlawHXQo3TxCohHrgx4Zzvd57BDnDRiTeydeMupt0aHgqz5ZrIJEEFIeXJ 5UugyuPRK/6jm9Fsjc233JPhjBMbuSCr8JxiE9jMuDBrryrIku0FE5XyT8Xq/aurMJSbdGmTlus R3dqzZ8q4Mh8LlJn7fkgFAmwibjDtHMXa1OeLP+NHnZFgdVW7eJyj1KKmJkn0zdPcYf9IqzCJsg oLhzBsVfbdrNOq9xH178b8iAKHfFSlTxXfEfw2eH3fQ6nE+bKs67JbcIB//Vswy4JMBvZ0BuoJn qVeuliQmkDQuJzhkE6meOvXWaRNgp X-Google-Smtp-Source: AGHT+IFPpkLSx8g3Nm3wtO7Vhs22L+fME+iXuR9KOlLYaezmKLhwkiSEg+Pcv/gcm7tCEEDmbIuCSg== X-Received: by 2002:a17:903:2289:b0:26c:5c03:678a with SMTP id d9443c01a7336-26c5c036965mr135609065ad.9.1758567213893; Mon, 22 Sep 2025 11:53:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 62/76] target/arm: Load gcs record for RET with PAuth Date: Mon, 22 Sep 2025 11:49:10 -0700 Message-ID: <20250922184924.2754205-63-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=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 @linaro.org) X-ZM-MESSAGEID: 1758567454394116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/translate-a64.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 462c61032b..aae6dcd548 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1898,7 +1898,12 @@ static bool trans_RETA(DisasContext *s, arg_reta *a) } =20 dst =3D auth_branch_target(s, cpu_reg(s, 30), cpu_X[31], !a->m); - gen_a64_set_pc(s, dst); + if (s->gcs_en) { + GCSInstructionType it =3D a->m ? GCS_IT_RET_PauthB : GCS_IT_RET_Pa= uthA; + gen_load_check_gcs_record(s, dst, it, 30); + } else { + gen_a64_set_pc(s, dst); + } s->base.is_jmp =3D DISAS_JUMP; return true; } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567492; cv=none; d=zohomail.com; s=zohoarc; b=Ymf9dwINR8ADBhcE2SNG5LuiMXhlMQPLg+wxBC5OuZXz3MrTxozRBRgUFST4oe8tQHE3DZyIbrMTaFnOWncMykDVV+UUdsJMB4/qGFfTyswu+Q5DXg1WRbQep13R8GUxtpFhNq/5fRLBZObTU8ypAQZL731CbG4eont8JDahkxo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567492; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aWsV/VltAqzQI9Qb+vYobgK8sydft8j6ZXREEjHA0ks=; b=gceHF2xP4m6lHJ8uKT/ycY4BlKuP3K6ffrFksBObP9mNmD93S8pP+GmW1bfv8oGVIbKnxjs3YgfMkLhBILvBsoBKfeuKSdtHzGJnvCfjfrAicKTO+PFmMTpFB8ITAo7TEyCspjDYPjxi7UezLkP3Vbb/0wCH9m/oeoPKUUIMESM= 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 175856749252285.78384722739884; Mon, 22 Sep 2025 11:58:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lhp-0008J3-Re; Mon, 22 Sep 2025 14:56:10 -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 1v0lgB-0005TP-5Z for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:27 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfQ-00050n-0A for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:26 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2570bf605b1so61629115ad.2 for ; Mon, 22 Sep 2025 11:53:36 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567215; x=1759172015; darn=nongnu.org; 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=aWsV/VltAqzQI9Qb+vYobgK8sydft8j6ZXREEjHA0ks=; b=t2hCL5ocTJ3eOitoynNz79AjrAFAkEjMvPW+6pYEuilKxIntRkN2PtGPQyNwGnmDUV W5RjEkhSgmitjV+D7aYV1zVeu/kyOj2xAXk1p4kYTleO+PtbYuxyNDySmoJafLIHDV5R +GJE717WII0Irt9IdsiiAwgGd030sLzGiS/HJ5ix3FOSwyz7ufT9PmEhEd04KwEEz758 r9Z7kqRX+biAvqDnQAF+/Abm9h+7BYbzIAagdbon1ZVKrXZ+8+6BgMHJxN7G+k/eUKqD YLgyn2juXAEJPxR/4QXtzJNF40Ke6X3zzzL3psAx0FLyfTOO1vuf2HAL1DLDbVbw3i3P timQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567215; x=1759172015; 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=aWsV/VltAqzQI9Qb+vYobgK8sydft8j6ZXREEjHA0ks=; b=aofTzsjtNQMOo2vn2UlU4x8CwL+uJNAtoX1MByLaH6yd6tW5fF+MJ90frUA8pX1NHL qle0xNdJ5CoYfM0S0x0rK8RpIGQNFIH3UUlWI1cJyvpWr5INh4cumj3ToHDbGT4r5sa6 VLFxig7LR8Z3sr/MWEsIt01QGMz0DNkTVqkP0uRgxFVCOSaNqUB5DQxc5ovLOTYFlPtu vjh5DQvOnH+pVuoOHHqGMswv+md13qQ3CPG4jNWrMZYUmQpL5Ap4TFx2jW28n1H6sizd M/5mjBbeWsPPH6Uu/tsWsXpE16dRDFb+fbYp8KpR9WCWm9Fh/WpMFhQf24AcUpq5XI4W vgeQ== X-Gm-Message-State: AOJu0Yz8sDTkFiDN9Xw2rGhN96Nx9PKn7xx3w4uY/BZAxTdGoV1TIHD/ +LtRlGTvRpGUFcAC8/6dqWI5Zn0m0CMMWRhwOWC3wQIO02g9NFTprAmNDgzSs+nq6NCK7Gaqgdv iP+vs X-Gm-Gg: ASbGnctsNZX/i/3T91EnP5fHZaAVWKvyB/0BabjWnkv0zLW5n0GAQWjwEmSqZ9AQia+ slxMgB3feluecEZI/NhipFaADEOeAdsUboP0WRwHIwNLtgwSuisZH3SvnMyq7tVGrjnLfnnXXrk 8JR8tnhjSFdm6zPnfIYUDb+OGpf9PbhlcPiov3A1727mdtK57B8LR1Saxi0vlCeOwx1xSdwi108 dWC36hnE4QSgk+GUe/SRiSKT9L8sBPA2qxus35sBtB3InODt0WadOHWnvVeueMdkiP3QXsOI1QQ vAAOyahqvovYkdOKQdrIh97aSWdSEhfyaCxxHhFhOzUFx8jocaBe3WIzDdT8Zj2lYP8opLjI8CM xWHKcOzNM9vJkCDDY0IoJduXCUzdl X-Google-Smtp-Source: AGHT+IEY/9EwH0jOggsEQup5vz1tb0G2DYJAGUzPmIBXnlDpJNHgpTrsZR4WorKcIKo+uOb1ZMbqeQ== X-Received: by 2002:a17:903:2409:b0:274:777b:ca84 with SMTP id d9443c01a7336-274777bf4c4mr85650805ad.21.1758567214776; Mon, 22 Sep 2025 11:53:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 63/76] target/arm: Copy EXLOCKEn to EXLOCK on exception to the same EL Date: Mon, 22 Sep 2025 11:49:11 -0700 Message-ID: <20250922184924.2754205-64-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567492769116600 Content-Type: text/plain; charset="utf-8" Per R_WTXBY, PSTATE.EXLOCK is 0 on an exception to a higher EL, and copied from EXLOCKEn otherwise. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/helper.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index e90398acc9..d98f9b0d70 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9057,8 +9057,13 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *c= s) } else { addr +=3D 0x600; } - } else if (pstate_read(env) & PSTATE_SP) { - addr +=3D 0x200; + } else { + if (pstate_read(env) & PSTATE_SP) { + addr +=3D 0x200; + } + if (is_a64(env) && (env->cp15.gcscr_el[new_el] & GCSCR_EXLOCKEN)) { + new_mode |=3D PSTATE_EXLOCK; + } } =20 switch (cs->exception_index) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567501; cv=none; d=zohomail.com; s=zohoarc; b=IsFPQhPbE8QPi8EkrtpQkChinWPJ6+eMegv/fJGgSL7h3nrMVli7q9kUSgtwS2zFsHhtgSs+prkE07nzOAuJfI6jDqGXeCXYdkHIbfYvNn1AEQuMIUEkoMAZBZocfT3OXW+RAwxoFB+klvegjBMVy1EVAgYTDRYxIm91FdgEh+E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567501; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TIGC+NB44/a0H+dR2upS+UgyhxrsXnOzX4fio5wssx8=; b=hlLquFb4dEcWc4M67MbJzVGPRsv1FAUs5SS2mn0IowvHNZ/wYNzXyopfJ5a2GfWTKTarQlLhR7p91LhT/TJlNcpwM98m6jR/JDSfsoCrRaC2sUnFWqaQsRLIZRi4CNRWpoU10pVxGMllFbnTyF1PCr+Hmsltg6Ydjy9adxQx47o= 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 175856750170734.90924801634674; Mon, 22 Sep 2025 11:58:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0liq-0001P2-3O; Mon, 22 Sep 2025 14:57:14 -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 1v0lfz-00054r-6K for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:19 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfP-000513-Iv for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:14 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-77ee6e252e5so2909225b3a.2 for ; Mon, 22 Sep 2025 11:53:36 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567216; x=1759172016; darn=nongnu.org; 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=TIGC+NB44/a0H+dR2upS+UgyhxrsXnOzX4fio5wssx8=; b=tvu/yDoYF2TBp57oodn+wPY9n15R7OcQxirA4vQnad8ALMzsx83U6+eQvE0NhHZks6 TNZjcZ7Cpn+IN4xHc1C6zFYLbKm9yVfADyvUAPqy9FUBtlsECE2Cf1H/QK4b0PaU4tz6 1ZLkdGHoBHtdQjPpKtmWcyi1tM3n8zJt6JIPgqnnhuR8LGuDwo8hkeYYONB9+RRfVr79 sgN6IVlZ0fJeqrxz0JmoAV7uZq2NDtQJ10l5Ctsgkbv8o7uCDDJfOHu6ZVlO6+WWpYn7 Dc/ThCunk8TwdCduVIKSAXbL0ujLkllhItV51OGkNPQnlPVS+Sy6gVjhqVIwv10P+6a0 7AEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567216; x=1759172016; 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=TIGC+NB44/a0H+dR2upS+UgyhxrsXnOzX4fio5wssx8=; b=WEXzWIgkNCpTDjqSlaY5zwA1G0O7chVjR2BGB0AWTGpCO7anm+agEOtM5Pmy3eRM/z IjrTidl9rBfrltTO+KzoDD9+667Gi3Th1mDVq5qMhYAZabXAN1s/IwvhNg1qqiWnNuR+ Fyg9YjoF9ePNUPATfQhPiE5YCt5ERyD3VJkSWCuhxvcJPBZqvSjjERBoyR1P1ZRxqEL4 Zc+a9qN4O0Q4K6bnuAVD11i3qrKJBJkiuLVMURN5eG6i3GB+VyvkfLe1szhdqATytH2w Hez5WvcsveEjwTu8k0f/V0ZVNGogxiI+IGoXS4UE6IjCBblzNrYWybh6AWjpjXv2ls68 psEg== X-Gm-Message-State: AOJu0Ywj2Cw9wn12LeVZ+5f+PliNv4qYWgtnzRdYlhI/3zCjvwj/LGha 2AgyGpzD6ouQ/BilrCMWqmIJakwTD1ACHUmAMCmFLI//CR3QYUaJdcbRo0BtIITJDvmQugl9loW o69z1 X-Gm-Gg: ASbGncuJUj7RrOIN7yzYx//3KgVF8SJ09IXgF0Jz3XLAbFJjgs8DqdKSkfh+dTVAPYj p4BpX5yWjYRjLfcXrm22+7TX9EmN3FUHJUzkn5oQavdHAo+cjZdXVWXo2VWxnFv4t8sUhbOunQn Hr3z6lhwNeps27H/nDhRSgwjHvb7ySlLKQUiuQDcV2fp2RxHb/GJq2AWf7cD7PK/+5gaIKSsyJ1 9/8UfWXkkywQ9HpToQPrVz1dLwiqgTXF6E1ah2gs+yBoStQCcQ5dvVPtwWb8GcBgFRuF4C9e/6p Yd4cySrZh8a6wuAuRGNQ4lE1apR9LBFmoOuALlrZnF6zBZ7hXvW2+4wGE/hkp2L6wCbQUDN3yV1 hG4NxSCL6zIOutgmlFqCRILjcJOo/ X-Google-Smtp-Source: AGHT+IHnK9rRG6hvlKVoT4mEeGvvAa24s+BGGifTiad+9GXWsQJCxBuEDHsu6NZlq3fMKFBguLMflw== X-Received: by 2002:a17:903:b48:b0:24c:9a51:9a33 with SMTP id d9443c01a7336-269ba455941mr172864705ad.22.1758567215770; Mon, 22 Sep 2025 11:53:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 64/76] target/arm: Implement EXLOCK check during exception return Date: Mon, 22 Sep 2025 11:49:12 -0700 Message-ID: <20250922184924.2754205-65-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567502924116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/helper-a64.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index 08b7db7c46..ba1d775d81 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -675,6 +675,17 @@ void HELPER(exception_return)(CPUARMState *env, uint64= _t new_pc) goto illegal_return; } =20 + /* + * If GetCurrentEXLOCKEN, the exception return path must use GCSPOPCX, + * which will set PSTATE.EXLOCK. We need not explicitly check FEAT_GC= S, + * because GCSCR_ELx cannot be set without it. + */ + if (new_el =3D=3D cur_el && + (env->cp15.gcscr_el[cur_el] & GCSCR_EXLOCKEN) && + !(env->pstate & PSTATE_EXLOCK)) { + goto illegal_return; + } + bql_lock(); arm_call_pre_el_change_hook(cpu); bql_unlock(); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567475; cv=none; d=zohomail.com; s=zohoarc; b=OTiKpWz54K9MUMXV1HPtgs8oennhC+x/EsKRIi2Z70GrLhxtLxUi6OFR2twSaHryQsNTNn1RjLpVe+BZNpXSKQe7YvE99TI+bpKvk+rBfUrjlQzXo8mOhqdze+C3Mkw0/rp6Huxu1oH0IVB8bZVuFA/hij/tx36KdVAs9ZddwFE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567475; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=DxayGpcvk1WgEIrwtrnI87HtMykvmuTE7R78plec4rY=; b=FvF/vMgGsK9EFSyBN4abqkXBrBWGduRlq7JyNWuHzHx5LdSQ0m8+zdXXOhoAB/Y0r9E7GL42eiIJoQkkIsVSKank1CIiSoAoROw5zBAcpB5JOVj+aTijaYhI/PR6OfHjcCHR9YfS6MxWmXblTmNTYeWwTdfNIwaLTXm4KUD/IcI= 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 1758567475484499.99140031440663; Mon, 22 Sep 2025 11:57:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljA-0002It-DD; Mon, 22 Sep 2025 14:57: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 1v0lgA-0005Kf-Mt for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:26 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfQ-00051S-OI for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:24 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-26c209802c0so31463785ad.0 for ; Mon, 22 Sep 2025 11:53:38 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567217; x=1759172017; darn=nongnu.org; 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=DxayGpcvk1WgEIrwtrnI87HtMykvmuTE7R78plec4rY=; b=LwHbNeeabulAN7CMWS11hWC5UFJGybtvI7ZZzXFg3bYUT1RzDWeYknGhq2MH6zQBK6 tPUGs6c22+dvJNSPT3Cv6H4ZEEj77FE/zRCUyWsMmmfVhKTuvr+V3j1jdvF5KXGkZ9X5 gJDy6q8tdufEmWmvA9akdgYumC1jx2592XFddkmP6kBoslDcCYX9v2QVSnvQY/ukB81o n9xbfQyoG/zWDsc6pFrHsIi4yulNdRO3ktxtDoLbStbyiAz9SykWsymurTYMf4KxEE3p GTpN+KoM5PqtAGe5XO74fek44PnQcwqNEVunI8TXv0T+QhT8EdQwgAGaEYvOaG0qrDuq eC+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567217; x=1759172017; 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=DxayGpcvk1WgEIrwtrnI87HtMykvmuTE7R78plec4rY=; b=YA1sllsyUiFS3PziOnQ56exe8Ryzm0zqrD6jIw91F2TNy33sHoTLxxwxN5h1MKvAGG lkrc0ky6BuBaHZATeoYK9pqZ9EFaWfEC/K5/hcG7xdEeQ1TXrzXjrOWOU8I2FZi3eb8X kH0SpwBc3rbuIrjueQPSC0RnKvUAhaVDlihjLyO26F+MTYN4n9RZRrjuiy8exCiZVYmK F1kkAor8po6d2L+T49010uaShcUAOvmihVr61B8XkL+VMFDF+awhoK/ZlLUpzD5SBpon aNexVP2H0aTDyicS4I3484EFyXXbDOSn9ab/F1PgMALL1Dr9tAZV05gWiACY71sBOsy5 nR7g== X-Gm-Message-State: AOJu0YwXD79BS5G0ReC2ICEIgQm93iNPy9e+CxotAy6feBuUPaE+ua4S mPExJTM3O8EJF0nyRnPJVRnBvzNyQEppltVwPt/56EHYyCXcLcJhjZ0vkq2mP+FTvJPHhaRkboE zTcxc X-Gm-Gg: ASbGncvAdZ/zhKHdRMELuvay2sSLqj9h43sSwIddyOsowsQr5yhYiqyATl7qMv6it1L jBWQl+SNlGD8u064w3ITm8dGpU1N4Xb7471YAyRaoBh9fOCrtLgcb2XuGdrpMICo5N8wuaNisqF 0Rh8859rvBlfbGCDP7gWqEFPyNrXb4Ked1iMSTW85Cg3h3UIcuwlnmkGCl3BI2Ms7hDeor1fDPN UG7jUerEzQ7aWFcDZG9uXlHxhwn+zeVoe41SLx1BBNrjHCQ/XudvvwUeaRP/+WFu3zM1AsADt00 xrpDtUaYo8TWqQ9XHR7BnWnVeXYMTLJ/sdqdsOZAQTFocBX5fCcaBPzDAWieuvnfIbi0QYGvi4K Ht14AzOk6/HLwdFbn6fAYGSXkNrjAjqtsDly0NCk= X-Google-Smtp-Source: AGHT+IEm9BhY6XZh+EPo6/ymXEwgd3OZCdbT8xKrbgcmfPWJRCaeBcQuysGOQpYSyQtzzxvxkZYe/Q== X-Received: by 2002:a17:902:be12:b0:267:87be:505e with SMTP id d9443c01a7336-269ba45a54dmr131390525ad.23.1758567216739; Mon, 22 Sep 2025 11:53:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Thiago Jung Bauermann , Pierrick Bouvier Subject: [PATCH v5 65/76] target/arm: Enable FEAT_GCS with -cpu max Date: Mon, 22 Sep 2025 11:49:13 -0700 Message-ID: <20250922184924.2754205-66-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01 autolearn=no 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 @linaro.org) X-ZM-MESSAGEID: 1758567476602116600 Content-Type: text/plain; charset="utf-8" Tested-by: Thiago Jung Bauermann Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/tcg/cpu64.c | 1 + docs/system/arm/emulation.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 76193826ce..8ebb0a91db 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1206,6 +1206,7 @@ void aarch64_max_tcg_initfn(Object *obj) t =3D FIELD_DP64(t, ID_AA64PFR1, SME, 2); /* FEAT_SME2 */ t =3D FIELD_DP64(t, ID_AA64PFR1, CSV2_FRAC, 0); /* FEAT_CSV2_3 */ t =3D FIELD_DP64(t, ID_AA64PFR1, NMI, 1); /* FEAT_NMI */ + t =3D FIELD_DP64(t, ID_AA64PFR1, GCS, 1); /* FEAT_GCS */ SET_IDREG(isar, ID_AA64PFR1, t); =20 t =3D GET_IDREG(isar, ID_AA64MMFR0); diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 4b07af9eac..21c187a464 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -73,6 +73,7 @@ the following architecture extensions: - FEAT_FRINTTS (Floating-point to integer instructions) - FEAT_FlagM (Flag manipulation instructions v2) - FEAT_FlagM2 (Enhancements to flag manipulation instructions) +- FEAT_GCS (Guarded Control Stack Extension) - FEAT_GTG (Guest translation granule size) - FEAT_HAFDBS (Hardware management of the access flag and dirty bit state) - FEAT_HBC (Hinted conditional branches) --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568215; cv=none; d=zohomail.com; s=zohoarc; b=E5YVM2YHaepH0EdepD0X2+Fwr5S12DezrcMjNCyDBQk2daSRxGMA4slcnIuZxKrs8TuOJP3atJwg2fZeVWR90TY5ciUAjO4MRZ3OVPFMZy2/m+Hdm2lyLBHa/5Vo87xzm+DW5Q6X8supRtff522IJES730gBYYANha6yHFTznrA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568215; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HTzcUGGxZsq7kEwv6ih902moRlxo1N6PG0gX7nMiQJ4=; b=MvcghLV2Yg+pluNX5jpIpQwzHnLT4akb4CwXJpm3H++tpekZGaAwuwe+ic3yDwczVWyzNzWg5BbnWyZqFjEq2yaUlYbhHONTjXg3BtizBMqdBvJfQvwCxndpUqcHJpmm5360LWxKFloX5oEcos38KQDgg4PgV9wgWHiTmSJEQxI= 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 1758568215547743.8985462971697; Mon, 22 Sep 2025 12:10:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lit-0001Tj-Sv; Mon, 22 Sep 2025 14:57:19 -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 1v0lgS-0006Au-UE for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfU-00051b-60 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:44 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-b54d23714adso3717502a12.0 for ; Mon, 22 Sep 2025 11:53:38 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567217; x=1759172017; darn=nongnu.org; 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=HTzcUGGxZsq7kEwv6ih902moRlxo1N6PG0gX7nMiQJ4=; b=Vh6n8oCnixhDQzUJ1B3mrpzj5gmLOFbc44Q0/gTzdTTxOGBFYAXYRqvobe6kRuRLAg yvXVclC5K46OfP8+cuDclcKb5j2sO6bTgNDWMYD2NVZudQZijpf5vozCmZHxgQAWdAEM 40kHAtdVn8siCz+ipAjQxUUN+OXuCM3MeYCRHwKSi2o7ueoZy3T9Ui21ltPSDmAEsmnq tbHEduwXsfxJU2NrKzdOpfq669HirAPKSBsk+CjrGEvGj4nbUARhUxvHT4okFaFA1G1G vO1AqVzSNCyTsaD5x5Vaw2M6xeIejGOyLiKcD3Gx20MPQj5yivPXHhabVNtUSYfXKnYi BeFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567217; x=1759172017; 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=HTzcUGGxZsq7kEwv6ih902moRlxo1N6PG0gX7nMiQJ4=; b=wabNFWnOkX8Xn6S5MB0I/hpyr5bWM0NJzd6g6ctbplQd/o1JugmZ2ehLgpgpuqTMct wuVj3sPyPo0cixuy/PAC11Via/HuywRSkStGoCdfqVt4D6c4s05HX5yvZAI7d/gbZKK6 P06Bp1SP2EfVi517pmLzf7RlZtVODLRSV8UqrgwDpkEbdZ8e+mQbCech2muSsm9TR679 F3Mw8/HkKlAub1kU13Qyg2qqdLwPm9HJa3OwnMeZs86UsrXig4ABy1FXKGWkw43xqZXe H/eAYlXx47MWScp6OQ9xcO6qg8x2DRS972CVfXAT1WCDR+Q5rYAv5fZjTDJN+DqL8Uae 60Qw== X-Gm-Message-State: AOJu0YxvyteSKNyzZes1YHbL6GbmYt6szpy6izw0BeP9NuNLIxm0OslU GuEKb4pGeM5LccgWvcSHXtL4E2VYO5sCHDdU6g8+N/+R22H6Nho+Ne44pPhPzJ4s3lhzaJ1M0w+ M15nz X-Gm-Gg: ASbGncuTUX3VQ+v4espC3qWsGD+oBfnCWNWUtILfZgQir9OVvFWyMGTL8uhtPQES+Gi AlYZDFW+A0aUEZ/wmyaMKZ7fP/6ZfuoCCb37BDGFwaMGlCNq+uY6vFBJpz2Rc2WLrWkrqtnRFMN sPRQSx8egvkn0rG3GCnYxxc75mIOMNop/EoA3In8i6Q4wxBMVfjQd2YOYbnkAv3/9LtKIfC7V1C ly49qYI39ow1GgMM4eY2LSt17pyfkaDGekkcX0d3ryuQh6t+TAf8EOZXFsMRcvj3YPd6VnFcgvb /dcFgmtjBLUxwHIoxbK3gxHrz5sStqcFSKsDtMBj7H1D7rvNTTx95ga+gUESEvXoTfl84vB+DP2 qMaWLwPd+6HrWMXfr+4Ajq89XKeleyXG2uZEslEo= X-Google-Smtp-Source: AGHT+IH+FILoO9HJXDbPYVUlpSRBnLg4zA5CUTNLDJBhd8WgogoRfCUuu+0QBk/cDhb9S9Sd+CkV/w== X-Received: by 2002:a17:902:fc8f:b0:267:fa8d:29a6 with SMTP id d9443c01a7336-269b9cc7179mr167918565ad.25.1758567217495; Mon, 22 Sep 2025 11:53:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 66/76] linux-user/aarch64: Implement prctls for GCS Date: Mon, 22 Sep 2025 11:49:14 -0700 Message-ID: <20250922184924.2754205-67-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=no 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 @linaro.org) X-ZM-MESSAGEID: 1758568217828116600 Content-Type: text/plain; charset="utf-8" This is PR_GET_SHADOW_STACK_STATUS, PR_SET_SHADOW_STACK_STATUS, and PR_LOCK_SHADOW_STACK_STATUS. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/aarch64/gcs-internal.h | 38 ++++++++++++ linux-user/aarch64/target_prctl.h | 96 +++++++++++++++++++++++++++++++ linux-user/qemu.h | 5 ++ linux-user/syscall.c | 29 ++++++++++ 4 files changed, 168 insertions(+) create mode 100644 linux-user/aarch64/gcs-internal.h diff --git a/linux-user/aarch64/gcs-internal.h b/linux-user/aarch64/gcs-int= ernal.h new file mode 100644 index 0000000000..e586c7e80e --- /dev/null +++ b/linux-user/aarch64/gcs-internal.h @@ -0,0 +1,38 @@ +/* + * AArch64 gcs functions for linux-user + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef AARCH64_GCS_INTERNAL_H +#define AARCH64_GCS_INTERNAL_H + +#ifndef PR_SHADOW_STACK_ENABLE +# define PR_SHADOW_STACK_ENABLE (1U << 0) +# define PR_SHADOW_STACK_WRITE (1U << 1) +# define PR_SHADOW_STACK_PUSH (1U << 2) +#endif + +static inline uint64_t gcs_get_el0_mode(CPUArchState *env) +{ + uint64_t cr =3D env->cp15.gcscr_el[0]; + abi_ulong flags =3D 0; + + flags |=3D cr & GCSCR_PCRSEL ? PR_SHADOW_STACK_ENABLE : 0; + flags |=3D cr & GCSCR_STREN ? PR_SHADOW_STACK_WRITE : 0; + flags |=3D cr & GCSCR_PUSHMEN ? PR_SHADOW_STACK_PUSH : 0; + + return flags; +} + +static inline void gcs_set_el0_mode(CPUArchState *env, uint64_t flags) +{ + uint64_t cr =3D GCSCRE0_NTR; + + cr |=3D flags & PR_SHADOW_STACK_ENABLE ? GCSCR_RVCHKEN | GCSCR_PCRSEL = : 0; + cr |=3D flags & PR_SHADOW_STACK_WRITE ? GCSCR_STREN : 0; + cr |=3D flags & PR_SHADOW_STACK_PUSH ? GCSCR_PUSHMEN : 0; + + env->cp15.gcscr_el[0] =3D cr; +} + +#endif diff --git a/linux-user/aarch64/target_prctl.h b/linux-user/aarch64/target_= prctl.h index ed75b9e4b5..621be5727f 100644 --- a/linux-user/aarch64/target_prctl.h +++ b/linux-user/aarch64/target_prctl.h @@ -6,8 +6,10 @@ #ifndef AARCH64_TARGET_PRCTL_H #define AARCH64_TARGET_PRCTL_H =20 +#include "qemu/units.h" #include "target/arm/cpu-features.h" #include "mte_user_helper.h" +#include "gcs-internal.h" =20 static abi_long do_prctl_sve_get_vl(CPUArchState *env) { @@ -206,4 +208,98 @@ static abi_long do_prctl_get_tagged_addr_ctrl(CPUArchS= tate *env) } #define do_prctl_get_tagged_addr_ctrl do_prctl_get_tagged_addr_ctrl =20 +static abi_long do_prctl_get_shadow_stack_status(CPUArchState *env, + abi_long arg2) +{ + ARMCPU *cpu =3D env_archcpu(env); + + if (!cpu_isar_feature(aa64_gcs, cpu)) { + return -TARGET_EINVAL; + } + return put_user_ual(gcs_get_el0_mode(env), arg2); +} +#define do_prctl_get_shadow_stack_status do_prctl_get_shadow_stack_status + +static abi_long gcs_alloc(abi_ulong hint, abi_ulong size) +{ + /* + * Without softmmu, we cannot protect GCS memory properly. + * Make do with normal read/write permissions. This at least allows + * emulation of correct programs which don't access the gcs stack + * with normal instructions. + */ + return target_mmap(hint, size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | + (hint ? MAP_FIXED_NOREPLACE : 0), -1, 0); +} + +static abi_ulong gcs_new_stack(TaskState *ts) +{ + /* Use guest_stack_size as a proxy for RLIMIT_STACK. */ + abi_ulong size =3D MIN(MAX(guest_stack_size / 2, TARGET_PAGE_SIZE), 2 = * GiB); + abi_ulong base =3D gcs_alloc(0, size); + + if (base =3D=3D -1) { + return -1; + } + + ts->gcs_base =3D base; + ts->gcs_size =3D size; + return base + size - 8; +} + +static abi_long do_prctl_set_shadow_stack_status(CPUArchState *env, + abi_long new_mode) +{ + ARMCPU *cpu =3D env_archcpu(env); + TaskState *ts =3D get_task_state(env_cpu(env)); + abi_long cur_mode; + + if (!cpu_isar_feature(aa64_gcs, cpu)) { + return -TARGET_EINVAL; + } + if (new_mode & ~(PR_SHADOW_STACK_ENABLE | + PR_SHADOW_STACK_WRITE | + PR_SHADOW_STACK_PUSH)) { + return -TARGET_EINVAL; + } + + cur_mode =3D gcs_get_el0_mode(env); + if ((new_mode ^ cur_mode) & ts->gcs_el0_locked) { + return -TARGET_EBUSY; + } + + if (new_mode & ~cur_mode & PR_SHADOW_STACK_ENABLE) { + abi_long gcspr; + + if (ts->gcs_base || env->cp15.gcspr_el[0]) { + return -EINVAL; + } + gcspr =3D gcs_new_stack(ts); + if (gcspr =3D=3D -1) { + return -TARGET_ENOMEM; + } + env->cp15.gcspr_el[0] =3D gcspr; + } + + gcs_set_el0_mode(env, new_mode); + arm_rebuild_hflags(env); + return 0; +} +#define do_prctl_set_shadow_stack_status do_prctl_set_shadow_stack_status + +static abi_long do_prctl_lock_shadow_stack_status(CPUArchState *env, + abi_long arg2) +{ + ARMCPU *cpu =3D env_archcpu(env); + TaskState *ts =3D get_task_state(env_cpu(env)); + + if (!cpu_isar_feature(aa64_gcs, cpu)) { + return -EINVAL; + } + ts->gcs_el0_locked |=3D arg2; + return 0; +} +#define do_prctl_lock_shadow_stack_status do_prctl_lock_shadow_stack_status + #endif /* AARCH64_TARGET_PRCTL_H */ diff --git a/linux-user/qemu.h b/linux-user/qemu.h index e4dca0c20f..8a0d240405 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -121,6 +121,11 @@ struct TaskState { abi_ulong child_tidptr; #ifdef TARGET_M68K abi_ulong tp_value; +#endif +#if defined(TARGET_AARCH64) + vaddr gcs_base; + abi_ulong gcs_size; + abi_ulong gcs_el0_locked; #endif int used; /* non zero if used */ struct image_info *info; diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 91360a072c..2f1e881046 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6351,6 +6351,11 @@ abi_long do_arch_prctl(CPUX86State *env, int code, a= bi_ulong addr) # define PR_SME_VL_LEN_MASK 0xffff # define PR_SME_VL_INHERIT (1 << 17) #endif +#ifndef PR_GET_SHADOW_STACK_STATUS +# define PR_GET_SHADOW_STACK_STATUS 74 +# define PR_SET_SHADOW_STACK_STATUS 75 +# define PR_LOCK_SHADOW_STACK_STATUS 76 +#endif =20 #include "target_prctl.h" =20 @@ -6397,6 +6402,15 @@ static abi_long do_prctl_inval1(CPUArchState *env, a= bi_long arg2) #ifndef do_prctl_sme_set_vl #define do_prctl_sme_set_vl do_prctl_inval1 #endif +#ifndef do_prctl_get_shadow_stack_status +#define do_prctl_get_shadow_stack_status do_prctl_inval1 +#endif +#ifndef do_prctl_set_shadow_stack_status +#define do_prctl_set_shadow_stack_status do_prctl_inval1 +#endif +#ifndef do_prctl_lock_shadow_stack_status +#define do_prctl_lock_shadow_stack_status do_prctl_inval1 +#endif =20 static abi_long do_prctl(CPUArchState *env, abi_long option, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5) @@ -6467,6 +6481,21 @@ static abi_long do_prctl(CPUArchState *env, abi_long= option, abi_long arg2, return -TARGET_EINVAL; } return do_prctl_get_tagged_addr_ctrl(env); + case PR_GET_SHADOW_STACK_STATUS: + if (arg3 || arg4 || arg5) { + return -TARGET_EINVAL; + } + return do_prctl_get_shadow_stack_status(env, arg2); + case PR_SET_SHADOW_STACK_STATUS: + if (arg3 || arg4 || arg5) { + return -TARGET_EINVAL; + } + return do_prctl_set_shadow_stack_status(env, arg2); + case PR_LOCK_SHADOW_STACK_STATUS: + if (arg3 || arg4 || arg5) { + return -TARGET_EINVAL; + } + return do_prctl_lock_shadow_stack_status(env, arg2); =20 case PR_GET_UNALIGN: return do_prctl_get_unalign(env, arg2); --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567502; cv=none; d=zohomail.com; s=zohoarc; b=N0VcaJ/hz4eFeIyQyn4+obXfD16I7v5Ps+5Eya3rsinydkRcG8CLMLt5LRD1rc9sdCzz6UwDSekovw7jMJBIKmBnTyBSfyTicnwIFkENcW4i0R1NEKCwyT8Po3ryND4p0Uuma2OEUwAXE1meJ2Ys+ArfnVI3enuEKdYKlE/xXtc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567502; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RrRDTwGDphkvvBtsV/mK2pHDoMT9L4tWZDtSjWVgm+E=; b=NPANG962UWeC4hCRSabKTjlxjT/MbRHKiO6mZ7LcPVG4zx7RJfRW+GIDMAXk0piumH+vIrJUKecTVLcOKfWXHpoxdJj2KtCtk5Kdt1slWRGNJBusWURYBiuVpCNZugEGqd/B9ZFbv42AP8xAJesM1vLTbTEm8uKJM6xQoSh7slQ= 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 1758567502514680.1478239228413; Mon, 22 Sep 2025 11:58:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0li5-0000UJ-ER; Mon, 22 Sep 2025 14:56:25 -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 1v0lgG-0005s8-DL for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:32 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfS-00051u-Ow for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:31 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-77f41086c11so1133376b3a.0 for ; Mon, 22 Sep 2025 11:53:41 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567218; x=1759172018; darn=nongnu.org; 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=RrRDTwGDphkvvBtsV/mK2pHDoMT9L4tWZDtSjWVgm+E=; b=XpJq/XlcOgE2kphS8aDIpU+93+7l/UgcWT+DLjjePqxPn/0XQ+kMGHbOBjRPRgMx5Y TD5ZeYhQpFt39grIxnJsERfQB/QCQ6P1XnlVSM6B57sunnYQ+tbeD/i5Z2xZzCmszsni 7eTwMN881oFBqll9jI0ZdSr650/9eMNDfB/FlAu5dlyrdxr4dZPeUSYzu/0hrM4rj3WG YjKRsJUIGSbANyOm6wxibTN4E4AOfueMJ6k5GiloLo8GgvvcjJt8h9YVf5D6xtqbmAyB OuYgFEK0x/mgzHGrav4xxN4J+o49AVBsqdfi4c9zVDfBMfAmRQD6qgO2c51Hoy2GExla HKnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567218; x=1759172018; 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=RrRDTwGDphkvvBtsV/mK2pHDoMT9L4tWZDtSjWVgm+E=; b=I6qb833+VF7AwkpFYqYSb9SG5U6xNf4e25AyogS7gVUfQ+KoYl1B+sjXCSiWUwg30z MlZHLC8K57OAED6XmOJjc2UZVQi1fk4PfCZLW7WTJLbwhvmwBdZZo3kwz/aHEUwq/dcT MTNRa8us247Qb259g+JLwyRxkGQMTucvFNzF6+2tvHEVsMpQCSqzDlFgEXlHmquieAME m0UGJPAaa0E2MJJAl66Iu6NSQqj+WWT/WvEFjcIlS1qeNN/RDnSLPBirMjWONmc2YxNd zUkh+C4DxoILgWURJsvfdf62sqF/FKZ7eOkHLen+wU7IwjdgZrgfvkX3gZ0T0w3QhYRE BwpQ== X-Gm-Message-State: AOJu0YzcqTMvtD5F4bj2hUJgeU7rIEMAPMC5Z7Yl0Wrx4kek9nyG5er6 RRJu10ARjr9+5G8k08Tswce2hNNLZaaU9WqCRAe4Lw6FpGadoTtCk5nfUAIyoLDV23i7Ra/oWPw GEJXl X-Gm-Gg: ASbGncvluzxo/G52TINmGsmkG0ef1h1lym5f3JSiOv1js6DhzpRj4SuBRUCD9wkSgFm 5HtQFyhBh924hOJMIsn5I6nxMAPkk5BAOKp5C3CzR46WjiIf7zYDahqN3dkMooXFMHbnpZWYyVM 5B4urrzUOoVARYIbSy7t4UC7OkpDLXxWs6mB9qWYs3S2qZcUXzvIPR7CrYgHawBu+bDQcUd/X34 bBvQrUhpqIx5ZNpFxMUZLwRyv3iLbeVwfhkzEswd36c9150EB8wAfHn6E0s0E/vXYQn5o7GYJqm U/ddbjGSR6k0N3M7RbB4pkzNJpegiWVne2S4hQg0qCOei6ybD/KPDwWkPqYKjpyPF1FTbJbBave YCA5v80vWzn1x7DOuD2xwzT0aE+XV X-Google-Smtp-Source: AGHT+IEWdpBQlC7u4fveMVXWQYys15rxESqEZr8pCzmlkj/1EM7M+uGcMto0CqhU/9Kyez+ui64jDw== X-Received: by 2002:a17:902:da8f:b0:250:1c22:e78 with SMTP id d9443c01a7336-269ba402db2mr214039945ad.1.1758567218370; Mon, 22 Sep 2025 11:53:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 67/76] linux-user/aarch64: Allocate new gcs stack on clone Date: Mon, 22 Sep 2025 11:49:15 -0700 Message-ID: <20250922184924.2754205-68-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567502959116600 Content-Type: text/plain; charset="utf-8" Allocate the new stack early, so that error reporting need not clean up other objects. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/syscall.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 2f1e881046..91210775ed 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6652,6 +6652,21 @@ static int do_fork(CPUArchState *env, unsigned int f= lags, abi_ulong newsp, ts =3D g_new0(TaskState, 1); init_task_state(ts); =20 +#ifdef TARGET_AARCH64 + /* + * If GCS is enabled in the parent thread, it is also enabled + * in the child thread, but with a newly allocated stack. + */ + abi_long new_gcspr =3D 0; + if (env->cp15.gcscr_el[0] & GCSCR_PCRSEL) { + new_gcspr =3D gcs_new_stack(ts); + if (new_gcspr =3D=3D -1) { + g_free(ts); + return -TARGET_ENOMEM; + } + } +#endif + /* Grab a mutex so that thread setup appears atomic. */ pthread_mutex_lock(&clone_lock); =20 @@ -6676,6 +6691,11 @@ static int do_fork(CPUArchState *env, unsigned int f= lags, abi_ulong newsp, ts->info =3D parent_ts->info; ts->signal_mask =3D parent_ts->signal_mask; =20 +#ifdef TARGET_AARCH64 + ts->gcs_el0_locked =3D parent_ts->gcs_el0_locked; + new_env->cp15.gcspr_el[0] =3D new_gcspr; +#endif + if (flags & CLONE_CHILD_CLEARTID) { ts->child_tidptr =3D child_tidptr; } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568257; cv=none; d=zohomail.com; s=zohoarc; b=C/UYT6F7ZghiVoeXuqqO4RJm38VBFVbdQfcN514EIiEhMVvoNEe+/wQyJMFGFtQXahXI6/rEAbxgfKkgUw56Q2kM36HckqEebFpnoHj2QRyNaJ72vHn1DwHq5DGd3JQmym6ssESYAD/gMpXeSh1G9MziZocxMC+m/G9l3cgFCaU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568257; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Bac99cWBoODM0lZjzPV8FafpKsc60jTDKb6XVoHXo24=; b=Yjw6hQVvpMetbYS+Yy4sQ+yt7bhyUOBshdO8X9Q7C0qK6Uj26VVEtOa0epKAlopaWq0Fw39Hznl7BQjp5srKsjFymtaGcua/c43QjruEl4O9psOaarTpqo6l8goGLn/g7c5kWEmwXDisMEtCzs+vrbWx+1YOWDFfriGi50wsHBs= 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 1758568257353985.0275797483838; Mon, 22 Sep 2025 12:10:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0li8-0000la-9S; Mon, 22 Sep 2025 14:56:28 -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 1v0lgF-0005sP-Oq for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:31 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfS-00052B-OQ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:31 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-279e2554b5fso9293495ad.1 for ; Mon, 22 Sep 2025 11:53:40 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567219; x=1759172019; darn=nongnu.org; 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=Bac99cWBoODM0lZjzPV8FafpKsc60jTDKb6XVoHXo24=; b=vqIXAnFIGgsJzYwp0FPmg6D65V4fwWISqtAYJTUC6xXmEoaZJ4PmHWViX+qc/i5HEP gFf8SzDtI9wHjjJALE285WK6oVq9SD0yWzqoFNxdqF88Mfr2Yp/CZifXLTSkItX61Tve YUeiMT+hJ4wl4Lf+flMC0urpyK+tfD4KJZC0pABvNuj0u0SbmPR3cLLvJy6JHPyX5QTC vCfRNlz7r7PguoLPTa9Bq/ptEKsSlDoIK8hDiScHQ5tzeZy9GrLmBApzoqz0+vgDrQ0i kyI+y6za0ax7oHMwg3jhhOFZHWzcycJCi7icKEPVcM/TMVGZkpOfW7Uez8lk+iT3WPEP UAig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567219; x=1759172019; 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=Bac99cWBoODM0lZjzPV8FafpKsc60jTDKb6XVoHXo24=; b=FupFzLuzHzoLiXBDfkRuYymOLLRUYS4SvDFzg2YfUxkMr4opS4L5E7c7os3yR+n/fy Zo9y75Z311Td4lIMz+z0FRqSkVBxjzVma7K5c09/sTczuonFGXjQ6k8NBbbSnVVmvDhi h1AzSFE3g0KQYij9wS2tQA2RpNF+J/v6PHjgfLjyMU78shCNerpRf5hQjS/H1DKTNbmg uDWWsn/02jNsPPr/ME9IUlSW9BaahdBEB08Q6EOriYhabRePMZJN7rr8+CZ4jeZwh0dc /CDy0r2oJIkif7+aMeFb5HzzPn2D5PY9+/NZNTYOcZjcfFiUfV+E3a3Pk0lipfzto7PC hHxg== X-Gm-Message-State: AOJu0YzhVuANRaasG/GhdMCDRoRKjVTjoG1koKqqeH233z1oGbvqDOqy mRk1B1xZrvJh3+JjAelkY5BYUGhgYHi0ibcbHJfzfyvL1niMfOW0e11L43gPdMNkippg96IsA+s nzoVy X-Gm-Gg: ASbGncvZAGcso2Ac3DRssG0fH+iutBJSz+9PnZ2B5t5wO6YXe6Lql0CcbZdYvO8kZpF Yzz30EXpctQm9YtbXAAI2khk03Bw1Sdn0fcaCBQy3EEfGEMQqzN+QJLeGvas5S44E93TnlYosY4 ge98OWGpO5brTx0q8wrODBciHL9PQGB1nDYF19xwGErjmHMNFSCbEEi4N/tOkT9BqbJqHcftlq/ c0j1G0gQuS2pw/rvgU+79BNhDJHvMimzxXywZ+Ah+8vD+SVWVf71kbD95A9S/osg0Jvc14GjaaH NHNyCqNcP8Hl5eTHVvRL2Y66WC4JwKXNFIG99s2BAcWhw7IRg4zuzh6f3qaygBDbgm8TJfBXKb+ d/yiMpTAc71jw05CjtT0FZI6+a98G X-Google-Smtp-Source: AGHT+IHfLyg2uXsY34m+3iEe8uZlkCAerPVMhw7+qIV6BK8aSrGwu9MyjvtOp1PskSOEoOHRceQFEw== X-Received: by 2002:a17:902:fc8f:b0:267:fa8d:29a6 with SMTP id d9443c01a7336-269b9cc7179mr167919305ad.25.1758567219026; Mon, 22 Sep 2025 11:53:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 68/76] linux-user/aarch64: Release gcs stack on thread exit Date: Mon, 22 Sep 2025 11:49:16 -0700 Message-ID: <20250922184924.2754205-69-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758568257975116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/syscall.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 91210775ed..dfe114ceb3 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9309,6 +9309,12 @@ static abi_long do_syscall1(CPUArchState *cpu_env, i= nt num, abi_long arg1, FUTEX_WAKE, INT_MAX, NULL, NULL, 0); } =20 +#ifdef TARGET_AARCH64 + if (ts->gcs_base) { + target_munmap(ts->gcs_base, ts->gcs_size); + } +#endif + object_unparent(OBJECT(cpu)); object_unref(OBJECT(cpu)); /* --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568365; cv=none; d=zohomail.com; s=zohoarc; b=l8yOLKvxH/J9e3Zd97eiCmYJchWf8yk109DHt7XCXUWOnaMR7r2CsdrGAF6dRHoXRAi8ruiooRLjjT5YbJXjUfYzetmiZYYrBuy0AdDlsXTlFhVoCYm/NLVzIV6RzAVDzLWxv/AdKQnbQiXGTVqipVdtY7vcvdqwheUEVWJ229I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568365; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=H0WgDnjZZbQNGrZHbHxQl5y/Vvc/Dh17BYKXEKy/nEk=; b=IHv47HE7ydsh4fc9/Vt+FrFmFSCT9TCZKp/3Z3HcvviVdG65QUaRjtqbAXGkklBKxnMmgYjyEixN3IpktQd2Ii2yygqGlVGX8CxZ5pbD9JK0ntCpQXIpP0LMpKr+7ggoynpVtHnPeooRb6eGF87uNxFp210+mEjVSBbWaY1xB+Q= 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 1758568365108465.18072006210025; Mon, 22 Sep 2025 12:12:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lit-0001Tk-Us; Mon, 22 Sep 2025 14:57:19 -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 1v0lgS-0006Av-TZ for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfT-00052O-Gm for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:36 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-271d1305ad7so25151945ad.2 for ; Mon, 22 Sep 2025 11:53:41 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567220; x=1759172020; darn=nongnu.org; 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=H0WgDnjZZbQNGrZHbHxQl5y/Vvc/Dh17BYKXEKy/nEk=; b=Pujr9iHemvPdqRroyimuYaHmku7HeEZ+zzRJemeq4+nxVBd1y3hQY2hziBUCm+/MYJ UIcMHImHF+fAaI175toEABfjGbUGL5Oqa0Mk7zok/uGQA/qyBNZlmXN5/CEksO2uOmx1 P2y1n0Mwli405t/SVtEGaP7Kag8vNr8BRvUo/Hx1jAVo54pZkG7/bMCmH2oeZGi+HfvF Qs+gx8pnihDwtx1FW3cAULEyXIP110PNN/WdMDCb0EKgx+VaxEk1b3RHA0hkGvHkgZWt 3R3AVRuWvMA3vhBXMCA+7zKHGTJKmeCxww9wPigeK/Ww6MoJ4pfFwhftO8fkfwNk8SL6 vhow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567220; x=1759172020; 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=H0WgDnjZZbQNGrZHbHxQl5y/Vvc/Dh17BYKXEKy/nEk=; b=Mvq6E7hliYb4NpbqugB2oC5M5Krl2cVqWO/A//RxgKgUJoxQLXw2DMmhthJRIGr3qJ J8SoGpNgQ0fdaNgynYkm3+gy4+4zP1j8mPFyicBJ2DxC8moi2HdtwHzOCwlV0DkWKsf5 fy8NhU/ScJBYJzyis/YD1IbUpb0kyNliyaxFNZMZ/f9ruCbwMzU3ksMR15TgzZglFsWa V+cLxHNhXaP1/Li8KQ+Tq/c0VcXOs7O6e9hVfPauwzC64Ppaiic7xnSPp9wyiDozQZoU Pjpak2YzOa5FuWI3MmLn8pQKISCBqSCVdjoG1eRntWSVyThuPqRRBpUqPZyQua5GmstN ZJdw== X-Gm-Message-State: AOJu0Yyt/Ufb+oR/LK/E5LCauAuYEIKEnk6UkHXNHXnTTE7WmcY+0PA+ y/3szNsl/0QnarwPmV1V2HUQ1wXpTJ+fj90vRF/3fX2BdihtSWt30iy6aPNt1JH01RGc3yAQwjW IhzHW X-Gm-Gg: ASbGncvsgJO6qqTvfXZUvwrZqD3fmWWSSjCXtbuoMGmuIj0aMn9HQ3SshozJhxsIlm8 QMWAxwCnGLbOACQwwTlMenGDj2Tz5aGB4Bq/cugHpU72EVnOYjvBubGHYLQms6ycSsW6xMShE68 5WNoMZixA/zD0nMrxstu7Iyo3omkRivWRx5j5mbygzTe/o1QG6vx86HmN3qzD5hTKf8HRur6tkH 1XXSa7niRtC/5txSOEPU3FLFE/MrVMR5q7DCtigBXqN0Wb67EfgvN1mcGMgiMZKTqoGgXBCWgYg EtqMDLHlp88dZb+od4a4CPDLi+OEjUMaeCvIBBV87WoPO3T9xjqF42/v7ccvFsorPMQ4X0O8YCq mapaZstz+cAqfOn0jnD8uJhHXXtJI X-Google-Smtp-Source: AGHT+IF4EkW84NlHRS9A7Hdv6/4ZgD9pLDiwZd+GGljVyMjLKvVpNwPB7LU0GsXgD9Pdv6xqWLO4lQ== X-Received: by 2002:a17:902:f552:b0:269:b03b:c272 with SMTP id d9443c01a7336-269ba55f95fmr207852485ad.52.1758567220075; Mon, 22 Sep 2025 11:53:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 69/76] linux-user/aarch64: Implement map_shadow_stack syscall Date: Mon, 22 Sep 2025 11:49:17 -0700 Message-ID: <20250922184924.2754205-70-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568367430116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/syscall.c | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index dfe114ceb3..0a7ce7a262 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6356,6 +6356,12 @@ abi_long do_arch_prctl(CPUX86State *env, int code, a= bi_ulong addr) # define PR_SET_SHADOW_STACK_STATUS 75 # define PR_LOCK_SHADOW_STACK_STATUS 76 #endif +#ifndef SHADOW_STACK_SET_TOKEN +# define SHADOW_STACK_SET_TOKEN (1u << 0) +#endif +#ifndef SHADOW_STACK_SET_MARKER +# define SHADOW_STACK_SET_MARKER (1u << 1) +#endif =20 #include "target_prctl.h" =20 @@ -6571,6 +6577,54 @@ static abi_long do_prctl(CPUArchState *env, abi_long= option, abi_long arg2, } } =20 +#ifdef TARGET_AARCH64 +static abi_long do_map_shadow_stack(CPUArchState *env, abi_ulong addr, + abi_ulong size, abi_int flags) +{ + ARMCPU *cpu =3D env_archcpu(env); + abi_ulong alloc_size; + + if (!cpu_isar_feature(aa64_gcs, cpu)) { + return -TARGET_EOPNOTSUPP; + } + if (flags & ~(SHADOW_STACK_SET_TOKEN | SHADOW_STACK_SET_MARKER)) { + return -TARGET_EINVAL; + } + if (addr & ~TARGET_PAGE_MASK) { + return -TARGET_EINVAL; + } + if (size =3D=3D 8 || !QEMU_IS_ALIGNED(size, 8)) { + return -TARGET_EINVAL; + } + + alloc_size =3D TARGET_PAGE_ALIGN(size); + if (alloc_size < size) { + return -TARGET_EOVERFLOW; + } + + mmap_lock(); + addr =3D gcs_alloc(addr, alloc_size); + if (addr !=3D -1) { + if (flags & SHADOW_STACK_SET_TOKEN) { + abi_ptr cap_ptr =3D addr + size - 8; + uint64_t cap_val; + + if (flags & SHADOW_STACK_SET_MARKER) { + /* Leave an extra empty frame at top-of-stack. */ + cap_ptr -=3D 8; + } + cap_val =3D (cap_ptr & TARGET_PAGE_MASK) | 1; + if (put_user_u64(cap_val, cap_ptr)) { + /* Allocation succeeded above. */ + g_assert_not_reached(); + } + } + } + mmap_unlock(); + return get_errno(addr); +} +#endif + #define NEW_STACK_SIZE 0x40000 =20 =20 @@ -13945,6 +13999,11 @@ static abi_long do_syscall1(CPUArchState *cpu_env,= int num, abi_long arg1, return do_riscv_hwprobe(cpu_env, arg1, arg2, arg3, arg4, arg5); #endif =20 +#ifdef TARGET_AARCH64 + case TARGET_NR_map_shadow_stack: + return do_map_shadow_stack(cpu_env, arg1, arg2, arg3); +#endif + default: qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num); return -TARGET_ENOSYS; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567945; cv=none; d=zohomail.com; s=zohoarc; b=JomJOwD2GNy2MFliBXmbG6K3f80x5EQjrjdkg5wbYTciYfbN3eewn7kcfA5VjzMTXAwFRIlUMw5CzPQMHl/QAbcFX04aN9BeL6fOhySonczbbq8MVgKHQpHCzPAB8m/GX2muP7sKbgpCM4GXE8WYX6sP/SK5HHoK5DVjwjiPy78= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567945; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=x7nV0Ak+FzJdflIEY7yKbyAYL5FePaOZ1XHx7vKnyo4=; b=CmTxnW4GfxQLmkg3Tn+n+aD0zWFJV2m5+baroerTXtfE6PCCnvog8G3NJOT0YJEMu9xeEe7YhXWSw+7jegRI1/WzaltJge46wDy5vqNkjMD7XNcaSGLInIY2NbrXYxFQn4gMW/arLZNvQovbRhPRCpXy7CHiSauPG3H2WMsddr8= 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 1758567944921715.8125261738126; Mon, 22 Sep 2025 12:05:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljB-0002Hm-88; Mon, 22 Sep 2025 14:57:33 -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 1v0lgS-0006Ay-VI for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfT-00052U-Na for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:36 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2445824dc27so50981155ad.3 for ; Mon, 22 Sep 2025 11:53:42 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567221; x=1759172021; darn=nongnu.org; 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=x7nV0Ak+FzJdflIEY7yKbyAYL5FePaOZ1XHx7vKnyo4=; b=y0+3BjEqZNfVpPK+00yjnCpSrxi8Sz9GztA4QK7qnrmLlbMATwGouw1hodDUCuiBea g9C5vPD1qClPdlwgMAg3WLH/ne1N05JTCffAJVEguXvym/8kKwCMeaE4Oe6kdGPJcdgh mWQAeXVzS4NNd0v2q/1Ck7mEJiS7RM4gkIPISXovVIYtp8DVJUj1bicA6t0lASlJhiuG M41ptGRzxs2OBW9m4iFpKji0tU3uC3fuE40shL2DlzgZPzyrlR/BrwBmA2rF3yzQlaC1 5l/pr5HRVN0yPjJmv+akzwKksHtzzsokRnAwKrz0b3m2rkkXMN8VEWxYmxXvwmKhwf48 5vwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567221; x=1759172021; 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=x7nV0Ak+FzJdflIEY7yKbyAYL5FePaOZ1XHx7vKnyo4=; b=EDTpAP0X18kzzqUvUZm9E2FV7oQfIvORBZxsuXse7dp6tlFDcCZKTtZB8KanwGv1Cm IgBCn1sftFt6e1By98q53aqxIfpbov/nW5U38gyRmGGxjtvsVEIswGj1wjdkhma3+Myh Yj0Rj9+jV0QTVck4rxEqNk3kv8gLhSTBZ9y4d3/UYlmjAXd4FhzwjfTI1maSiDKDHBMX MT70wYaNj8E072SClokF5EYtxzORUkoD3i8GTljWiGUMTyRpu6iT5SNrRcHvivG02c3a SFWRjk1/t2/KxmWKn9B4fYDEdQkSFFVWcGTrFPVbxiGv+79sE98fChSwOS6WPL8any27 MpVg== X-Gm-Message-State: AOJu0YzpNeJ2FyC/l0hKAnahbkojc8VRB3wbRAk+qdFeXqAmNeZcgEKX OUy3u2mtuDIhPwx5ufSnKe76zQ26IgltNb8HwwffNZvvo/ucRvcZzxsdC3tfvtqSiFvTiSR++zL YFnYC X-Gm-Gg: ASbGncuin/VdNGRC5hXvDlxytMy4dDxhxiYnOzDubtxg3cu/3Yuwbb82f5Hj2XekHYh 49OMMhLjwTRttdREMKSFemlbRVaZRX4Qo68yclgm/Ld9ZOtts2/TNOl/zFefxR2GA45nERyWbPi tM4wLkroIybEEH5A1U8N4b1bbbw0vUkl91w+mZ62IUFkTdKKvERN7CmzZQ0AICJezGY5RabsiPD IDkoa3LaTyppdwAGnnbZORSCfuNbpao5vEh7Yar1+fj7XTox10+MSSlBaUIeraU0dieKfhwUwdo NyNnrw6NFDQOv0YxMHPpg6CkYLcB3PFaceHSl4WeWNW8HcxLNf2Oz6Ft4tIaxUXnrMMWwEQHavY crMqb6Dp48xCJOGQJsVC+qWPzuY7B0jjthCJLagU= X-Google-Smtp-Source: AGHT+IF1yXZm6ppXW7M2y5mnXlLaKY+H/GfFGoOF+b1wzpjcXgfOQx5PJ3wtR0zHhxn0i8EnTjegGg== X-Received: by 2002:a17:902:8490:b0:269:8072:5be7 with SMTP id d9443c01a7336-269ba566c82mr124399245ad.56.1758567220755; Mon, 22 Sep 2025 11:53:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 70/76] target/arm: Enable GCSPR_EL0 for read in user-mode Date: Mon, 22 Sep 2025 11:49:18 -0700 Message-ID: <20250922184924.2754205-71-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567946566116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- target/arm/cpu.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 731b4d5725..09c27451fd 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -307,6 +307,10 @@ static void arm_cpu_reset_hold(Object *obj, ResetType = type) env->cp15.mdscr_el1 |=3D 1 << 12; /* Enable FEAT_MOPS */ env->cp15.sctlr_el[1] |=3D SCTLR_MSCEN; + /* For Linux, GCSPR_EL0 is always readable. */ + if (cpu_isar_feature(aa64_gcs, cpu)) { + env->cp15.gcscr_el[0] =3D GCSCRE0_NTR; + } #else /* Reset into the highest available EL */ if (arm_feature(env, ARM_FEATURE_EL3)) { --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567655; cv=none; d=zohomail.com; s=zohoarc; b=b1FE/kzY0JZwUnSjm3yVsAa/9lUTwEwWDZJWC+Hai6mrHNhVbnqJKQOKTnO9idUXUF/v9TVLhCPL15eWQVPaw+Pv3kK+vWAVCQaSttUxpnySuHEIKW5EX0aBXhp7evUm3VvY0RduB0qSecVMqBwrlPV32nici22ebdbh2GvcyM4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567655; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TShQhvQkk0r8kwmD31rsIF74/vVO8BlgWjtZI7/oTSM=; b=OEnotVX3XIY61AHQ9b/vfop9HyG1k9wzQnLXpvG81Uistp+N/BxawazMMbFYo8xCrZiHoPWdxdgdHI4DECFnsSyCNZtWapkF0WC92ASMq2RfdEaSHRDFsN0yyQl/6xasXUW0RElL5yPHyUFvOD2Mw+K3YTPsegfpRWy2g2MWjO0= 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 1758567655538489.49699522452966; Mon, 22 Sep 2025 12:00:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lj4-0001qR-JY; Mon, 22 Sep 2025 14:57:26 -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 1v0lgS-0006Ax-Uu for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfW-00052m-1N for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:44 -0400 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-269af38418aso50838615ad.1 for ; Mon, 22 Sep 2025 11:53:43 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567221; x=1759172021; darn=nongnu.org; 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=TShQhvQkk0r8kwmD31rsIF74/vVO8BlgWjtZI7/oTSM=; b=h8SVZk/wCX05ogDQzo3UluFNQyOThW7cXup6Z4irKkPh9q8zyJBkczMfEhcJw2Fijm AHGZwKuHF1DLx2nfA7VyxXKoWZVhlV0oq73tRevMDZucgGB0t6mCnAocIH/Ox+grTkyP SUUhinoZ2YZi45pGojOOfF04Yz5f06uL38/U9GbjL+8rYGHDAhHsEoox9tD1Ue5RFQlX Gf7L1wPuQcxeY7ONeitV5XNCzJj3549nIgH5zLUiCVbl4DwmyKSGk/R1U0TCMZEqthyD 9ot04QX7iAtKwklkblvEE8KFdcwPtKRP3udS12SlJMHNI84+zVI/7nbU35DgdF5Chsw2 w4Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567221; x=1759172021; 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=TShQhvQkk0r8kwmD31rsIF74/vVO8BlgWjtZI7/oTSM=; b=vOJSVe8ubzXNzgI0RHfVAy3FeWosszoi7XBIsV4tCe1n5hRjU7IQEs4pYh09/j6qfi sIi7iavBBxH12x4UsK2a9XFKusxJdWo8oFAq4JE1+rgruINXdGPxtgFQFt9niqb9HbjQ 7i1x2iTUay1lgFutcnu0hfyQiB1k9vpITblZVoT0VEXm5j0DWuUSmzbtfwd5tyJ1Lix1 ErripqxAzFiR0/47QEQVxYZSgLN7B3IxvSLJD289aWnCNpl2fqqUA/r9s+sqDpzSlzMk UXReiIj7hw1yNylz5Tpc4lJwLoRnZ+JvsP5Ked29EV0JgUPmZGVR8/iDVShCEG5dtJvz ASJA== X-Gm-Message-State: AOJu0YxMcCFRdgi8z0UkjYUGJbjx0KJZ6GclC4zJriXg+GCGx2+hTa72 ScwNPh0R6iUL7knpj6qoTDlzWYp3WbvxCzi9or8BYnQaD4bJ2k0m10Qg+Tytk6pweetbfuUyTPj A/Azb X-Gm-Gg: ASbGncsCgMselcgu0WpnajKIO0V0VkO0gDCoBfUxdVWK0aUNpjmzjiWlMZaFxJ/ipju /VulsbR6JF0C46lb4AFz53eJVaQ1rRRISMxZmPrPpjYFNIlitVcmF72WUoEsDoqcLcGNP2tn8pq s1ePvYnca6wBdLnVg6iw+3eHg6wWkLfRtAXlTLFcN0H9e9ysSlpQJhrZBiOdaOQgnBKYqJl9zN5 40hoIEMVbqsArrb2EMilIauy+ECR2i+vLCbfjr5vcFN67yZ8d0ISpnH4GcOMJOPiKkUru8gXVFK o6wqgFpzvLKcFO1aDdvz0NDPJerDYqqwTymeIGPGbIYY9by2dL/SfnscyaJMD1fHD7HTAOrPDng tycX1DE1jjcCYb/WRiycOnZcTp912 X-Google-Smtp-Source: AGHT+IHy+NiEq0EnPsUFsqcW5xhWtpj3DbTWRLQCxEVHdXkA/yKAveRZoFM44VEFLntx/Jj0IvlLGw== X-Received: by 2002:a17:902:ecce:b0:268:500:5ec7 with SMTP id d9443c01a7336-269ba3ec4e2mr195656955ad.2.1758567221608; Mon, 22 Sep 2025 11:53:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 71/76] linux-user/aarch64: Inject SIGSEGV for GCS faults Date: Mon, 22 Sep 2025 11:49:19 -0700 Message-ID: <20250922184924.2754205-72-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567657314116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/aarch64/target_signal.h | 1 + linux-user/aarch64/cpu_loop.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/linux-user/aarch64/target_signal.h b/linux-user/aarch64/target= _signal.h index 6f66a50bfd..e509ac1032 100644 --- a/linux-user/aarch64/target_signal.h +++ b/linux-user/aarch64/target_signal.h @@ -7,6 +7,7 @@ =20 #define TARGET_SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */ #define TARGET_SEGV_MTESERR 9 /* Synchronous ARM MTE exception */ +#define TARGET_SEGV_CPERR 10 /* Control protection fault */ =20 #define TARGET_ARCH_HAS_SETUP_FRAME #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1 diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 6060572eed..41d6b35498 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -89,6 +89,11 @@ static void signal_for_exception(CPUARMState *env, vaddr= addr) si_code =3D TARGET_ILL_ILLOPN; break; =20 + case EC_GCS: + si_signo =3D TARGET_SIGSEGV; + si_code =3D TARGET_SEGV_CPERR; + break; + case EC_MOP: /* * FIXME: The kernel fixes up wrong-option exceptions. --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567559; cv=none; d=zohomail.com; s=zohoarc; b=bNFK1y2eJNs5NGWPjde0pNpY4iqkFdgJMXAV1rF8H3v9M3V/3Tx7y2nJdhkS+nVuPUpR2ReaZ9B3oZ14K6gYQ5Nko1lWjn/sNAKty/pjPo6t1+XwBnMqbqsGxJjUrq21DXLkZCVb3t/3fB7WmAjULPoaXGcwFhRy3E931S4r0SU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567559; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jUo2eLEQH3tvadRbtyXeqZmXKqgrSzHJmdQtpKn9Hto=; b=h07w6a2Zy0TyaQm9MHmjSPAkx/enkcS0Gu3SKKourHihp6mViFz7RsMUhrlOj0TmNPjYmFkVT0vwXpHcfzaIIyPvnkYqduFuULIdJrYdjDsN2vKTsmbSDotIq4mAL123j7s9DrVN7z5alaySDyepgIKaQIL5x1UzNOzZZU3y1gA= 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 1758567559948133.1783395049914; Mon, 22 Sep 2025 11:59:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljF-0002dS-MV; Mon, 22 Sep 2025 14:57:37 -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 1v0lgS-0006As-U3 for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfV-00052v-Hp for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:40 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-26f0c5455e2so18109395ad.3 for ; Mon, 22 Sep 2025 11:53:43 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567222; x=1759172022; darn=nongnu.org; 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=jUo2eLEQH3tvadRbtyXeqZmXKqgrSzHJmdQtpKn9Hto=; b=CrAT6XhOs4G9hbft/fMcM9bLrUiCe4loeWPXccwbgt6E0+oubYNs2kdPsWku/1S9KO SKvZ178kwqiFxhiDb/uFraxHCZShhrj42vY62nfFRzvlDF11p3WyiUhJcs8l+03yr3m0 Ol/10NXgYgPSzJ/w+hE4r6yTpwF6tlg+qT8jsjFRlwzRYQ46L3GfZQ7zyUBgt0B6QGuz NQmSc8J6dKQ9SYymhOCY257+CYgpUVgpaT4gSuH/Go+fkyerXTyuBvzzv1ZuharNt76Z MmeyQ4dYm6O1U79hWrgGEX2y2h1ErXzT6OwaOqq2Gp0B38DZ3f9/VCWUk4DH5W2fkt4g UJ4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567222; x=1759172022; 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=jUo2eLEQH3tvadRbtyXeqZmXKqgrSzHJmdQtpKn9Hto=; b=kfCSxc4JYcRadTrNiHc33M3mR4bN4EfPWtscdcYQk1RvXwCYDtlejxipvzqzqWT6PZ +Zz5RHUH6UkhADXQWzPt1qFjv07+xdS7v8LrWXjcEEWHOIp2LMrsv5O+s7fHBtrjz6/M p+hVPKonqOhrI123qJe7sIiRd4ArYYLjp4jzywPeN1YCRkKXp4kLIH/D18NNodx3hllW EOMTxnMco6iYrnXNFdyGKJ3frnB0gJn2xFZDVK8sqca38O6l5hIIy+6MZK7pEI51e8EA HektSRHYxein7zoWkcLV4SvteNeL2blNmU2BxdajmlJhOiNroUj229demA7fz/PyhdWS TqQA== X-Gm-Message-State: AOJu0YwVewZtce8dvdtPCOf//zOrr2gDbTu9WkpljhjASoK2AuqG1PXl 8Hr04DnRENZfa6AWZWfLCVbmkfJQGMhIkKnpkhokqYvaIu2FXi85A7216CAAm4jhB+4ybjd+t9J CGvK1 X-Gm-Gg: ASbGncsUqig17F4z/E66pt9M4MkDeLfBjVLQI6y7MW2YzrtIayTzDjWTVc/O+zppTXw Mv4eE0ksmiRvnksg5gS3oJbXPyH5fUvgaWbufwzXqG87ApUjg+nys29E9PLaahqYAOoaYitLkJa vyeKvPGzjwVfBJleRXX67pAZzJU40ZkDwT1/MrhtfRm1JRtdzzY4ODsCiAtQENBpqUg30gIK1Z4 iwkx7a8/7B/CdiL/rx0mKTX21ITXdGUM3OwjKmHWep/nBlqixRxXaCdAx7fzlMb19lqWHsHim73 vJej1vkD+lzifgEmqpAQwe/i0LaWeaxfdiFZXDaxYXs33DrpAmZ0fsoxB0lRZY1T7GO4MBXg7tk SnnNJrOw/SPJh328RMwc92Jzc+E8k X-Google-Smtp-Source: AGHT+IE5P7OPde3GPD6vgQ85t8OM3nT/pVjggMPGuXfhpIAdz0f1lLI9B0OP2ThA2oA//5Y4AzllRA== X-Received: by 2002:a17:903:1aa5:b0:24b:11c8:2d05 with SMTP id d9443c01a7336-269ba542560mr214875705ad.45.1758567222385; Mon, 22 Sep 2025 11:53:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 72/76] linux-user/aarch64: Generate GCS signal records Date: Mon, 22 Sep 2025 11:49:20 -0700 Message-ID: <20250922184924.2754205-73-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567561823116600 Content-Type: text/plain; charset="utf-8" Here we must push and pop a cap on the GCS stack as well as the gcs record on the normal stack. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/aarch64/signal.c | 138 ++++++++++++++++++++++++++++++++++-- 1 file changed, 132 insertions(+), 6 deletions(-) diff --git a/linux-user/aarch64/signal.c b/linux-user/aarch64/signal.c index ef97be3ac7..f7edfa249e 100644 --- a/linux-user/aarch64/signal.c +++ b/linux-user/aarch64/signal.c @@ -22,6 +22,7 @@ #include "signal-common.h" #include "linux-user/trace.h" #include "target/arm/cpu-features.h" +#include "gcs-internal.h" =20 struct target_sigcontext { uint64_t fault_address; @@ -152,6 +153,16 @@ struct target_zt_context { QEMU_BUILD_BUG_ON(TARGET_ZT_SIG_REG_BYTES !=3D \ sizeof_field(CPUARMState, za_state.zt0)); =20 +#define TARGET_GCS_MAGIC 0x47435300 +#define GCS_SIGNAL_CAP(X) ((X) & TARGET_PAGE_MASK) + +struct target_gcs_context { + struct target_aarch64_ctx head; + uint64_t gcspr; + uint64_t features_enabled; + uint64_t reserved; +}; + struct target_rt_sigframe { struct target_siginfo info; struct target_ucontext uc; @@ -322,6 +333,35 @@ static void target_setup_zt_record(struct target_zt_co= ntext *zt, } } =20 +static bool target_setup_gcs_record(struct target_gcs_context *ctx, + CPUARMState *env, uint64_t return_addr) +{ + uint64_t mode =3D gcs_get_el0_mode(env); + uint64_t gcspr =3D env->cp15.gcspr_el[0]; + + if (mode & PR_SHADOW_STACK_ENABLE) { + /* Push a cap for the signal frame. */ + gcspr -=3D 8; + if (put_user_u64(GCS_SIGNAL_CAP(gcspr), gcspr)) { + return false; + } + + /* Push a gcs entry for the trampoline. */ + if (put_user_u64(return_addr, gcspr - 8)) { + return false; + } + env->cp15.gcspr_el[0] =3D gcspr - 8; + } + + __put_user(TARGET_GCS_MAGIC, &ctx->head.magic); + __put_user(sizeof(*ctx), &ctx->head.size); + __put_user(gcspr, &ctx->gcspr); + __put_user(mode, &ctx->features_enabled); + __put_user(0, &ctx->reserved); + + return true; +} + static void target_restore_general_frame(CPUARMState *env, struct target_rt_sigframe *sf) { @@ -502,6 +542,64 @@ static bool target_restore_zt_record(CPUARMState *env, return true; } =20 +static bool target_restore_gcs_record(CPUARMState *env, + struct target_gcs_context *ctx, + bool *rebuild_hflags) +{ + TaskState *ts =3D get_task_state(env_cpu(env)); + uint64_t cur_mode =3D gcs_get_el0_mode(env); + uint64_t new_mode, gcspr; + + __get_user(new_mode, &ctx->features_enabled); + __get_user(gcspr, &ctx->gcspr); + + /* + * The kernel pushes the value through the hw register: + * write_sysreg_s(gcspr, SYS_GCSPR_EL0) in restore_gcs_context, + * then read_sysreg_s(SYS_GCSPR_EL0) in gcs_restore_signal. + * Since the bottom 3 bits are RES0, this can (CONSTRAINED UNPREDICTAB= LE) + * force align the value. Mirror the choice from gcspr_write(). + */ + gcspr &=3D ~7; + + if (new_mode & ~(PR_SHADOW_STACK_ENABLE | + PR_SHADOW_STACK_WRITE | + PR_SHADOW_STACK_PUSH)) { + return false; + } + if ((new_mode ^ cur_mode) & ts->gcs_el0_locked) { + return false; + } + if (new_mode & ~cur_mode & PR_SHADOW_STACK_ENABLE) { + return false; + } + + if (new_mode & PR_SHADOW_STACK_ENABLE) { + uint64_t cap; + + /* Pop and clear the signal cap. */ + if (get_user_u64(cap, gcspr)) { + return false; + } + if (cap !=3D GCS_SIGNAL_CAP(gcspr)) { + return false; + } + if (put_user_u64(0, gcspr)) { + return false; + } + gcspr +=3D 8; + } else { + new_mode =3D 0; + } + + env->cp15.gcspr_el[0] =3D gcspr; + if (new_mode !=3D cur_mode) { + *rebuild_hflags =3D true; + gcs_set_el0_mode(env, new_mode); + } + return true; +} + static int target_restore_sigframe(CPUARMState *env, struct target_rt_sigframe *sf) { @@ -511,8 +609,10 @@ static int target_restore_sigframe(CPUARMState *env, struct target_za_context *za =3D NULL; struct target_tpidr2_context *tpidr2 =3D NULL; struct target_zt_context *zt =3D NULL; + struct target_gcs_context *gcs =3D NULL; uint64_t extra_datap =3D 0; bool used_extra =3D false; + bool rebuild_hflags =3D false; int sve_size =3D 0; int za_size =3D 0; int zt_size =3D 0; @@ -582,6 +682,15 @@ static int target_restore_sigframe(CPUARMState *env, zt_size =3D size; break; =20 + case TARGET_GCS_MAGIC: + if (gcs + || size !=3D sizeof(struct target_gcs_context) + || !cpu_isar_feature(aa64_gcs, env_archcpu(env))) { + goto err; + } + gcs =3D (struct target_gcs_context *)ctx; + break; + case TARGET_EXTRA_MAGIC: if (extra || size !=3D sizeof(struct target_extra_context)) { goto err; @@ -612,6 +721,10 @@ static int target_restore_sigframe(CPUARMState *env, goto err; } =20 + if (gcs && !target_restore_gcs_record(env, gcs, &rebuild_hflags)) { + goto err; + } + /* SVE data, if present, overwrites FPSIMD data. */ if (sve && !target_restore_sve_record(env, sve, sve_size, &svcr)) { goto err; @@ -631,6 +744,9 @@ static int target_restore_sigframe(CPUARMState *env, } if (env->svcr !=3D svcr) { env->svcr =3D svcr; + rebuild_hflags =3D true; + } + if (rebuild_hflags) { arm_rebuild_hflags(env); } unlock_user(extra, extra_datap, 0); @@ -701,7 +817,7 @@ static void target_setup_frame(int usig, struct target_= sigaction *ka, uc.tuc_mcontext.__reserved), }; int fpsimd_ofs, fr_ofs, sve_ofs =3D 0, za_ofs =3D 0, tpidr2_ofs =3D 0; - int zt_ofs =3D 0, esr_ofs =3D 0; + int zt_ofs =3D 0, esr_ofs =3D 0, gcs_ofs =3D 0; int sve_size =3D 0, za_size =3D 0, tpidr2_size =3D 0, zt_size =3D 0; struct target_rt_sigframe *frame; struct target_rt_frame_record *fr; @@ -720,6 +836,11 @@ static void target_setup_frame(int usig, struct target= _sigaction *ka, &layout); } =20 + if (env->cp15.gcspr_el[0]) { + gcs_ofs =3D alloc_sigframe_space(sizeof(struct target_gcs_context), + &layout); + } + /* SVE state needs saving only if it exists. */ if (cpu_isar_feature(aa64_sve, env_archcpu(env)) || cpu_isar_feature(aa64_sme, env_archcpu(env))) { @@ -779,6 +900,12 @@ static void target_setup_frame(int usig, struct target= _sigaction *ka, goto give_sigsegv; } =20 + if (ka->sa_flags & TARGET_SA_RESTORER) { + return_addr =3D ka->sa_restorer; + } else { + return_addr =3D default_rt_sigreturn; + } + target_setup_general_frame(frame, env, set); target_setup_fpsimd_record((void *)frame + fpsimd_ofs, env); if (esr_ofs) { @@ -786,6 +913,10 @@ static void target_setup_frame(int usig, struct target= _sigaction *ka, /* Leave ESR_EL1 clear while it's not relevant. */ env->cp15.esr_el[1] =3D 0; } + if (gcs_ofs && + !target_setup_gcs_record((void *)frame + gcs_ofs, env, return_addr= )) { + goto give_sigsegv; + } target_setup_end_record((void *)frame + layout.std_end_ofs); if (layout.extra_ofs) { target_setup_extra_record((void *)frame + layout.extra_ofs, @@ -811,11 +942,6 @@ static void target_setup_frame(int usig, struct target= _sigaction *ka, __put_user(env->xregs[29], &fr->fp); __put_user(env->xregs[30], &fr->lr); =20 - if (ka->sa_flags & TARGET_SA_RESTORER) { - return_addr =3D ka->sa_restorer; - } else { - return_addr =3D default_rt_sigreturn; - } env->xregs[0] =3D usig; env->xregs[29] =3D frame_addr + fr_ofs; env->xregs[30] =3D return_addr; --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567781; cv=none; d=zohomail.com; s=zohoarc; b=kpic65SwolrYIm4gWVAYeq+NTt8BO0H8+BR4LMPfMITwAwdGeWRNrj9HjzvmliZFLyHpH/ohuwZLsfsMa5o+/rttejDwcyDfGQk/b/nVHmtGDDwNTs/E5s4RIi8pHHdB9nQ1PEP51KWSA3CexcrZHLeLpUlDCXdoQ810AenU164= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567781; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3IYbDL7ZzrPeJgVCiHhUdegByQ1ip3ofl4M+Y1UUBtM=; b=U99OSsvTPSNfjqVl9BKYg2dSx1qu9lC3PHLpoR3D6ahMs99n4PIl3XLjgqMqneD1ve3z7sBs5rSLMWxZERtDSxH5LaNsv23iM7oVfJb9LHxXJ7sQDUulaVLFkaHBmoy+Dw4+a7/3f45T+Nn5ab4AkLc7nvhSHUEnYr8MjwKuzs0= 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 1758567781639707.1012135246407; Mon, 22 Sep 2025 12:03:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0lj9-0002F5-Qi; Mon, 22 Sep 2025 14:57:31 -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 1v0lgX-0006Ch-Er for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:51 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfW-00053J-7a for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2680cf68265so35249365ad.2 for ; Mon, 22 Sep 2025 11:53:45 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567223; x=1759172023; darn=nongnu.org; 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=3IYbDL7ZzrPeJgVCiHhUdegByQ1ip3ofl4M+Y1UUBtM=; b=AAVi4i+w4rIcEfe/1j1A3byj26ZxRaafpJPbkwOdMIcezyIfIzpxy5+iNH7i/9cP4b lAH7J4JPEl8BM8yluuYluTdJMGckaJXwBusn4nfsvvGmv3Th4ReD1r2tBSuozyKLxTUw MVc38Vi1Twn2GAnH7OuS0Tt5KQ7rszFS7K39D64RGf67PlrtJT2CMd87WjWuRVxyXEuQ BwV6QxJ9NHz2x6JOQmVKUKqv7xlC5kDwZnx7BTzBxAp3mwadjesdCLiFDxNGwFzsHPzb 6nkvCt/gmnYEmvz/1uYvs/Y9/SL0G6rEDN2cdFwuKy8RnPNmaSxRE005Q3Oy25t6L0Bf OaYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567223; x=1759172023; 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=3IYbDL7ZzrPeJgVCiHhUdegByQ1ip3ofl4M+Y1UUBtM=; b=JxaF9HrumEbC5K0m51805QgEJO5Qe1rxoii4D5Z2rSIUY01yX6YtjYxg6U1dpMaGE4 WAniQX02scwPdam3D9E9zip0B97Z/euH9B9wAlX1JgovTxGnYk3NJT6ckoExb54mAIsE WlpLjDetINvymk2pWTHOgPxI/Hoff9K9PI1bLhn9XwV6fVIdxPMsNHr/vqz9fq45L38V gc90vJw/WKB/2W7E0DfzCgBCS2+amy3SPFKHIQYcUphQgJVE8re33IYJQlJohxOIaP60 ZwQAKyeclsR5SgDQZ4lG1TYofbKg/73HO5ohDwQltvJReWNSQfTfkuD1JN2WQFW6XTPw LWLQ== X-Gm-Message-State: AOJu0YxNdcv7EFYttu8LtpTs0Drom+PzXvW4LLZNOp6aJxrXLXam14+m oplPeK04z02CbIq/+VeBE6WC52/PBXB7RwhlfqJJO+aBfroZgbNEZRkakI+a4Pdevei/ObJ7rQl 4orQ5 X-Gm-Gg: ASbGncvpLAZggyOnA+Bc8b2S0TLy8UZNXt8db2JeopDBOcz+vZlr0uBqU5j2KxEJgt/ V8Aqsv9KGG32v6vzIYq7iEw3khIjozgDfiO+rnUXhkDEnkKDdv5UWsl5TXey9T+l6wsiQqX/grp HdSenngjzED4tSsnhjF2RNjp1H6yxlEqOmzLQH2BPAyFOJiHkggdwl9vDbPLNkExAFHC3jcqg6w 2W5yR/YXC/z1G03NatnLUg2r79CdBLqFtD4N5OsvC62UdJIDFSVS3lSF9SmJp/0Biv/5ToY02OY Z2X9p0yGIGstUOJtIXdLYXLj92yUZahNXjFeEaMGqCT4TMHxCfsfNpGRpmfmf4U39wtyFc+I8WO mPl56rOz4+k7zzP56mvXbO3DzpaFP X-Google-Smtp-Source: AGHT+IEzf8Wiy2NKCx8H9SnpkzFth9aV71brdSnnU9dz0tHrG9Iw50zCTN79jt3ognF3uHYY31PaNQ== X-Received: by 2002:a17:903:32ca:b0:26c:3e5d:43ba with SMTP id d9443c01a7336-26c3e5d47bcmr179749685ad.17.1758567223171; Mon, 22 Sep 2025 11:53:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 73/76] linux-user/aarch64: Enable GCS in HWCAP Date: Mon, 22 Sep 2025 11:49:21 -0700 Message-ID: <20250922184924.2754205-74-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758567782668116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- linux-user/aarch64/elfload.c | 1 + 1 file changed, 1 insertion(+) diff --git a/linux-user/aarch64/elfload.c b/linux-user/aarch64/elfload.c index 77d03b50e1..3af5a37776 100644 --- a/linux-user/aarch64/elfload.c +++ b/linux-user/aarch64/elfload.c @@ -169,6 +169,7 @@ abi_ulong get_elf_hwcap(CPUState *cs) GET_FEATURE_ID(aa64_dcpop, ARM_HWCAP_A64_DCPOP); GET_FEATURE_ID(aa64_rcpc_8_3, ARM_HWCAP_A64_LRCPC); GET_FEATURE_ID(aa64_rcpc_8_4, ARM_HWCAP_A64_ILRCPC); + GET_FEATURE_ID(aa64_gcs, ARM_HWCAP_A64_GCS); =20 return hwcaps; } --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568197; cv=none; d=zohomail.com; s=zohoarc; b=RyqvWO8lqt0R+9U9ATBy2oEnT4AItAIMlYLEPvzuavEJXPU1lDJ84Avs6vIUUWpfZh+IloTYxNDgJAal/KuIVnyVFXRO1+CU2qOR9nmJ2jPGww3i5fPtx+LBsBA6DfCnlU3fo68Wyp5sqCU3FzBXMXH+tm7A5ejMUBLgMNVukzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568197; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cqQF3KdzeOa+e2b5cPo9hbNNnmvLOG1QQkCMhq6keuI=; b=cMiACHTrJ0HHviCz3k2txnn++GSg7w4IivVvMqYovE7cJAIBEU8gKWLPGYvFHlD7b/MgoWBVniDWMChs+YSrtqImGwrvl5SWT+M9vJ1lT8f94TTQiNa37WsNuBnBIiBBuKGuB3t3zi+wtzlIlLswS9YvYe21YHWv2fGJibskfBY= 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 1758568197833251.1409338674871; Mon, 22 Sep 2025 12:09:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljI-0002vT-6w; Mon, 22 Sep 2025 14:57: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 1v0lgV-0006CY-IA for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:49 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfY-00053d-Pj for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:47 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2570bf6058aso63818925ad.0 for ; Mon, 22 Sep 2025 11:53:46 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567224; x=1759172024; darn=nongnu.org; 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=cqQF3KdzeOa+e2b5cPo9hbNNnmvLOG1QQkCMhq6keuI=; b=lWmdYpuVhJKkAfxVpvC5jdbCNwdR5MpN1NljerfewHRjkPIzdCb3DMWwRIC9ETTMMa dWitmNWLZ8FTYNLBvhfLz1mS6iREZGbxCc5FSf9J/SS/SDVsfhR7vzm75CEnGbZ+papd RSTsnM87RqgkudccgGgkY1b4vqnSlQ7YXUw3hwxpckO4IzcLTIITf9FTxnJKVxRHFUMY G+wa8VxOUw0DeYfN0aU2094j37EVhJpgFmRBbs12PyB03S+NIzrKsnLlhooM8cG/UWeP TDdFmZ0CA2VujBz/vSAHo5gu83AsyreSPAk3pE1CL9XIIZiBOVTValFfCO14g5t4adJd 7TbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567224; x=1759172024; 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=cqQF3KdzeOa+e2b5cPo9hbNNnmvLOG1QQkCMhq6keuI=; b=HNeORfV3HZMQ33obCHdxknDuZfvrd50hw7Y9YjY8q6FkqbwgeCWS6zZPKBuvd24blt iAvcKGiMLfbLbCg/He9YU2GwmWSvJhjJEEe/AlKSqNMT6Det6tr0M+xvX6Zk9VwBkFEQ ipDeHJQqt2Rz1iyndt0eRvBP+Cz2x68LztooM4x/DaLu6/nC/9/s6RI4SbhsiFY00jp9 DK7AGge+RNaBQLJx+TU7p8g5nqTzpH1r/YMtmkMhGDXXiX5ZID8UfJ32zW3NyXG5NJ/G IFsUkJVRL329qyeZ951stWY+nP+xN2V7TnVO5vf+uC5L6lPehEMTJs02FPDGlEWieRt7 fvgQ== X-Gm-Message-State: AOJu0Yz0AE4HCqlzLr0ttjmaJpk517WEOKPg8W5XNbXASz7U/DJZGong 3d1v9xD93fNa1kLUbgC9dc+IVTf/3R/hC5/NOdjS9ylk2z0LydBbIozFKEXkmrdWWwoy3Owx7V7 hlifP X-Gm-Gg: ASbGncvQ6X9YYpj/fCFG0nYMK/5UkW/S3I6vO1gnpRMk+9jZ+6/iuZMNy73w5qArqUx Y2lDqYGS4jRdVMpv0MUZXIQkuKF04nBSJPYr6Y6U/3yRojXQtmH4S9iJopN7GpYNGs49xVJyvTC WBWCs8gWVBZzzLZ8+8VdqRmmNa60t85j5DvdygRj7w9V1+oc2sLvE6t+kEQ1/cu5jJ1fKH6+dAd xvWUIuanEuvIzLdQWK4MWZREbe+WnRPivChaElGyoWhX3xxdd8NzVrzA+A2B1pj/4elP/mCScW0 WQKLI0IttetU8igN+qZN5sJxRa+DhPEFUf8bwOQjmoQamyzOW162Vb8mcLSdHvRvmwFtWjpceJB iHvvzdyJ8WvIh3Otx2CBV9dQ1qfPk X-Google-Smtp-Source: AGHT+IERdfGOF+/TK4ebST3uTT2B5fMvjC1CwBiMDWf8Y8KEbhbcONUP7DEkrhZX7GHJbpcwGrid2g== X-Received: by 2002:a17:903:44cb:b0:269:9719:fffd with SMTP id d9443c01a7336-269ba402239mr147127235ad.1.1758567224221; Mon, 22 Sep 2025 11:53:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 74/76] tests/tcg/aarch64: Add gcsstr Date: Mon, 22 Sep 2025 11:49:22 -0700 Message-ID: <20250922184924.2754205-75-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758568199445116600 Content-Type: text/plain; charset="utf-8" Add some infrastructure for testing gcs in userspace. Validate successful and trapped executions of GCSSTR. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- tests/tcg/aarch64/gcs.h | 71 +++++++++++++++++++++++++++++++ tests/tcg/aarch64/gcsstr.c | 48 +++++++++++++++++++++ tests/tcg/aarch64/Makefile.target | 5 +++ 3 files changed, 124 insertions(+) create mode 100644 tests/tcg/aarch64/gcs.h create mode 100644 tests/tcg/aarch64/gcsstr.c diff --git a/tests/tcg/aarch64/gcs.h b/tests/tcg/aarch64/gcs.h new file mode 100644 index 0000000000..99cb4d4e38 --- /dev/null +++ b/tests/tcg/aarch64/gcs.h @@ -0,0 +1,71 @@ +/* + * Linux kernel fallback API definitions for GCS and test helpers. + * + * Copyright (c) 2025 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef PR_GET_SHADOW_STACK_STATUS +#define PR_GET_SHADOW_STACK_STATUS 74 +#endif +#ifndef PR_SET_SHADOW_STACK_STATUS +#define PR_SET_SHADOW_STACK_STATUS 75 +#endif +#ifndef PR_LOCK_SHADOW_STACK_STATUS +#define PR_LOCK_SHADOW_STACK_STATUS 76 +#endif +#ifndef PR_SHADOW_STACK_ENABLE +# define PR_SHADOW_STACK_ENABLE (1 << 0) +# define PR_SHADOW_STACK_WRITE (1 << 1) +# define PR_SHADOW_STACK_PUSH (1 << 2) +#endif +#ifndef SHADOW_STACK_SET_TOKEN +#define SHADOW_STACK_SET_TOKEN (1 << 0) +#endif +#ifndef SHADOW_STACK_SET_MARKER +#define SHADOW_STACK_SET_MARKER (1 << 1) +#endif +#ifndef SEGV_CPERR +#define SEGV_CPERR 10 +#endif +#ifndef __NR_map_shadow_stack +#define __NR_map_shadow_stack 453 +#endif + +/* + * Macros, and implement the syscall inline, lest we fail + * the checked return from any function call. + */ +#define enable_gcs(flags) \ + do { = \ + register long num __asm__ ("x8") =3D __NR_prctl; = \ + register long arg1 __asm__ ("x0") =3D PR_SET_SHADOW_STACK_STATUS; = \ + register long arg2 __asm__ ("x1") =3D PR_SHADOW_STACK_ENABLE | fla= gs; \ + register long arg3 __asm__ ("x2") =3D 0; = \ + register long arg4 __asm__ ("x3") =3D 0; = \ + register long arg5 __asm__ ("x4") =3D 0; = \ + asm volatile("svc #0" = \ + : "+r"(arg1) = \ + : "r"(arg2), "r"(arg3), "r"(arg4), "r"(arg5), "r"(num= ) \ + : "memory", "cc"); = \ + if (arg1) { = \ + errno =3D -arg1; = \ + perror("PR_SET_SHADOW_STACK_STATUS"); = \ + exit(2); = \ + } = \ + } while (0) + +#define gcspr() \ + ({ uint64_t *r; asm volatile("mrs %0, s3_3_c2_c5_1" : "=3Dr"(r)); r; }) diff --git a/tests/tcg/aarch64/gcsstr.c b/tests/tcg/aarch64/gcsstr.c new file mode 100644 index 0000000000..b045aee925 --- /dev/null +++ b/tests/tcg/aarch64/gcsstr.c @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "gcs.h" + +/* + * A single garbage store to the gcs stack. + * The asm inside must be unique, so disallow inlining. + */ +void __attribute__((noinline)) +test_gcsstr(void) +{ + register uint64_t *ptr __asm__("x0") =3D gcspr(); + /* GCSSTR x1, x0 */ + __asm__("inst_gcsstr: .inst 0xd91f1c01" : : "r"(--ptr)); +} + +static void test_sigsegv(int sig, siginfo_t *info, void *vuc) +{ + ucontext_t *uc =3D vuc; + uint64_t inst_gcsstr; + + __asm__("adr %0, inst_gcsstr" : "=3Dr"(inst_gcsstr)); + assert(uc->uc_mcontext.pc =3D=3D inst_gcsstr); + assert(info->si_code =3D=3D SEGV_CPERR); + /* TODO: Dig for ESR and verify syndrome. */ + exit(0); +} + +int main() +{ + struct sigaction sa =3D { + .sa_sigaction =3D test_sigsegv, + .sa_flags =3D SA_SIGINFO, + }; + + /* Enable GCSSTR and test the store succeeds. */ + enable_gcs(PR_SHADOW_STACK_WRITE); + test_gcsstr(); + + /* Disable GCSSTR and test the resulting sigsegv. */ + enable_gcs(0); + if (sigaction(SIGSEGV, &sa, NULL) < 0) { + perror("sigaction"); + exit(1); + } + test_gcsstr(); + abort(); +} diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile= .target index 1755874bee..5e1b3a3385 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -75,6 +75,11 @@ AARCH64_TESTS +=3D $(SME_TESTS) $(SME_TESTS): CFLAGS +=3D $(CROSS_AS_HAS_ARMV9_SME) endif =20 +# GCS Tests +GCS_TESTS +=3D gcsstr +AARCH64_TESTS +=3D $(GCS_TESTS) +$(GCS_TESTS): gcs.h + # System Registers Tests AARCH64_TESTS +=3D sysregs =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758567732; cv=none; d=zohomail.com; s=zohoarc; b=OqbFxyDQ3ZuFXi79nw8inmqLcW8Oc42GCeRFR2RUok6hGA9JQjA3rgL/VIz6rtdvGRJcGiv0Wf5Y8glNKACbuVKpRdmH/G8pD8Riu4s0JUoxmUrGcBl5vjW3kmvmqqilHlgPwHqfV7kRJLo1oXBv0LU1YhlsJDNKPUaul+1SgKg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758567732; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=55ummCXHlN27uJsHHRoko5hx4ehNW7kEFeS5FsKkEGI=; b=XzuUzMYtfl7PFhV3yigK/PRdGOypDrNeiHg68lsULx+y8b6LyjefO2tt1uI6GC766Vc66ZDYWuADW30q4zaIU1KBqRvpit6KaErQBz2nJggEaOXLhgOZxIhKh7xfSbBWIZwoX8REMpXTtztDNP7dVrGxxVuEm5ITOx6Hwk+C3/0= 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 1758567732297625.7407272961417; Mon, 22 Sep 2025 12:02:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljQ-0003Yi-U4; Mon, 22 Sep 2025 14:57:49 -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 1v0lga-0006EL-6T for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:54 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfX-00053n-6H for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:51 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2698d47e776so34672585ad.1 for ; Mon, 22 Sep 2025 11:53:46 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567225; x=1759172025; darn=nongnu.org; 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=55ummCXHlN27uJsHHRoko5hx4ehNW7kEFeS5FsKkEGI=; b=RvYxoAzsqAhTckbtnVrKiUZLsj8zYgK+zo0PzKA0H2M6dvo9B/P7jEBW1eCNzdrxra AQp8/8O5DzrIPuPqP9vcUjnx2yh8XhWJWhOBPQl/tz1sbKBlMUTxnzuA3JizBxpq8QQW 5836M0rkFl80JlyFqcBpXHbKsCSMvYINPGREApodlUfZH3tT5dOGxtOxJ8126SqIv9LD pdwm72qCookOULa7d/6a7mFwlPQdqlZS2iutxCzL/Yt8HM4DNdRdkwko26jfYInFG/ZT 06IXpAvGpYdO1AGbXoMkuNHlQbm0OzEolT+n9xqmOy/uyh7dgYtOnVVWY15AJVhL1qVC PWiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567225; x=1759172025; 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=55ummCXHlN27uJsHHRoko5hx4ehNW7kEFeS5FsKkEGI=; b=vbJaubJ/GsLQxnYuq/gR5jsk55Zb4xjszJMsgp0xnY9QUwC5zMoNcB/jjEB/82O0ug iwJ9g4aHS1S9WvlLNnGvfDYCw0q79Ld2NK6wPb6pLf7M40TdqIUvAc4epnxLbHYtOLnr Y/W8QucVsFvDg1HzcPw3AT3E6JOPKD5bZByVo2ZYAyS+aw5Zg5GUW785dki6zI+zgmSJ CYQWzMRM1HjreBuDmbkIswMV3Grf3PgW8UNgaUy7shgKXgufGKYLshtQ7GgegonsNJQ2 gw18C66vzMRzdx8CExogSn/Pj71beirOxFuHWBNpRYsQlq5stDXCdN+OuMyGSLAgVvSa dTGQ== X-Gm-Message-State: AOJu0Yzo4G9gELfxEC8ZR5ZrUJibRo/hBzdCoe92HbGmCvmnPljuClLi ywm30hagltq6HpFMSKv8LO7IPv1/xAYeUZWkLctEcOE7yiqbkA60pbwr5pjm9TbUy7lep+ZImOs lQO8H X-Gm-Gg: ASbGncsf/RSiyw+6+Czg2Fzxe+SAu1vhiZd/ZpVYWeYti8gDuUY6T/QrLYa63QdLWg5 q+FMmUfRwhmtZOVxoin226Tx5bnDu3/U07IQERsboisRKPdlo8UedzBXFh4/ihYmgo0rZVRAaeq GDF38KNEkeWb8C6XiXRxL2V0Ps96fAEI08HoAM0J1zp4alRzj46jrhxK94Y+GnMBgdEPeRW/F45 amIPSmhQ3LjUSGdmqZgQUjdQ0Y9hzxt4f11WgMpG0NV9e4eRFE9XNpnY6YHiO7M3maA4orOTbPw EpkkD7AQWxcS+jrqv6Js45+k/APARlC9OCFFAHHaLmUGwIaQKpvtyPLCjiK2M1KLSMMPMXbPKuA h+aeZVcf5Tqn5LvxTZytp7MQ2g6mO X-Google-Smtp-Source: AGHT+IF1VSV3z7bnoj3CcGivDv+iMFSlhJf4md7j3nUnfgDksHmXJDrRAkw8tL0W7ey9x7GN/nbNRA== X-Received: by 2002:a17:902:d512:b0:278:9051:8ea5 with SMTP id d9443c01a7336-278905190dfmr56385015ad.21.1758567225099; Mon, 22 Sep 2025 11:53:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 75/76] tests/tcg/aarch64: Add gcspushm Date: Mon, 22 Sep 2025 11:49:23 -0700 Message-ID: <20250922184924.2754205-76-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.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, 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.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 @linaro.org) X-ZM-MESSAGEID: 1758567734243116600 Content-Type: text/plain; charset="utf-8" Validate successful and trapped executions of GCSPUSHM, GCSPOPM. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- tests/tcg/aarch64/gcspushm.c | 71 +++++++++++++++++++++++++++++++ tests/tcg/aarch64/Makefile.target | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/tcg/aarch64/gcspushm.c diff --git a/tests/tcg/aarch64/gcspushm.c b/tests/tcg/aarch64/gcspushm.c new file mode 100644 index 0000000000..c330417a2f --- /dev/null +++ b/tests/tcg/aarch64/gcspushm.c @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "gcs.h" + + +#define GCSPUSHM "sys #3, c7, c7, #0, %[push]" +#define GCSPOPM "sysl %[pop], #3, c7, c7, #1" + +static void test_sigsegv(int sig, siginfo_t *info, void *vuc) +{ + ucontext_t *uc =3D vuc; + uint64_t inst_sigsegv; + + __asm__("adr %0, inst_sigsegv" : "=3Dr"(inst_sigsegv)); + assert(uc->uc_mcontext.pc =3D=3D inst_sigsegv); + assert(info->si_code =3D=3D SEGV_CPERR); + /* TODO: Dig for ESR and verify syndrome. */ + uc->uc_mcontext.pc +=3D 4; +} + +static void test_sigill(int sig, siginfo_t *info, void *vuc) +{ + ucontext_t *uc =3D vuc; + uint64_t inst_sigill; + + __asm__("adr %0, inst_sigill" : "=3Dr"(inst_sigill)); + assert(uc->uc_mcontext.pc =3D=3D inst_sigill); + assert(info->si_code =3D=3D ILL_ILLOPC); + uc->uc_mcontext.pc +=3D 4; +} + +int main() +{ + struct sigaction sa =3D { .sa_flags =3D SA_SIGINFO }; + uint64_t old, new; + + sa.sa_sigaction =3D test_sigsegv; + if (sigaction(SIGSEGV, &sa, NULL) < 0) { + perror("sigaction"); + exit(1); + } + + sa.sa_sigaction =3D test_sigill; + if (sigaction(SIGILL, &sa, NULL) < 0) { + perror("sigaction"); + exit(1); + } + + /* Pushm is disabled -- SIGILL via EC_SYSTEMREGISTERTRAP */ + asm volatile("inst_sigill:\t" GCSPUSHM + : : [push] "r" (1)); + + enable_gcs(PR_SHADOW_STACK_PUSH); + + /* Valid value -- low 2 bits clear */ + old =3D 0xdeadbeeffeedcaec; + asm volatile(GCSPUSHM "\n\t" GCSPOPM + : [pop] "=3Dr" (new) + : [push] "r" (old) + : "memory"); + assert(old =3D=3D new); + + /* Invalid value -- SIGSEGV via EC_GCS */ + asm volatile(GCSPUSHM "\n" + "inst_sigsegv:\t" GCSPOPM + : [pop] "=3Dr" (new) + : [push] "r" (1) + : "memory"); + + exit(0); +} diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile= .target index 5e1b3a3385..fddb7bc9cd 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -76,7 +76,7 @@ $(SME_TESTS): CFLAGS +=3D $(CROSS_AS_HAS_ARMV9_SME) endif =20 # GCS Tests -GCS_TESTS +=3D gcsstr +GCS_TESTS +=3D gcsstr gcspushm AARCH64_TESTS +=3D $(GCS_TESTS) $(GCS_TESTS): gcs.h =20 --=20 2.43.0 From nobody Sun Sep 28 16:28:23 2025 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1758568104; cv=none; d=zohomail.com; s=zohoarc; b=btPZykY6LPLOnsyFSbRODB7x3w1BwkyoATPGA3LVSaMiM8hg5KstCbRfX6jhnwjnEGoq2PWfi5CWGk2FRXn488DFf3CCDDrG9PqR7lkpuASUSqwNqbrmovoeRrAgk8Tcjy7czkDVyPhNbVdJt2iAMzwCnYDFyinrqVE6+p/oVU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758568104; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3CvJSXdiWhbprsJzICEFPWeYtoNE9+mbwDhHlNPU7kM=; b=Tux7R+PBV6vDd1O1/TIQAYGYX23DizBUAALcLfcxeXCN796TlxtUxG5ido3QDRamJgKjRR4R1je+iEKbE6LW2Je/CTc/yzI5y/rVaUAVZ6Dm1Yeo2ZAShDsCM54289WKHj6pQlhKMyekUSbeplwY6Ov+dQA/DWeXsv3h0aAG28E= 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 175856810486082.28298227329321; Mon, 22 Sep 2025 12:08:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0ljH-0002qP-Fv; Mon, 22 Sep 2025 14:57:39 -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 1v0lga-0006EM-8I for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:54 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v0lfY-00053u-6V for qemu-devel@nongnu.org; Mon, 22 Sep 2025 14:54:51 -0400 Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-b5512bffbfaso4264536a12.3 for ; Mon, 22 Sep 2025 11:53:47 -0700 (PDT) Received: from stoup.. ([71.212.157.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698018a472sm138554795ad.58.2025.09.22.11.53.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Sep 2025 11:53:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1758567226; x=1759172026; darn=nongnu.org; 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=3CvJSXdiWhbprsJzICEFPWeYtoNE9+mbwDhHlNPU7kM=; b=moC7dobDRaaxwjYpGVXVfUmGMmQZd0e/+z8KYu7Q4zJha3PHCT7Q6itGMs/mdQKy04 ykuUUg0kttTqpcJetHOpta7hH4+FgMhCDRjfHE3qVtY5QyxiqZZgeAxQF/DNRs7EV27r QJmicYSmD5JnpnpQ4WqT1iwksT8dnqLwWrbLDPqADAewghqKN8QAUIMd3lr0VViLTYnh KEbw4kFMwMtZDRTBZkFiOM6aQPxBR6ICQBO2MvIte3YieAm/2C3VF3qGzW4SvSgO7NBA 35xZSIiNmeKZTCFT2382wQ7pO6C2XJDF06MyFtAFJYQ0f9t3GapnZId44jiqPxwF/BDM LcyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758567226; x=1759172026; 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=3CvJSXdiWhbprsJzICEFPWeYtoNE9+mbwDhHlNPU7kM=; b=dzcrbyPq0hC8/UFLh01S2+xHYdy2EcGXOS3trstSrRuwjnxngyHX8+WDd5aS7nOK8t FIrVx5iKHJdVNw+8BAFtL5R5F0P13/DO3sMw9Nqv8YZSxQqJkzP6vwON4B3hMkNlpvUr ZTerO3dCngCZfwspdT2w8WKQgSTbejGqxhuKDKraI53s0eo7OFjezRldz9D8fiW829GW xS1RZrOL+XLov3sy5qE4+/1Dys+EQPgOk6/G6wsHQgjNgfVYtsXyR432K3jgoK8q3mOF duEMvhPeyVfhygmNUAuGz8+qngAXewx8iTJYaYNsSgGBbZ1YxPY030grKGkRshFFEsSw K8cQ== X-Gm-Message-State: AOJu0Yw+gWRLT7lr7PvdeDY1fEeu8QF7uU4tJlKjyG7o0/l0V+e+1zpY D5i4BpVU2FwCCa5fuTnzomY9ROPfdojABPdzgAzYcqSHYY1kx/tb2/RvwiSV9ziooYZO7PdGcyd a0B2I X-Gm-Gg: ASbGncuyLBV7crCnZWbANEocg/CRtycjYsRseee8j2TDdGUa1BbVWrs0AuXNZYrtzhY CCkIXJqUgA6Fa3ylS6MLFwVUS7vYsn7Z3JCtk5JlxhAvQxQk5AJpc56ENSaaZMNLNrav2WU2Vcm rsLhfl7n9+191BfsnZHl5yam1SgeiMqAEGdEQkT70qVbcTQ3c818vVz/O0IkWjBRj4jDve8h/hV BOShfIQ0irCiIMnPVArzuRkNsHVuj5CKjy7EgtTTA8fdkgdFXf+ibYrWAAGSq+PCrSd5bIs1C5a aAIE5CdfcjZmYi8JFNgu4gxObwDVWQ0v7xa57ubAtVEF/8sAcaGzJOJ6pzmMxau7rpxlpqvwW0l 6oUeO2aBePpw0bQ5Yy5KZHtlsBdw3 X-Google-Smtp-Source: AGHT+IF2x+qiyjIjYIwD42/r8yX6ivjTvn2+lUHWTUGcC3Z1o6cpVa0xTyE9bV7vgURRdUNKQOlc6g== X-Received: by 2002:a17:903:2285:b0:269:d978:7ec0 with SMTP id d9443c01a7336-269d9788368mr163743025ad.28.1758567225974; Mon, 22 Sep 2025 11:53:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v5 76/76] tests/tcg/aarch64: Add gcsss Date: Mon, 22 Sep 2025 11:49:24 -0700 Message-ID: <20250922184924.2754205-77-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250922184924.2754205-1-richard.henderson@linaro.org> References: <20250922184924.2754205-1-richard.henderson@linaro.org> 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::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 @linaro.org) X-ZM-MESSAGEID: 1758568106364116600 Content-Type: text/plain; charset="utf-8" Validate stack switching and recursion depth. Reviewed-by: Pierrick Bouvier Signed-off-by: Richard Henderson --- tests/tcg/aarch64/gcs.h | 9 ++++ tests/tcg/aarch64/gcsss.c | 74 +++++++++++++++++++++++++++++++ tests/tcg/aarch64/Makefile.target | 2 +- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 tests/tcg/aarch64/gcsss.c diff --git a/tests/tcg/aarch64/gcs.h b/tests/tcg/aarch64/gcs.h index 99cb4d4e38..e821963cb8 100644 --- a/tests/tcg/aarch64/gcs.h +++ b/tests/tcg/aarch64/gcs.h @@ -69,3 +69,12 @@ =20 #define gcspr() \ ({ uint64_t *r; asm volatile("mrs %0, s3_3_c2_c5_1" : "=3Dr"(r)); r; }) + +#define gcsss1(val) \ + do { = \ + asm volatile("sys #3, c7, c7, #2, %0" : : "r"(val) : "memory"); = \ + } while (0) + +#define gcsss2() \ + ({ uint64_t *r; = \ + asm volatile("sysl %0, #3, c7, c7, #3" : "=3Dr"(r) : : "memory"); r= ; }) diff --git a/tests/tcg/aarch64/gcsss.c b/tests/tcg/aarch64/gcsss.c new file mode 100644 index 0000000000..9550c68e7e --- /dev/null +++ b/tests/tcg/aarch64/gcsss.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "gcs.h" + +#define IN_PROGRESS(X) ((uint64_t)(X) | 5) +#define CAP(X) (((uint64_t)(X) & ~0xfff) + 1) + +static uint64_t * __attribute__((noinline)) recurse(size_t index) +{ + if (index =3D=3D 0) { + return gcspr(); + } + return recurse(index - 1); +} + +int main() +{ + void *tmp; + uint64_t *alt_stack, *alt_cap; + uint64_t *orig_pr, *orig_cap; + uint64_t *bottom; + size_t pagesize =3D getpagesize(); + size_t words; + + enable_gcs(0); + orig_pr =3D gcspr(); + + /* Allocate a guard page before and after. */ + tmp =3D mmap(0, 3 * pagesize, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0= ); + assert(tmp !=3D MAP_FAILED); + + /* map_shadow_stack won't replace existing mappings */ + munmap(tmp + pagesize, pagesize); + + /* Allocate a new stack between the guards. */ + alt_stack =3D (uint64_t *) + syscall(__NR_map_shadow_stack, tmp + pagesize, pagesize, + SHADOW_STACK_SET_TOKEN); + assert(alt_stack =3D=3D tmp + pagesize); + + words =3D pagesize / 8; + alt_cap =3D alt_stack + words - 1; + + /* SHADOW_STACK_SET_TOKEN set the cap. */ + assert(*alt_cap =3D=3D CAP(alt_cap)); + + /* Swap to the alt stack, one step at a time. */ + gcsss1(alt_cap); + + assert(gcspr() =3D=3D alt_cap); + assert(*alt_cap =3D=3D IN_PROGRESS(orig_pr)); + + orig_cap =3D gcsss2(); + + assert(orig_cap =3D=3D orig_pr - 1); + assert(*orig_cap =3D=3D CAP(orig_cap)); + assert(gcspr() =3D=3D alt_stack + words); + + /* We should be able to use the whole stack. */ + bottom =3D recurse(words - 1); + assert(bottom =3D=3D alt_stack); + + /* We should be back where we started. */ + assert(gcspr() =3D=3D alt_stack + words); + + /* Swap back to the original stack. */ + gcsss1(orig_cap); + tmp =3D gcsss2(); + + assert(gcspr() =3D=3D orig_pr); + assert(tmp =3D=3D alt_cap); + + exit(0); +} diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile= .target index fddb7bc9cd..55ce34e45e 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -76,7 +76,7 @@ $(SME_TESTS): CFLAGS +=3D $(CROSS_AS_HAS_ARMV9_SME) endif =20 # GCS Tests -GCS_TESTS +=3D gcsstr gcspushm +GCS_TESTS +=3D gcsstr gcspushm gcsss AARCH64_TESTS +=3D $(GCS_TESTS) $(GCS_TESTS): gcs.h =20 --=20 2.43.0