From patchwork Sat Jan 22 18:24:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534114 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1680465imr; Sat, 22 Jan 2022 10:46:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJxeuGNrxTXQ1J/aQUhARPPebMNuKQ3Rk9Y2XiqFPWN+XmO785Yo8qaQFTlxdWkoXzGVnHMV X-Received: by 2002:a5b:249:: with SMTP id g9mr13574265ybp.579.1642877163765; Sat, 22 Jan 2022 10:46:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642877163; cv=none; d=google.com; s=arc-20160816; b=Z3PJ+FflD/eiHxFL6g4oQicLLif8XbXPTsX8fc753hIbtM58O0qhbI5x/7jBsi7dII AqFrzCs6eTcJEEDIt+AoMRQQQMZjcs0hLsWonWzdwLarXcvo/RaeE0uIeRJCRlC2aADS CTHGqrNDQPzCA7E5exH4mBz5NpQM/G2AZxoPzPYR/z7kkFrBi0COn+gEK2kKO+/QN+Xj 4nYh13lqlFOSVEa6UZSThsfC2S+2zuAd6mv6TiLlOwwS198i5TkwUSf8nQ0+IpY8RpVd dplbdXQLkHSdfQLayVW+2+m3xXwBe3b6K7HSIuihmnFE1EHSNu+n+IKnmYamjnYTZH7e E8Qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=SCrj7rNy2XEjALr0o1+JBZ5xuS0aEYwNUaRqVuv6c+Y=; b=jNa/4GrIRwIOpfdgDGjnkEsIb4ybGmiYoFPX4lEMri+YNQ5loNUbCHafYwqWLBGnI5 z6l5TRejNp3a597SflGTM/9Ub80emsIiCJp0G6zXprRYB91BjR2jotIvXMHge9zwAcuF BjXg8UpPEf4QXk7urWTxguBwEHl5J8rOPFs4yETduiHFxwiyv3B9pKp0vl080aip4Pth zFSxI54D9LUU9YUEoU7+bEu1FEy3T4QuEftAp4M9JahKV4yOwWaWALkMOMv27tF3ebR/ yhZrdU1ViueRsAm+mBXTTd11fELlrnJSvBDEAHlZmsgMJ/CANw6DUsOfVs6j5v2LWIkd lQaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="p90Z/PKg"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id k11si1631274ybt.665.2022.01.22.10.46.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:46:03 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="p90Z/PKg"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:42286 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLOk-0004iE-Uj for patch@linaro.org; Sat, 22 Jan 2022 13:46:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34698) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL57-0005qW-4m for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:46 -0500 Received: from [2a00:1450:4864:20::431] (port=36822 helo=mail-wr1-x431.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007g0-PM for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:37 -0500 Received: by mail-wr1-x431.google.com with SMTP id u15so5890035wrt.3 for ; Sat, 22 Jan 2022 10:24:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SCrj7rNy2XEjALr0o1+JBZ5xuS0aEYwNUaRqVuv6c+Y=; b=p90Z/PKgAG2Ho6gU2HaBmCXKaLi2mbclp3rXSdOtHjljyoODr7eJGSLqMZmab3pYGQ Oy1SC9AYR/GBiNucTdm0/QVW4DJWM5ufT3Zy8BPw1f4/XkTkq6otLx9P47ftLg3SlC8Y 4mJSOdoxB/ayWpSABFPRsIhtBM5zqKvuF+g+vZVTE8OYvDUk8Ka3SQZAfAfXcUy73PoL +E92GJn6kBTcHzBwHnzb1S8mvUx+MvwQ+bU1YMPkkd+utTBWeKBTZscFkZG22kL8e+Ad 88wbcfEOiG/HyphbTlLZEYwZJi07W+BAPGMxErD8X6yBgz0AeiAtszXls3wTRHYuJ5rr 0p4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SCrj7rNy2XEjALr0o1+JBZ5xuS0aEYwNUaRqVuv6c+Y=; b=6CUnZNC39DEHL2YT2bRzqX2I/1EIP9xbbw7GaXyzn0EpqXXJDAahXjx/JufU/pEM+p 9UZ9khG5U0BMKgdQLc5P6OTXADRmcUWcyhe6SoAUwzkGpcPNt1OzGkQ3JQTynxKxZsIW Ew4YHc+8n/bFrR1k6IXz0XoDke6pcGNtHTVm70Y2A1+ZjFUO5iR5JMLmHvlKG9IzYUvX MqIj05szenpaEDp+N1BnUjG3rFWXrmtu/FfgKkNF7L8EIeNw6CxBwL10PlQN+NNYphY+ zG4OCS91PDw+J7t9QdLlcNG7NsMOEe+Z32Pymc5o/WnJd4C29nAPmH2th856vLE9sW7N QEPQ== X-Gm-Message-State: AOAM530RBmf787R0X51Fd8e1ZbmTjq18R6WslvhSpgV7AMqbTUs3neVk VQsg5JNufPH1OdkLMv7Dt947WQ== X-Received: by 2002:a5d:52c4:: with SMTP id r4mr8613731wrv.521.1642875886981; Sat, 22 Jan 2022 10:24:46 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:46 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 01/14] target/arm: Log CPU index in 'Taking exception' log Date: Sat, 22 Jan 2022 18:24:31 +0000 Message-Id: <20220122182444.724087-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::431 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In an SMP system it can be unclear which CPU is taking an exception; add the CPU index (which is the same value used in the TCG 'Trace %d:' logging) to the "Taking exception" log line to clarify it. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson --- target/arm/internals.h | 2 +- target/arm/helper.c | 9 ++++++--- target/arm/m_helper.c | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 89f7610ebc5..3f05748ea47 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1130,7 +1130,7 @@ bool get_phys_addr(CPUARMState *env, target_ulong address, ARMMMUFaultInfo *fi, ARMCacheAttrs *cacheattrs) __attribute__((nonnull)); -void arm_log_exception(int idx); +void arm_log_exception(CPUState *cs); #endif /* !CONFIG_USER_ONLY */ diff --git a/target/arm/helper.c b/target/arm/helper.c index cfca0f5ba6d..4df12394021 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9317,8 +9317,10 @@ uint32_t arm_phys_excp_target_el(CPUState *cs, uint32_t excp_idx, return target_el; } -void arm_log_exception(int idx) +void arm_log_exception(CPUState *cs) { + int idx = cs->exception_index; + if (qemu_loglevel_mask(CPU_LOG_INT)) { const char *exc = NULL; static const char * const excnames[] = { @@ -9352,7 +9354,8 @@ void arm_log_exception(int idx) if (!exc) { exc = "unknown"; } - qemu_log_mask(CPU_LOG_INT, "Taking exception %d [%s]\n", idx, exc); + qemu_log_mask(CPU_LOG_INT, "Taking exception %d [%s] on CPU %d\n", + idx, exc, cs->cpu_index); } } @@ -10185,7 +10188,7 @@ void arm_cpu_do_interrupt(CPUState *cs) assert(!arm_feature(env, ARM_FEATURE_M)); - arm_log_exception(cs->exception_index); + arm_log_exception(cs); qemu_log_mask(CPU_LOG_INT, "...from EL%d to EL%d\n", arm_current_el(env), new_el); if (qemu_loglevel_mask(CPU_LOG_INT) diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c index 2c9922dc292..b11e927df1d 100644 --- a/target/arm/m_helper.c +++ b/target/arm/m_helper.c @@ -2206,7 +2206,7 @@ void arm_v7m_cpu_do_interrupt(CPUState *cs) uint32_t lr; bool ignore_stackfaults; - arm_log_exception(cs->exception_index); + arm_log_exception(cs); /* * For exceptions we just mark as pending on the NVIC, and let that From patchwork Sat Jan 22 18:24:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534107 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1671638imr; Sat, 22 Jan 2022 10:28:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJwaN4NcGsiSpF9g7wRqPgfoHrCebCDbv16RWB1b7D5je9q9ur1RtIAmaC+LhW7LJOdBFN3l X-Received: by 2002:a5b:20c:: with SMTP id z12mr13072153ybl.64.1642876124948; Sat, 22 Jan 2022 10:28:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876124; cv=none; d=google.com; s=arc-20160816; b=gc8CsHuhMjsnHovlMd9ToFaHl+BP7eQMN4Wzhm0AoT+yEoJ7oKfCVYtLu9YH4BZTUY MIUPSc7ay7XkkA7xG+owsMARPLSsy8W5vbSppjbimSjr+pCzKn97frl+536YwcT90/2Y k5QIRRCZXyNEOqH5liAGbIODnT2W72C+OFNv/VQrgAtviUmIz8MDa7hiIJCl4hLpGo8X yYhNgKUsH7SwkHo6hwJZsDKbIvq6uqCv+b0/Ia8wXhGsOVpv6oh2rCdh9I2VEx46dsHz 4rQNQMwqZOKvrA6uEgRRJDa++O6yOS9Onykzaze07AZb0JaAxgaPYr+yZpk/Y9DnNmPT 1sPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=Zh5iADESENSAPofEn1J+i6o1QEpzQBPyUBojzWQHFvY=; b=sIVgNZjV+es7a/mE+cEXcTN1u36wgiG4mxzWAOgPyokZF8swn9xJGiAvYrcM7xMvXQ C12TL06UzoPpI0x07doiS/pYpQbB0wR0VcWB6CmbsmjYFPcWHPMM0JeBk9T0uv8WZX7X wL9XQr/QwJFEEsio5AFmvesnPe9ttqgn2e3jll5A5TZmrYSKqv4Tch/LcKIckmtFJvC2 BddFDslvypi/TbOkO65E4Ga0lUkf6VmmUZZ7bYe1sNXh4dKiIj9fNvHv4HLpQcWJhTa2 vdlMK/f44b2rIGa4LvyCg970Qg+ezd3FZ8IG+I9y65T82BBbfReFZxBlgYbb73u0QuPy YtmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BNFyUlsd; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id m62si9290685ybb.468.2022.01.22.10.28.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:28:44 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BNFyUlsd; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:49056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBL80-0006a3-5E for patch@linaro.org; Sat, 22 Jan 2022 13:28:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34222) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0005ht-Ph for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:16 -0500 Received: from [2a00:1450:4864:20::433] (port=41670 helo=mail-wr1-x433.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4N-0007gA-Hy for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:02 -0500 Received: by mail-wr1-x433.google.com with SMTP id v6so5901226wra.8 for ; Sat, 22 Jan 2022 10:24:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Zh5iADESENSAPofEn1J+i6o1QEpzQBPyUBojzWQHFvY=; b=BNFyUlsdZtICX3qNu/OFMR4H3TWGMjxBYjymkrm+M01/5kL5XdbSRJWn3k0mnmKZNP oswBqIBc7l7kyjoZEtBq+hIuoYhC5rjSCMWcZ1nMKLpFpnL5cbKz32NW8sxoWjg8DGZI zwiuENM5JRzp2h1xmQAIf4il7n6wmeiGEWQj5KLdeAy5AUpFcz/nCpbtp2M6mPRqoBdO qPvhtx0QakcWYrI8DLtjq0U0v6DLhSytfJ+rZFGMpaPlPNc6XuAMYloppDOK39pw5K39 geswZUZmypqiUOW+Twn8zJ1+KgK72ishXAeolOAvgyK30YY3764fLw2GCg7s8UG5xmp1 4Lqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Zh5iADESENSAPofEn1J+i6o1QEpzQBPyUBojzWQHFvY=; b=GsUf/UQWqn4NGtbr+ZKuhAREyfs3Cka5RbJyvbxrc0ed9a/20+Rp/nVL82kAUQfeD9 3oUOMyUkqNXt13NOZn9mjjPHqZtTth4ucI6dhmHjcAR5UDpPGxfmxvikgPOzBsCh2o3y auaMyZujmL9HcJnGHDnVZnBlOX7ZrXCn5vqPEbRprmEQoyriCxEIQNurO98jQEjJQagw /oaiBFU7KkFGzufNsiziKCCNRMHFeXZ3xW6WQnWdN4eam8AftsUMivrBrJziOK9U0Y8l nzhFyj9fJPcTXCH7z7OzniDjQo08T0I6/+i7HJAjbEFgJa/jRIM2bTpr2nOXIj6geR5C le6w== X-Gm-Message-State: AOAM531fFUE9+7U47rcuXazQ9vhfSxd8rbBwuqv0M89TPxvzenzg4YHU ZXpV+igy+ubhk7frl4ie6Z0YHQ== X-Received: by 2002:adf:fa8d:: with SMTP id h13mr8309558wrr.154.1642875887701; Sat, 22 Jan 2022 10:24:47 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:47 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 02/14] hw/intc/arm_gicv3_its: Add tracepoints Date: Sat, 22 Jan 2022 18:24:32 +0000 Message-Id: <20220122182444.724087-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::433 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The ITS currently has no tracepoints; add a minimal set that allows basic monitoring of guest register accesses and reading of commands from the command queue. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_its.c | 11 +++++++++++ hw/intc/trace-events | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index b2f6a8c7f00..6d2549e64b1 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -13,6 +13,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" +#include "trace.h" #include "hw/qdev-properties.h" #include "hw/intc/arm_gicv3_its_common.h" #include "gicv3_internal.h" @@ -634,6 +635,8 @@ static void process_cmdq(GICv3ITSState *s) cmd = (data & CMD_MASK); + trace_gicv3_its_process_command(rd_offset, cmd); + switch (cmd) { case GITS_CMD_INT: result = process_its_cmd(s, data, cq_offset, INTERRUPT); @@ -818,6 +821,8 @@ static MemTxResult gicv3_its_translation_write(void *opaque, hwaddr offset, bool result = true; uint32_t devid = 0; + trace_gicv3_its_translation_write(offset, data, size, attrs.requester_id); + switch (offset) { case GITS_TRANSLATER: if (s->ctlr & R_GITS_CTLR_ENABLED_MASK) { @@ -1107,6 +1112,7 @@ static MemTxResult gicv3_its_read(void *opaque, hwaddr offset, uint64_t *data, qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid guest read at offset " TARGET_FMT_plx "size %u\n", __func__, offset, size); + trace_gicv3_its_badread(offset, size); /* * The spec requires that reserved registers are RAZ/WI; * so use false returns from leaf functions as a way to @@ -1114,6 +1120,8 @@ static MemTxResult gicv3_its_read(void *opaque, hwaddr offset, uint64_t *data, * the caller, or we'll cause a spurious guest data abort. */ *data = 0; + } else { + trace_gicv3_its_read(offset, *data, size); } return MEMTX_OK; } @@ -1140,12 +1148,15 @@ static MemTxResult gicv3_its_write(void *opaque, hwaddr offset, uint64_t data, qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid guest write at offset " TARGET_FMT_plx "size %u\n", __func__, offset, size); + trace_gicv3_its_badwrite(offset, data, size); /* * The spec requires that reserved registers are RAZ/WI; * so use false returns from leaf functions as a way to * trigger the guest-error logging but don't return it to * the caller, or we'll cause a spurious guest data abort. */ + } else { + trace_gicv3_its_write(offset, data, size); } return MEMTX_OK; } diff --git a/hw/intc/trace-events b/hw/intc/trace-events index 9aba7e3a7a4..b28cda4e08e 100644 --- a/hw/intc/trace-events +++ b/hw/intc/trace-events @@ -169,6 +169,14 @@ gicv3_redist_badwrite(uint32_t cpu, uint64_t offset, uint64_t data, unsigned siz gicv3_redist_set_irq(uint32_t cpu, int irq, int level) "GICv3 redistributor 0x%x interrupt %d level changed to %d" gicv3_redist_send_sgi(uint32_t cpu, int irq) "GICv3 redistributor 0x%x pending SGI %d" +# arm_gicv3_its.c +gicv3_its_read(uint64_t offset, uint64_t data, unsigned size) "GICv3 ITS read: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" +gicv3_its_badread(uint64_t offset, unsigned size) "GICv3 ITS read: offset 0x%" PRIx64 " size %u: error" +gicv3_its_write(uint64_t offset, uint64_t data, unsigned size) "GICv3 ITS write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" +gicv3_its_badwrite(uint64_t offset, uint64_t data, unsigned size) "GICv3 ITS write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u: error" +gicv3_its_translation_write(uint64_t offset, uint64_t data, unsigned size, uint32_t requester_id) "GICv3 ITS TRANSLATER write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u requester_id 0x%x" +gicv3_its_process_command(uint32_t rd_offset, uint8_t cmd) "GICv3 ITS: processing command at offset 0x%x: 0x%x" + # armv7m_nvic.c nvic_recompute_state(int vectpending, int vectpending_prio, int exception_prio) "NVIC state recomputed: vectpending %d vectpending_prio %d exception_prio %d" nvic_recompute_state_secure(int vectpending, bool vectpending_is_s_banked, int vectpending_prio, int exception_prio) "NVIC state recomputed: vectpending %d is_s_banked %d vectpending_prio %d exception_prio %d" From patchwork Sat Jan 22 18:24:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534105 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1671538imr; Sat, 22 Jan 2022 10:28:30 -0800 (PST) X-Google-Smtp-Source: ABdhPJzBtte/JSI4/WC2RGmUX9keezmys3z+kuo8wfRE+PmbcGmQdQAcEPb2ruv4hZfm6/dkPqIN X-Received: by 2002:a25:314:: with SMTP id 20mr12829072ybd.592.1642876110731; Sat, 22 Jan 2022 10:28:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876110; cv=none; d=google.com; s=arc-20160816; b=untGtBVBf5H8V4TlnNtR4NAGEdauA8kFSB5/X/0PyNu7rQzmgmxv2u+69f3Tz/+q2N OC7PI/VwKjdoTHxDuvrDMCCDpH5qAz4eHYlIg6asZOA6vusEnjyxKLK77/8xk2EMlaOF NaFS7HhHy7yZ5RXV70pApK1LbT7slEhmmLo4dbMasHTivqlgA7GJwnW55BZ0Dq5LA1wH bhEeOMw8OLyWmjrh+vmwnKulKxIKmDCk4du3ZZMYryEcsk6iQ7PDUQJ1XubunHDRCimq RNtYVFyM+GLZDyTSNfhIY/Vn+m9rgh8ha9/PqSKH7OJT4131t8Ky84+xoNWPl2Csj3/6 jlFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=B8JHQV9Rxu6y5Kq3DIwbkwHmKbpxctF1sxkGjMJbHmw=; b=0jeGVKUXVW2db/+R6P9oOcWtf21ppRytGR3re0sMppo3+38Ft3wDPgTIpWR57MUNj3 RK6JdvsPjHRg7xUNsH0Wx9AqQuLM64a35lG8eQmo+oJVyekkywBJk+9nudByAAjr8dQd 0E8Uz/yJiKSJcRNL4IcQaFQS3pyEmU+fLhjV2FtRbmMRpRotlFBEaLt0y0lPEWHEdVH1 m/RFPs/xSseACt9ukTsbJyp4oAGngYN1UOxE7Po5sXfrVmIHznPtrDXcoKk9Dr+2QZ3R Q0P4xAt9YJ42kLtJtZcAkCgeL99YdUCVX/5eg/R6b7YAJvC72BZyOTzSrVWFV0pVjSII sxgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ePem3qcN; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id v14si9542109ybv.205.2022.01.22.10.28.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:28:30 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ePem3qcN; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBL7m-0005jv-8L for patch@linaro.org; Sat, 22 Jan 2022 13:28:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0005hr-NT for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:14 -0500 Received: from [2a00:1450:4864:20::32e] (port=56251 helo=mail-wm1-x32e.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4N-0007gL-Hb for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:02 -0500 Received: by mail-wm1-x32e.google.com with SMTP id c66so20199246wma.5 for ; Sat, 22 Jan 2022 10:24:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=B8JHQV9Rxu6y5Kq3DIwbkwHmKbpxctF1sxkGjMJbHmw=; b=ePem3qcNADxccA6TrK7qqEZNXQY/UIXXaSvT+S11T+ltaOwP0uSn3P48ciswyTWDhk EjhQIByp5abFpx4f1JzJZaXCm3MTxChQOlbeGSOhmhzi+b/qakdrs93RbnOh4az5YRR5 IeKuFqsd+3jd/FYTy8rODnczwGvHG0dW8iGnE6pg3t7yH+YFQ+fkbXB9zT9e6qu/Ybv7 UVwVucPlBKYMQE7HLkB6V13NO9ZdtgREes7wZcTl12LZeONmM0zJqtOrezLgEM46AuGR VRF9l4dx0g3fEsdYrLJJs7nGI6h1CT/Vi0ZMFork0Jkn/zCGPsTUuPlIomSmstyHPx65 1GAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=B8JHQV9Rxu6y5Kq3DIwbkwHmKbpxctF1sxkGjMJbHmw=; b=zSoz2NWFmtYB+B7XB9p/vOg/5OL0u0tIJEV2JdyFmQprRAlwtpRGeoVq4gWU99CYxW SUT/R/DkqQKoYjMQo0pVnUdVOJIo8N3iygIkT4vUP2508HgJExz3qam10UzBR/YNSQ0D FyMWn8S1OGiSXLu7QJF+mgEBMJBd1pG3B3+/osrFMZiej8Uk5KxngF1s+WTQHQboM+Gj g0yIYe7p40CGeWMytiXW9BoB7tYclk4TGDTvi/i18i0VOlDnko0bnFtyOMoeD16WvwgT FA2i8sVnqWkoB9Jed4TWgH68KWAUY2QLeDHqH7d5XLWxy1YmzvBeQkYIJ97aYxGfyLe0 CLCw== X-Gm-Message-State: AOAM532jCFCudv++xFaQiwdsv4i4gVqf62clfPsYGKlbqJbvCeC9m3Xq 1SqVGkp5L1eVb9jsLof39vJ6sg== X-Received: by 2002:a05:600c:4e05:: with SMTP id b5mr5355919wmq.51.1642875888339; Sat, 22 Jan 2022 10:24:48 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:48 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 03/14] hw/intc/arm_gicv3: Initialise dma_as in GIC, not ITS Date: Sat, 22 Jan 2022 18:24:33 +0000 Message-Id: <20220122182444.724087-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::32e (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In our implementation, all ITSes connected to a GIC share a single AddressSpace, which we keep in the GICv3State::dma_as field and initialized based on the GIC's 'sysmem' property. The right place to set it up by calling address_space_init() is therefore in the GIC's realize method, not the ITS's realize. This fixes a theoretical bug where QEMU hangs on startup if the board model creates two ITSes connected to the same GIC -- we would call address_space_init() twice on the same AddressSpace*, which creates an infinite loop in the QTAILQ that softmmu/memory.c uses to store its list of AddressSpaces and causes any subsequent attempt to iterate through that list to loop forever. There aren't any board models like that in the tree at the moment, though. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_common.c | 5 +++++ hw/intc/arm_gicv3_its.c | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9884d2e39b9..579aa0cb9ed 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -357,6 +357,11 @@ static void arm_gicv3_common_realize(DeviceState *dev, Error **errp) return; } + if (s->lpi_enable) { + address_space_init(&s->dma_as, s->dma, + "gicv3-its-sysmem"); + } + s->cpu = g_new0(GICv3CPUState, s->num_cpu); for (i = 0; i < s->num_cpu; i++) { diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 6d2549e64b1..67f12d98af3 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -1194,9 +1194,6 @@ static void gicv3_arm_its_realize(DeviceState *dev, Error **errp) gicv3_its_init_mmio(s, &gicv3_its_control_ops, &gicv3_its_translation_ops); - address_space_init(&s->gicv3->dma_as, s->gicv3->dma, - "gicv3-its-sysmem"); - /* set the ITS default features supported */ s->typer = FIELD_DP64(s->typer, GITS_TYPER, PHYSICAL, 1); s->typer = FIELD_DP64(s->typer, GITS_TYPER, ITT_ENTRY_SIZE, From patchwork Sat Jan 22 18:24:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534117 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1685551imr; Sat, 22 Jan 2022 10:59:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJyLKk1PptgSnx59SwP7sjvwYeaHzP4pCV6BELzJOdCYvTCIwG4bekaiIpSpNoK9YOEAMqgn X-Received: by 2002:a25:e093:: with SMTP id x141mr14590518ybg.247.1642877939943; Sat, 22 Jan 2022 10:58:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642877939; cv=none; d=google.com; s=arc-20160816; b=L6WF55XsVMVL/tcdltULddNIpiy2bTgJptPMPwSljAm4d84OBOPf1k3E61wtnwUZyh oZ/w50h95Zj0bKCPwhkZfXDWr1mJsFlAs5q9uJGwAPJ7A3UZcGH4mdWBWsVsMHiNNfqH ur6/votomb1oxlSDLDcOIb1fpl1+0g4ediz5Vl8ec2Ls4g+l+vcjiQ6XaDkoagkntuPc QQkJb4KcIp/LycmhaB0+YK58GlqOjJ2Y+wt972RX37UPnQdoAhk7EUo440J5fAwNoM0C ZZs0S3QSweRjIaSjv6PDreWe8pj+XWtemA96gTSnSg+NlbZptUygWFpMe0HZGbOfjivp lnZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=NxBpkMVebkfvJDaKJYbHagp3Kx3QPxuJ4FSTved8Gug=; b=Omu61wtKwou5jkZtShRWC6VNAgxPTP9XtlXcYks5S2qw2YH81wmINxNMYoZ3G34/eg M3loXv1QT7JdnbRALo/cvQyVCnDir6k4hJkRmPGxmJOgSXZ+02MSn+R5auam2Ux+IRsK Focb7Y+uLHmxHv7j2vrWEfpAdzlC5GkApu2Y3HCmTFcSdh2j80DA9Mmt2BurZMoAPOGW R9/CpinBVCRsMyNPMxko0zuRuJjYEm1CRjbSmD5IwgpUbuHj3PGXv/819Qj5XuJ8bs8Z bn8eiqUEpAhjdawtWXblfZiAEQqQS9tIvGbwE1xEksTX/ZvcauFWHgRvarnCwX8N4L+G D/Fw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LO6JD28S; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 188si9379819ybe.387.2022.01.22.10.58.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:58:59 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LO6JD28S; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:56912 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLbH-0006eN-DD for patch@linaro.org; Sat, 22 Jan 2022 13:58:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4x-0005m3-Em for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:36 -0500 Received: from [2a00:1450:4864:20::42a] (port=39590 helo=mail-wr1-x42a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007gQ-L3 for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:35 -0500 Received: by mail-wr1-x42a.google.com with SMTP id az25so5905035wrb.6 for ; Sat, 22 Jan 2022 10:24:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NxBpkMVebkfvJDaKJYbHagp3Kx3QPxuJ4FSTved8Gug=; b=LO6JD28SSRveVnVEfo4UpGmhleAw9kCGUklXWSWAgFkqsu0jt/qlOZ5BCFCqF2CJHI I9UyZWvQzzmeGFQzLHYhourEfjI8Nc7Y4SoYJw5mhMQNkyY3WGvakRI6fQha0QFEbx/+ +8Hei9OocwARhVjS6T+pVXRPVwM2uk6ASPtPPH9jDMAE+d9AfSVc9BJHlulx/aU1XasW HGYbm3qJZyw/K0TSv+3LhNXTroukQuqWFTXwfxqh4cI3+zlxCp8dMd3qo/7Uhr3pZiR2 WK/ggKFxdbtLjgvgfEH+rHHs9UHE7QV06M46EwNE8Cj17HvJrKdQymFIV3UDfcom6Fbu nB5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NxBpkMVebkfvJDaKJYbHagp3Kx3QPxuJ4FSTved8Gug=; b=RpradmooCH4KpgEi92C49xbq10qJ4CpbY1s3mPnpkDKpiNdwAv5G7fNkS1xU50amiM cPg2gU7kz9bVH5Q/Sl0SU8zVUj6ZwJXDm1ztvM5rsYu8igPh/EpF2ViwvyEnRcGRqM7E QU7m38UH7m0wVWeG6sffjkJqkCWOIkiUm9lnzWMcLojWLIWsIU8hhgnKL/2EMnFDmhq2 4q00qbOZNIqBinJuovOpUxMzhVLrZUWOYnkYGkWC7gRLPdhD6F0T+JrsOKmxCCB7FetU WibGQM/p+Zd7EUJXFL2kV+ZsJT1WeeU+Pl6fDKJ+xdxmFbItbtNz6Hq6SaqwwMOOfffs Qn4w== X-Gm-Message-State: AOAM530HEdxzMpSjp9LUDRjFu/VcD2qLyOORB2hNPe1jAVn3yfad4Oyw ihLRzcdmYHWbCp9c0pCZ+BvfNw== X-Received: by 2002:a05:6000:1a8c:: with SMTP id f12mr8408980wry.352.1642875889199; Sat, 22 Jan 2022 10:24:49 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:48 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 04/14] hw/intc/arm_gicv3_its: Don't clear GITS_CREADR when GITS_CTLR.ENABLED is set Date: Sat, 22 Jan 2022 18:24:34 +0000 Message-Id: <20220122182444.724087-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::42a (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42a.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The current ITS code clears GITS_CREADR when GITS_CTLR.ENABLED is set. This is not correct -- guest code can validly clear ENABLED and then set it again and expect the ITS to continue processing where it left off. Remove the erroneous assignment. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_its.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 67f12d98af3..1763ba4a671 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -853,7 +853,6 @@ static bool its_writel(GICv3ITSState *s, hwaddr offset, s->ctlr |= R_GITS_CTLR_ENABLED_MASK; extract_table_params(s); extract_cmdq_params(s); - s->creadr = 0; process_cmdq(s); } else { s->ctlr &= ~R_GITS_CTLR_ENABLED_MASK; From patchwork Sat Jan 22 18:24:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534113 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1679294imr; Sat, 22 Jan 2022 10:43:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJxcQwMTIbzCFy+nVg/xXsDL96Ga1dLwn1jtD65/0w5sldruBCEpq/RTZ3njqYzk/XuYUcY5 X-Received: by 2002:a25:3105:: with SMTP id x5mr15720971ybx.611.1642876997779; Sat, 22 Jan 2022 10:43:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876997; cv=none; d=google.com; s=arc-20160816; b=qYicROOrd9Ye1jBs2YrjiCs6t59U9lZkRHA+PEXehj4Q56HqUmvMWNDcu7IWfDBupS vutHjz4u6RKU75JpvxLpfSEKteEpM/DerxUIaX+7itUJfmYRHnZjZ55QHtSHga1UoqyI XGb9LTNcrcEBalugbFPcNO77QgGPtAutw2vw0glSFSfMKoXLYR29ZQqbunP3D6Fidv1t ewEihtQfIJ7PX9+JuwBTeGePpyZ87oyQtT2EzBBwwuSNP755lRC7+ENoo7/K8C3vHek7 nxZOp9y7GzhqtnRu48UHnajwQP+G9TSDYcqei0kZCoihjB1OzGvmq2ZqslGIAI6hDaiT rgCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=TWOwtfSkXv+Z1HhHrk1F8pisir4TdF801Jm4JXQ/boc=; b=Gj7b2rr3ofDcsmd4gR5LYd/JzMomdZZns9cH6IrGm5k2O8bUEGspHub5Toi++aYvqP jW8vIazRbJZSjetNwVlvVsONvhXYTeKj9otAUsiNgf1pqHvB52u7R1WGC525kfYTPSR+ Z2mtp1Qkk2plrUwN2MwsnLWOoXpkcZ8a6Rz3sZAKWjSiZxwynItymRWri/jUktId3UpD EylXxm0SbJcWbP+jI5w7CCQPTgt5NWb1F5+PXUQ0S/i/z9P+Zsx+jiqqIDb/pe1gLd+E K4mb0AwMxYCxn2DztC1pGviFhGGa156qByUXQ9KL4PSvpFq1esL/D4IsF+ZybZiVCVM4 UYHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cRHKJGXD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id o2si4712231ybu.785.2022.01.22.10.43.17 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:43:17 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cRHKJGXD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:40006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLM5-0002z5-AK for patch@linaro.org; Sat, 22 Jan 2022 13:43:17 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34226) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0005hv-Mb for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:14 -0500 Received: from [2a00:1450:4864:20::329] (port=54152 helo=mail-wm1-x329.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4N-0007gX-I0 for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:02 -0500 Received: by mail-wm1-x329.google.com with SMTP id n8so20194417wmk.3 for ; Sat, 22 Jan 2022 10:24:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TWOwtfSkXv+Z1HhHrk1F8pisir4TdF801Jm4JXQ/boc=; b=cRHKJGXD4fHJzlCpIfCtSr96Me07yuTweLrRuVelmSCXVT8bHgR5tkGHmjUPyXV2Eu uFFfUC8T7z21/56+NKW/MSno1/Qq/IXpw+Q/QKdhuhN6zs0Hs+a3sA3NsRMPo7Cpt8qN LnyNPjWOKG0xLW524dRfFimLOms1FzHJjWfYqdqk9BadRgTw8pFNmG+iTrbw9k6n6jbV FmW4h5Us6l5tCr2zlkduLrZSrytGdhN7loh7+VDwcO1i5Kp/PO5M0udoDbnqpXa17ilc PHb8JYOHDP54tGB96p5uosrk1fMbdQL8MrfWLSaZxnpYr/IRqiq6UsDANzTOXMyt9lMk FACw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TWOwtfSkXv+Z1HhHrk1F8pisir4TdF801Jm4JXQ/boc=; b=T2RXvUsLq6lvYeYiRRJSmZyzMu5CLsEf3JXXdDWBWDnXibUa3e1M45NKbDM+gBj8ud 85LMEUkwO3j83rDWEY4F2wdaIuClAPVdvyG5wsnBShqYBvANpAJDiILGYbSK8Kj9i9Fa /bdta95F2G1lVNXwnGedQbNTbhbWGOPx8KcV2Y2JdSCjqBL8yGnkIXHvTxHduQUwogJc 506FsRpawk1A4Y4gMUgu9AivEIEpaKAdNnQ7icd/NAzEsE3F0oSYmzIZm0jxo4kf0KbR HQrLnL/2bv6TzchETp/pSaFTKOfZm6BIJjGYZHFFXXKHEyp9vwQUYAukzP7dY/rjT9UZ GBEg== X-Gm-Message-State: AOAM532ls7EQoF+dhHSm/w38HVqbfa4GPPC+xOZGZ5ElgGnzW8c6nSjW D/UdQ8UMaOpBYSgAVbY/JtKXJA== X-Received: by 2002:a05:600c:1e2a:: with SMTP id ay42mr2469743wmb.131.1642875889860; Sat, 22 Jan 2022 10:24:49 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:49 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 05/14] hw/intc/arm_gicv3_its: Don't clear GITS_CWRITER on writes to GITS_CBASER Date: Sat, 22 Jan 2022 18:24:35 +0000 Message-Id: <20220122182444.724087-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::329 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The ITS specification says that when the guest writes to GITS_CBASER this causes GITS_CREADR to be cleared. However it does not have an equivalent clause for GITS_CWRITER. (This is because GITS_CREADR is read-only, but GITS_CWRITER is writable and the guest can initialize it.) Remove the code that clears GITS_CWRITER on GITS_CBASER writes. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_its.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 1763ba4a671..d9ff7b88492 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -866,7 +866,6 @@ static bool its_writel(GICv3ITSState *s, hwaddr offset, if (!(s->ctlr & R_GITS_CTLR_ENABLED_MASK)) { s->cbaser = deposit64(s->cbaser, 0, 32, value); s->creadr = 0; - s->cwriter = s->creadr; } break; case GITS_CBASER + 4: @@ -877,7 +876,6 @@ static bool its_writel(GICv3ITSState *s, hwaddr offset, if (!(s->ctlr & R_GITS_CTLR_ENABLED_MASK)) { s->cbaser = deposit64(s->cbaser, 32, 32, value); s->creadr = 0; - s->cwriter = s->creadr; } break; case GITS_CWRITER: @@ -1027,7 +1025,6 @@ static bool its_writell(GICv3ITSState *s, hwaddr offset, if (!(s->ctlr & R_GITS_CTLR_ENABLED_MASK)) { s->cbaser = value; s->creadr = 0; - s->cwriter = s->creadr; } break; case GITS_CWRITER: From patchwork Sat Jan 22 18:24:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534118 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1687798imr; Sat, 22 Jan 2022 11:02:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJz0PwNWEZK2TJUpvdOHPVwJGNvM3eRUDznxgIAJ0RbDmG2Sj/AK+/iLI1e+fJpxOlJ45U1O X-Received: by 2002:a6b:f404:: with SMTP id i4mr4644785iog.45.1642878163454; Sat, 22 Jan 2022 11:02:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642878163; cv=none; d=google.com; s=arc-20160816; b=mktZpHWNQ5gUdr2TPqfAkCQcf2aQoXyvAgJo9KPjoHpkjU4ssZDDbdO33GFPerlGhp 3qBk8ZUTWdhgEyHHXNkl/9nlqUUm4QPRatadCZyYcTxL9lp4Q+P8jAomzfbUB5lSW2BD aTwWsjSMnAJUMt7E3SkDhKNYq67T4F2yTKEJ97rb00kig1OzXR2JTkGGmMk4x0t+kKhz g4v6RZGQlZOuEXUCMI0QgAhuycbTeNmIEpT7bRtUqdg2gsrgll/FuNgmJg4lEKSrZzSA OxVmVjlKVKXO3zjYEYZgNev/5zn5wCXQmdlKLAYw4Pq7iZ357fUkS0vzb6aFE7vxUgNH MW8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=21JlFmTfghwTaDwa5naHNdk9BldcI4QKiETubeObcCA=; b=M4Sjc4k+WTIwp7ntAWHriEQPX56wUtZXe/7TuYogFNrZFu06xIjvOQRPoNPyLjdx/t 7xR/j00K+fFD4Tmf4xg4lHrjX5GpH1vcL3258hDNU3SskPp3MRxrrWrdrIftBz2krGAH q3XAXQYxjdjCpkwUshuwLUxwPHSuddOglboXaWZ0G07x//1nToJ8pE7rkU0+8H8TmHxa Yyuh3FyFlbAWiTGRjpG5drZO3cvJCc0vlv6nCpXu1yDxpiEU6mig77mWzSFBJQqVOmEK oUGrAekRY6oy9h3O3ASPHZyMotpkWP/nfyPgRkAfdB69mTKqLWZYQgxY9O2qxD/p5bL7 01+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RjIERdbB; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id z6si710023ioc.39.2022.01.22.11.02.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 11:02:43 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RjIERdbB; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:60626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLes-0000gW-Tk for patch@linaro.org; Sat, 22 Jan 2022 14:02:42 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4z-0005n8-AI for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:37 -0500 Received: from [2a00:1450:4864:20::42a] (port=35714 helo=mail-wr1-x42a.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007gj-Nx for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:35 -0500 Received: by mail-wr1-x42a.google.com with SMTP id r14so5908819wrp.2 for ; Sat, 22 Jan 2022 10:24:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=21JlFmTfghwTaDwa5naHNdk9BldcI4QKiETubeObcCA=; b=RjIERdbBOmYJ+5UjdZoszVefR4dYrTxt9tsJc+4N1sANqWijAhWCBlzkbYY4W/t9K+ x1C9sZeomMXEgkwjxL8EPquh2gHXCLaARh49vR6FH67L9swhBPGmzR7esTduSpSQtQZm fDvYpeYGPHh46l5hqHhvJXRVUU7EtzPQICOGbUINaMEl2osggsVTPy6Ffsfj0vWm1Xz9 IgiDKrmHoF3TlbvKmHyr0rk/VvTBd7CVHDSaYQAZeCwaIx8IrW4dEHOxat2bCLLSxdsZ ueVFveNAlD86jVsiYAygWjRMMqLJqCNZIF3Lf3Q+LPAxyo5B5VPPaC/gLbCD8AvLJt/9 Ixow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=21JlFmTfghwTaDwa5naHNdk9BldcI4QKiETubeObcCA=; b=h2nhf52w7vUNgy+X+R1rOPoTtUPxY81alNb9k3+Eu6z2JdMdAlenXJOjtqOUJ63Fjp oswMIbXok/t5nZ7DdfQtAoJr9InW1JWmxBwsOF3CLgYhwUwKsLJu8+2U/qc4TstBHzbG 4XDTpzZOB3OU6V9u/WC09hZpJiaixAVxgdGzbcgAE423+YIjDaxvMvXIHuFIKuJfN6m/ KsYE0EegQ+Hc9qc8IpAsavPaXfmSN0Z+ou+kLW5N7AGGSHd+KiIPrmYxRpcbci+RTA8/ KgOPrro0wDtC1IHwH+GTyeT9WdtiEJTwHVXAcq8j27oEBaTEPTp45xsTRSmQjH/nrZgR 7KyQ== X-Gm-Message-State: AOAM5309E/+UfhcqtUbHeZO9e1iPAd+Z4qff5GFBcqtEiBIE7sOUaJAo C/QGQxWQv673Kab0/iCLZ3u8gQ== X-Received: by 2002:adf:c843:: with SMTP id e3mr8587182wrh.38.1642875890510; Sat, 22 Jan 2022 10:24:50 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:50 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 06/14] hw/intc/arm_gicv3: Honour GICD_CTLR.EnableGrp1NS for LPIs Date: Sat, 22 Jan 2022 18:24:36 +0000 Message-Id: <20220122182444.724087-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::42a (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42a.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The GICD_CTLR distributor register has enable bits which control whether the different interrupt groups (Group 0, Non-secure Group 1 and Secure Group 1) are forwarded to the CPU. We get this right for traditional interrupts, but forgot to account for it when adding LPIs. LPIs are always Group 1 NS and if the EnableGrp1NS bit is not set we must not forward them to the CPU. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/intc/arm_gicv3.c b/hw/intc/arm_gicv3.c index 715df5421dd..6d3c8ee231c 100644 --- a/hw/intc/arm_gicv3.c +++ b/hw/intc/arm_gicv3.c @@ -166,6 +166,7 @@ static void gicv3_redist_update_noirqset(GICv3CPUState *cs) } if ((cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) && cs->gic->lpi_enable && + (cs->gic->gicd_ctlr & GICD_CTLR_EN_GRP1NS) && (cs->hpplpi.prio != 0xff)) { if (irqbetter(cs, cs->hpplpi.irq, cs->hpplpi.prio)) { cs->hppi.irq = cs->hpplpi.irq; From patchwork Sat Jan 22 18:24:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534111 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1675760imr; Sat, 22 Jan 2022 10:36:12 -0800 (PST) X-Google-Smtp-Source: ABdhPJzGuUkLGBQEVvfG44g5kvIAvwDDnh3fyyrCUYDZXn+/eP52CVsOtesbZaPngzXaMX1W3vso X-Received: by 2002:a25:8a08:: with SMTP id g8mr13351157ybl.739.1642876572387; Sat, 22 Jan 2022 10:36:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876572; cv=none; d=google.com; s=arc-20160816; b=dKET1OWXJummtG6W6DsbRSzY4hprCl+98gwxMxtz+PLHTSlWP/zb32YI/waHKyWJUQ JVGXsVBvuY2P5ieI3ZHaMXKbaJD7rqRFM9KRZjfiOepwmCkASHgMNv4I6ker5IFD02aB 6txHUimNEaYGqD8SKLHzO6JDuhvkIS/NWMJENZFyp52DplhH7cgeKTqU9fATKPJ4r5Ws wK6sUPG3Ckh+fXIOwYUIs0VN1uGySxkXuB2J9Jdl0khWFhpMd6A2Q9wXa4MnHW8GqUjI rmBN5LeoIvlgKUPr0/IXsqhR03vBZwTbaOV/8YSoRtb8wKGHJvysOY/xNLmkKXWsYkRQ Cc3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=tHMZxZiFQJbI+EMs2+qLPMDXg/8YQrzz1SenT8sExVE=; b=WA3cXPH7Oi0PQsRrJ9/MhKPx7tMyE5cB4Z3mcuvF9vbZTDEqmGZXsRbDg6j2gniW+m dAXsa4Frbr6s6kxCoRO3MS7vzH9aR/+t17vM0QK4y7S7o0aVv4pxHxsk4oLqkI30xYQn XDRokTaB3si94OJIv0c2r26cX6WTqyg7RlQRLJd8HMKyLza+iOS0KY1yOdrUU6Ovez04 Q2bvrq+vES3gpaVchyTcaN8XHqpI0ajUdH50ORUPaB7XDN9ERzJZkwSP2oJ3WovazZPA MxW6gKFKuYEXtQVt1YH96mjCV5lv4XE8j70QSsQy9NurqNmTy42Wu2Qy8UQ2VrcHbU3m CW3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xMa3V+Rm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id i64si9842960ybi.447.2022.01.22.10.36.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:36:12 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xMa3V+Rm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLFD-0006bV-Se for patch@linaro.org; Sat, 22 Jan 2022 13:36:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34584) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4x-0005m4-Fv for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:36 -0500 Received: from [2a00:1450:4864:20::429] (port=41661 helo=mail-wr1-x429.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007gt-LD for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:34 -0500 Received: by mail-wr1-x429.google.com with SMTP id v6so5901400wra.8 for ; Sat, 22 Jan 2022 10:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tHMZxZiFQJbI+EMs2+qLPMDXg/8YQrzz1SenT8sExVE=; b=xMa3V+Rmm47QybMRBrPrmrlxD2xIIicBVnqccGP5RwO1DZAizp/jDKC2KV2EClJDKl ZZpya2BAKYdVHJ67tj3TtGfHy2zusIS0IUeabrHwTMXLq4xABSqszuZYLEGf5WI6cpLm iANAw45AzUVhV5VyPe0SdhLUgrtyaMZdDLtSX9gJmP0Mrly5zp49yNNSFlpFTPgX6uXv ev04MYzUhXtppq4qh42G6Qcu4KpzzyuEMgFbhvZy5cOoOsZzx06aNckRK6xBgM9698g0 J0s8KQa5zX/czx8NLtX6S0IIaBvs1ihzyRHSFf/AFbg1/R1h6g47YU8e/TLkSQS2nO8e T2gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tHMZxZiFQJbI+EMs2+qLPMDXg/8YQrzz1SenT8sExVE=; b=sCshvyBrGLzf9rUug4QoS/YPMCq+TC1L+uRxCUiwAbuCtecKFe2rlXZOOakVg+GFwu beUd9H3X4m8t18/riAnp+tr5pVSNrX33tobELvwua1vwv2Iz4JxAg1RsZHGq+9lUWTGr WsaohmiYrvxS+kotXF58d4LdGiCOSawSP/j1uEtHNTNZCN/l+CLwvwbmD6DdS4j0UsEU 4VKVhf08NBXiJSP6hwoczXriQgXBCieZ78H786yQDQhypFOrtP0f0TO6nCYBHGBG8AvB hxUkKkeDsnBwWkGLqLK52CsLjXX2B4UjZUE4Imh3MW+ZToQ+om3HwkL2xruYkJeicOuv 9tAQ== X-Gm-Message-State: AOAM533577GGGRgYB2jw/UXl9tfRzfGZ09BzXPStq81Sh4CKEj6oCxxS 0s4SdsU3YJq2BNbUrP1iyFccRQ== X-Received: by 2002:a5d:5585:: with SMTP id i5mr8139341wrv.174.1642875891175; Sat, 22 Jan 2022 10:24:51 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:50 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 07/14] hw/intc/arm_gicv3_its: Sort ITS command list into numeric order Date: Sat, 22 Jan 2022 18:24:37 +0000 Message-Id: <20220122182444.724087-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::429 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The list of #defines for the ITS command packet numbers is neither in alphabetical nor numeric order. Sort it into numeric order. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson --- hw/intc/gicv3_internal.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index 1eeb99035da..5394266aaf4 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -314,16 +314,16 @@ FIELD(GITS_TYPER, CIL, 36, 1) #define CMD_MASK 0xff /* ITS Commands */ -#define GITS_CMD_CLEAR 0x04 -#define GITS_CMD_DISCARD 0x0F #define GITS_CMD_INT 0x03 -#define GITS_CMD_MAPC 0x09 +#define GITS_CMD_CLEAR 0x04 +#define GITS_CMD_SYNC 0x05 #define GITS_CMD_MAPD 0x08 -#define GITS_CMD_MAPI 0x0B +#define GITS_CMD_MAPC 0x09 #define GITS_CMD_MAPTI 0x0A +#define GITS_CMD_MAPI 0x0B #define GITS_CMD_INV 0x0C #define GITS_CMD_INVALL 0x0D -#define GITS_CMD_SYNC 0x05 +#define GITS_CMD_DISCARD 0x0F /* MAPC command fields */ #define ICID_LENGTH 16 From patchwork Sat Jan 22 18:24:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534116 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1684851imr; Sat, 22 Jan 2022 10:57:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJyC7GhM+3PZ7SmYwLQVrZ2EJwSw9FJc/v0FYW1nbavqupWnWvXwhSi2N2K8LFWjfaIC8MUn X-Received: by 2002:a25:dc82:: with SMTP id y124mr13196238ybe.299.1642877846740; Sat, 22 Jan 2022 10:57:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642877846; cv=none; d=google.com; s=arc-20160816; b=HlxtQ/grs7KnCYN2PtNLzT57NCWCk2FAKhK5ef5yyY3MGaynpCuC09IZpc1t3brrmo 4c8QZJA/b9q8sl3wjJPe8FP35ckYBcuydu1ZgkWEypeMD6gWs5hsBfvxXT/cA+FwtTJx 8Zm6V5XqKenndOsKc/qlMLlAQVurvkWrXVHHbMZqrfGGlSTdj6ofv/pk87AN1w8Wq75N 5Ma3bKY8tWQDfjWT7CuhF2dhlBNVbdy2cbtfjHS2ICvjQd0mmG54Ol8IccdQQ7dvBbkE YAzcnUhcdrdLznld5Nl4oFv+aK0YSA2EJPh4M1keXdFnkYq5kloySc7GPfwm/1TEtIh1 szzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=Lp1oJ9HFOvv8JUdUv/7QWvh4BnxCy5Ok7f/8j3T6Vxg=; b=uXNFflDuQP8vCWccXrbzgt1YT/QWwGuuzPJpZV05dpoBhMgXXCw+h3+R8P5T4oCF1Q iyEQxA5+cykeEQ76/itHqEZTZBhDdOBveMNhZoC5ep0tXhImbvWA/1kVQjOjViA7Ocbu STCkGH3dWHMZerwzuvu+zC+RRg2NF+cVt9STv1GjPqW3Fmw6TZ412wJ8Mhy7NwCa/CfM lqsawG4CgaVcJK2Az0IZMC1K/ydRmcLPKDP3oo7mOewq0X2NnIuyH3VvqtQAw5EK8AW0 R4lVbS2Mq6xFrVU2V7xfPVkntKTIn1SuGqqpOMYfAx23510/msLX/7q8zBPdqQGlVSN6 pvdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Eu37rzdV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id w7si4742018ybt.49.2022.01.22.10.57.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:57:26 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Eu37rzdV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:52564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLZm-0003Y8-5S for patch@linaro.org; Sat, 22 Jan 2022 13:57:26 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34652) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4z-0005n9-Al for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:37 -0500 Received: from [2a00:1450:4864:20::42f] (port=42928 helo=mail-wr1-x42f.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007h2-O5 for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:36 -0500 Received: by mail-wr1-x42f.google.com with SMTP id a13so5907545wrh.9 for ; Sat, 22 Jan 2022 10:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Lp1oJ9HFOvv8JUdUv/7QWvh4BnxCy5Ok7f/8j3T6Vxg=; b=Eu37rzdVMdIcpRW57Yo+pjUs+MZ7R8s8kyVcjaG14s8mW8ihQRHuMgbYAOgaEA+LIG olYmx6aS6TH2amumu3AlOhpD1qPK5Y2oJGfojKQiEle1v1CZcJbqUlh4iC3o1rQ8cMhi 5BdYlJhdH2m1RoqPMHbooiMZi7cbWsnyXAsXJ3u5yZ5owzD/nTQeXgkpc5HeMqzcwo56 hqv1PS4ulbuDfYpPOhbFt52k2z7K+jpad2JNpqf7KdPtqUPwNUd6Hb5r4pDBn3irC/9w wl6D08Dq2YkRyH/Xb4eSGAxUjw8UB66bIqimgok0fwLs5WeDEudGPkxOMWCIPAqNAJN4 kZUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Lp1oJ9HFOvv8JUdUv/7QWvh4BnxCy5Ok7f/8j3T6Vxg=; b=dkP4N0mfnlNlABLxQtixEZBMxNl3FXgJMc8ALRDa1zhjyWgv31EWwZj+IDztfoGOrL tNcUmYHaYJU7of6oXupsJdsBdyBN02HKqwKfpE7+iQK5wwyey9oe2WS0Va+fYVimfAPG M2zZqsZlw/k7l46JzIzbR+e+umdL2VGmGbS2PvYlNj61tmgHIJ+isOFz5CouwdTnzUZ5 igBRC6yvDjrbDWh6YmStgoRvn6XnfRmIEEG7Bf7PTNYT6N21kqiBOJJC1pz2OoWzoO84 l4sx8b6MTOwd00pfBippRrdKjgMcvv6rfBF2btx6ekYzI9knXr5VYY8VHsiYbxqtJqaQ n4Qg== X-Gm-Message-State: AOAM530SHu1cTuvCFSiUIBO804FzxXK4u5Q4uNazWAIGPu8ThbMjFA9+ Cm+Q+bJiFsvvrwSXPTjf+CFzKFgI3Z+rJg== X-Received: by 2002:a05:6000:16c9:: with SMTP id h9mr8452070wrf.508.1642875891902; Sat, 22 Jan 2022 10:24:51 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:51 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 08/14] hw/intc/arm_gicv3_redist: Remove unnecessary zero checks Date: Sat, 22 Jan 2022 18:24:38 +0000 Message-Id: <20220122182444.724087-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::42f (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The ITS-related parts of the redistributor code make some checks for whether registers like GICR_PROPBASER and GICR_PENDBASER are zero. There is no requirement in the specification for treating zeroes in these address registers specially -- they contain guest physical addresses and it is entirely valid (if unusual) for the guest to choose to put the tables they address at guest physical address zero. We use these values only to calculate guest addresses, and attempts by the guest to use a bad address will be handled by the address_space_* functions which we use to do the loads and stores. Remove the unnecessary checks. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_redist.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c index 99b11ca5eee..d81d8e5f076 100644 --- a/hw/intc/arm_gicv3_redist.c +++ b/hw/intc/arm_gicv3_redist.c @@ -591,8 +591,7 @@ void gicv3_redist_update_lpi_only(GICv3CPUState *cs) idbits = MIN(FIELD_EX64(cs->gicr_propbaser, GICR_PROPBASER, IDBITS), GICD_TYPER_IDBITS); - if (!(cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) || !cs->gicr_propbaser || - !cs->gicr_pendbaser) { + if (!(cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS)) { return; } @@ -673,9 +672,8 @@ void gicv3_redist_process_lpi(GICv3CPUState *cs, int irq, int level) idbits = MIN(FIELD_EX64(cs->gicr_propbaser, GICR_PROPBASER, IDBITS), GICD_TYPER_IDBITS); - if (!(cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) || !cs->gicr_propbaser || - !cs->gicr_pendbaser || (irq > (1ULL << (idbits + 1)) - 1) || - irq < GICV3_LPI_INTID_START) { + if (!(cs->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) || + (irq > (1ULL << (idbits + 1)) - 1) || irq < GICV3_LPI_INTID_START) { return; } From patchwork Sat Jan 22 18:24:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534112 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1679275imr; Sat, 22 Jan 2022 10:43:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJyFgA5HAYFIOlspRDul7GGMA4HMKs3ApIiEtZrfgb43h28K99rHD9gdsOhiGWqoXXzBB0yz X-Received: by 2002:a05:6902:1107:: with SMTP id o7mr8576416ybu.270.1642876995140; Sat, 22 Jan 2022 10:43:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876995; cv=none; d=google.com; s=arc-20160816; b=x2Zh8a+H+4HXOa7U7P2pVzgYsx5ir+J6eR5djEr74LpLLHGLQs1UZEIO4boc4bpdQq OSH0XYVzZ8VZcGNefY+aq6Me7R0v3Y4jdvjs0X1SxIzA43to/rHQE9rXlvEUjeb7zypQ 4/Y2DWhUICcFcuecx84aJfQXmplFg89pcihMnkcKPeyxlnRfpZ589o16ErTkuzTcgW/7 QEXUPt1MHEGsmRNf7aVwk06Z3LUoQKJ41Ck+oE6Bmc6Zpt6lvmbpjt7WuVpnCXl5B+rs riHTXI06bo9gauUybvgaQPPI7O3w9aNiVDMrN77jnj2g7hl2JVPFNLftPlIcwKYX4BBX zpGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=2LzeMToaOEGCiel3HQIJUA2eQNzHpTQ/lZbs+RZvo48=; b=a6cPBt/adSmYoEUrSQ06IGsxvYTklEHwCoCBKVPupXVTOqroFRE3LKwJADvw/asBbM X49mHZQy/qi92Cu4Zm6MBXxKjwmZpPqhtWfSkDUWHo31BJxa39dy0/q/xQNGfby0ZudR xq0Fx6uqK5EKhD5bF64BB5230esD2WTln9NsvxP/0IoWrMJ2aBc6P1fPGRpUPfzTT/pf bot5qLQ5AssxNlyZlxYUsoTFlcA+iYIJVAThJqJOPfDmtVzlRCEhwHxFR+NSHWMa83nB KaFkvg5SHrUw3swTCIebDZ71SzmllAFdJPmus4W/dJPq/jWsBtHVwE+NWueOq4qjaKzr +1Mw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=F9FABkkn; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id k5si2126069ybt.442.2022.01.22.10.43.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:43:15 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=F9FABkkn; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:39804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLM2-0002r9-Jh for patch@linaro.org; Sat, 22 Jan 2022 13:43:14 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4o-0005k1-Vd for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:29 -0500 Received: from [2a00:1450:4864:20::429] (port=36815 helo=mail-wr1-x429.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0007hA-9q for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:09 -0500 Received: by mail-wr1-x429.google.com with SMTP id u15so5890306wrt.3 for ; Sat, 22 Jan 2022 10:24:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2LzeMToaOEGCiel3HQIJUA2eQNzHpTQ/lZbs+RZvo48=; b=F9FABkkn2BchsatkG3FrRyqG73hQL/0/SsZYGCR/MLdt2U09yRUHlvqJVKcWeYhlJ/ IADCV6+PnJB4pvuoVrqecVb6SMCt8Sh6cGk0znGnMSNtuLWY7Mvt2kc1QrTk4EkCVD7O umUxqCKyeKBLzsmITftezRFYu3UTh7W2nPkxcAY2M8k5A2Wb6eLjwDvOkFUtm4tmyWjm oJEV7EGVMB+zXHNDM9v4EjDnRHZ6oMxkOGLkfRqkqWs8aVnu51O9oG5xWTP8u5bT3MPI p0tJEJmkOXI4VlblxrW0g+hJJlQgLJgWEiMTRgCNtueSJqryrLDrDPxM1xMf9mCIRr88 3aQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2LzeMToaOEGCiel3HQIJUA2eQNzHpTQ/lZbs+RZvo48=; b=1tuTtI/GIC9vWZ8lbPW+5fgBsneNXOeGQwr0pZjKARr/DDmoUxEvmkqGvT5e+Dz684 aJUdduMdOQFpbOvYi2n13v1+YrrZSeJ40OBfYYePHyMHw7wm4UCNkmKk5ktO3Rd9uHEM Laaqeaons3ciudwwd+30by5N1EXwy5wStpLu78pf0clUQSBoBir95ELQpuzbkM2lEZGQ msp2F2OCeGNWQR0tW5D8ahsInCvjknbvLFV19YZxjjKuh/9oTE4i+8CdPhyB/CshO60G P07d2+SbnAO+WITxZhxiyBoQBvFY8+i18xbTA74bxuEW0hs7MdjPkhYi1HAapLjxtBNJ OX8A== X-Gm-Message-State: AOAM530RQYhFQeEH3049kQCxk5b2asTPyfjCv4n0YEP9zbZku5H3Z40f pFe2vucjv/oOQnmMDlSSmFelNKEQZkW6Ng== X-Received: by 2002:adf:e90e:: with SMTP id f14mr8184908wrm.311.1642875892581; Sat, 22 Jan 2022 10:24:52 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:52 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 09/14] hw/intc/arm_gicv3: Set GICR_CTLR.CES if LPIs are supported Date: Sat, 22 Jan 2022 18:24:39 +0000 Message-Id: <20220122182444.724087-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::429 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The GICR_CTLR.CES bit is a read-only bit which is set to 1 to indicate that the GICR_CTLR.EnableLPIs bit can be written to 0 to disable LPIs (as opposed to allowing LPIs to be enabled but not subsequently disabled). Our implementation permits this, so advertise it by setting CES to 1. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/gicv3_internal.h | 1 + hw/intc/arm_gicv3_common.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index 5394266aaf4..a316f6c58a5 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -110,6 +110,7 @@ #define GICR_NSACR (GICR_SGI_OFFSET + 0x0E00) #define GICR_CTLR_ENABLE_LPIS (1U << 0) +#define GICR_CTLR_CES (1U << 1) #define GICR_CTLR_RWP (1U << 3) #define GICR_CTLR_DPG0 (1U << 24) #define GICR_CTLR_DPG1NS (1U << 25) diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 579aa0cb9ed..4ca5ae9bc56 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -429,6 +429,10 @@ static void arm_gicv3_common_reset(DeviceState *dev) cs->level = 0; cs->gicr_ctlr = 0; + if (s->lpi_enable) { + /* Our implementation supports clearing GICR_CTLR.EnableLPIs */ + cs->gicr_ctlr |= GICR_CTLR_CES; + } cs->gicr_statusr[GICV3_S] = 0; cs->gicr_statusr[GICV3_NS] = 0; cs->gicr_waker = GICR_WAKER_ProcessorSleep | GICR_WAKER_ChildrenAsleep; From patchwork Sat Jan 22 18:24:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534108 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1671655imr; Sat, 22 Jan 2022 10:28:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJz6w6XnDozf3DXEGq5zsLvAN6nw8hLh/hYGAvs1CiPVyJukErvxglhfW0NNl3q7yOu2f2np X-Received: by 2002:a05:6902:1107:: with SMTP id o7mr8516451ybu.270.1642876126384; Sat, 22 Jan 2022 10:28:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876126; cv=none; d=google.com; s=arc-20160816; b=ldIYSKbePO9qfndypkDjywLpMN2rNuyKsxG5dtFOr5XlcpQh2ZJnA+MwtFHIKNz9lP bHPR8QdYbHnAtHO9Cj7tGwa/b/6Hk1u/EJcBXvFpd7DLiI7LCq0bHQ7cKif6LiMhHOhI yoVpR2RdTyLHcVHU4Mt0K03x9gaWB6PnNu25HnDEj5DdiYwsrlKM47/otcFNTq6eopLG 3M93+NV+j2ovrxrgbM7W0Kdp5+SD2aM/0QSYKO15oh1I7Cxeix0TdmeyWIgJH69RhzFv iWpmzVfl4proFyEUZSzkZ58QGncqeC3FNDMJ/zH46zJqEEEMY0BjeMedNse8BLJPwRcp 2Uxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=A9W2sZCF9TsA92jrnmPwe+qydShQXcLUoRlpZNsydLs=; b=qdwve7GpB5osmHSEsEbmZ/hNRB0+8BvJvcyYl0WUVOkvsoDNuaUDwPvH9ddDhS+xxY RTk2HEbmGlHbmPN+6dZrPQ59lqSyOPmXetZYpiju6TiAFl/tr4h/f6EYgmtsAV+TK/cF NdjOOblZMdWGhAGnzKPCJM7FMynSj9k1BjtTH41bN9hBRixHChCGDu8O76x0dCHUzhFa NlsxYfUWjQPVYAAmFGzMojD5tjvEOcJsVIVqX0Mx/IM19KzeKVHvwzMW/0oDKYuiygMj 24SkNMz0GsxSpePYPY6VhUoCRjesg+fX+m8m21bv02IPG6826au7gVvO4BFcNb6ivrSW /NIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hY9qBsqe; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id a139si10760311ybg.75.2022.01.22.10.28.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:28:46 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hY9qBsqe; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:49220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBL81-0006gv-Mf for patch@linaro.org; Sat, 22 Jan 2022 13:28:45 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4o-0005jz-VK for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:29 -0500 Received: from [2a00:1450:4864:20::433] (port=35723 helo=mail-wr1-x433.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0007hP-Ap for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:10 -0500 Received: by mail-wr1-x433.google.com with SMTP id r14so5908929wrp.2 for ; Sat, 22 Jan 2022 10:24:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A9W2sZCF9TsA92jrnmPwe+qydShQXcLUoRlpZNsydLs=; b=hY9qBsqe5YW6mXtX8cv2chdwQrP/T27eaRN2GA+0H0NFbezHCuoMHcBbmEg/ggFIm3 apsTcKZPhWoC9Yx6h2tvc2SNzasDPjfDbPTS1rmARjqo2dmIcmyUdQ30O05+mmbixrvw 4/pvmcxdY8P+IjiJq2eFD7BfDyRIe3vOpjsHo8x4C9hQ707OnrNgTpQ7y8OFcVybtaYk OoiW3m/65A62L6CfxOUVu/4QD4ysKfAW2LoVFn7dlOUY9u3rdCpRPUD9sIIuZAWh9MQG f6ABcPJGtURGVrFcg45tGUhA3VMg6fzcg9LOlw9qPPLcpC977LGw/Qw6oPdNG47R/fe5 MyPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A9W2sZCF9TsA92jrnmPwe+qydShQXcLUoRlpZNsydLs=; b=Q46BxaQYQ8ENgJapl5fimBziZyC0hpxhZTnZYHWvNM+DZhthwczO+22rxVW4XH6uQ3 cVqKQlCXZMKxMvKh5mlE2ZhSElRuhMHRryq+ErgC0srZvsvJr/51pMiWK7bz6atzjzuO BuEPDxqg1C7zElZ9cbPyyKP2dO+6MXWFr8s6MT1BPsjLZdekLwo5zjnwdrVbYVkgme9M mIdVXcDeMp6LV7AT6IE9E7I5KbiitJVOh8JtGSLIby5fPx7xNw32w443Mr0cZ+XoCgl7 50i+6QpG5BFt37SY4169Yxp68Cdg6MYKuwQDyn2C8JxATMRGEgYTwMoCzW5YhblVZHJN ZA+w== X-Gm-Message-State: AOAM533V/c+zMdofyRte6ZBzgQq8Vqr7L8mbJ4oDW9AMVC2IOMfrxAvc NnpWfZxefc3qc0xDZC03p5Ljrb6UhsJN4A== X-Received: by 2002:adf:f7c8:: with SMTP id a8mr8433490wrq.603.1642875893344; Sat, 22 Jan 2022 10:24:53 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:52 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 10/14] hw/intc/arm_gicv3_its: Provide read accessor for translation_ops Date: Sat, 22 Jan 2022 18:24:40 +0000 Message-Id: <20220122182444.724087-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::433 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The MemoryRegionOps gicv3_its_translation_ops currently provides only a .write_with_attrs function, because the only register in this region is the write-only GITS_TRANSLATER. However, if you don't provide a read function and the guest tries reading from this memory region, QEMU will crash because memory_region_read_with_attrs_accessor() calls a NULL pointer. Add a read function which always returns 0, to cover both bogus attempts to read GITS_TRANSLATER and also reads from the rest of the region, which is documented to be reserved, RES0. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_its.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index d9ff7b88492..b17f2631269 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -813,6 +813,18 @@ static void extract_cmdq_params(GICv3ITSState *s) } } +static MemTxResult gicv3_its_translation_read(void *opaque, hwaddr offset, + uint64_t *data, unsigned size, + MemTxAttrs attrs) +{ + /* + * GITS_TRANSLATER is write-only, and all other addresses + * in the interrupt translation space frame are RES0. + */ + *data = 0; + return MEMTX_OK; +} + static MemTxResult gicv3_its_translation_write(void *opaque, hwaddr offset, uint64_t data, unsigned size, MemTxAttrs attrs) @@ -1168,6 +1180,7 @@ static const MemoryRegionOps gicv3_its_control_ops = { }; static const MemoryRegionOps gicv3_its_translation_ops = { + .read_with_attrs = gicv3_its_translation_read, .write_with_attrs = gicv3_its_translation_write, .valid.min_access_size = 2, .valid.max_access_size = 4, From patchwork Sat Jan 22 18:24:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534115 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1682965imr; Sat, 22 Jan 2022 10:52:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzUqmdo0dVjMFOoRBmg4aQkd4NcWLWba6uIypYBA8WJcYMch/T1pdHOk9uI60mmnw5oq8vd X-Received: by 2002:a25:9c45:: with SMTP id x5mr13994412ybo.91.1642877557602; Sat, 22 Jan 2022 10:52:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642877557; cv=none; d=google.com; s=arc-20160816; b=P6q6svkzL1oP9ATPB46MMGco52RVh4NSTRYCsb2WHxe161LtsQdU8+8jLASwFaNAmE LUEKgRzsJFWjt7/7t7JT0zpqenbTxZgsU/BjMNgU0S104e8WFZHLvDlKxVAKUMQS3VyA H2laJ4f9R6VSs9CwKFEpkTL1Z0kVAASsscMo7nFsktb9xNB2Um8BwvWnaa77FwbDfmml x2NHGAw9yGLx0eIulLT51/vY567o363LytynDdzx9LBTEyseNPoKFWheTb/1mo2jIWuz OJOx+aKofRYX2djRqOL44TFKXKj3QRuU2rvyDVrThGOLslrEfvSf1G6twqtldkFoxQDG YZJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=43IFxuU/YGBMpyeQtij+KdO9QDh+O+m1Z7AVC7ByFvI=; b=GZcwlO0ChJy7jKqOiHlaQjP/bjBQ8fPkkjJzHOoI1bf92pS7QNqtauR1arn2pYdnX7 mkiReQNs5OT5TwjI2Up7baVYJFZMzCDEIdQwUz1kopMIOeFPYMJqVxs1zWyMEO2QHBFV E6/Fc3RFPOmGY1tEdO/gH3orUWX5UuNH8tDqxfV+Rsoyt/o7wH2x5e0FUgkNEnZDQycX 9Q7qBF2SJ7Zw/ckVi7rxHzS4l0EQ/kuWSV46zYqZBsCrbxYGmJ2kIbmc7bskLHP+2Pne LX9k/a2JObAJFn+zC3k/W5018pX8orprYCVaES/w3tySJ/cZiJMr4rIyZf4whSE5ZUuI Xdgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=F676+Ro+; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id g7si9063262ybg.500.2022.01.22.10.52.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:52:37 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=F676+Ro+; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:48664 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLV7-0000lZ-30 for patch@linaro.org; Sat, 22 Jan 2022 13:52:37 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4x-0005m2-Eh for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:36 -0500 Received: from [2a00:1450:4864:20::336] (port=45902 helo=mail-wm1-x336.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007hX-Kq for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:34 -0500 Received: by mail-wm1-x336.google.com with SMTP id j5-20020a05600c1c0500b0034d2e956aadso24812052wms.4 for ; Sat, 22 Jan 2022 10:24:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=43IFxuU/YGBMpyeQtij+KdO9QDh+O+m1Z7AVC7ByFvI=; b=F676+Ro+KqESj+RvAEUztwiT0ZOh+NPLC29tSx0aYAElia9/8fUcbN9erhEyNtLpLy oaMQK9bvwt6+b3vhl+XkZbHEtN4IpEncdUeVzfrq9R4UOKOlWwzw3Y8uG7gbCeJjfL3l 4Eg/Nbqr6dSSaZlxozaHyn+Q/GYSAYPifuTdcDF3o4iPq946Q5G7aSHsWH7SvnpnRjjl n2X+KhgHfq+jTy2GbfLWcuzUuH8ZWOpoUWqGejA9fpeEfgOQNO/uZOLf4B0XOmR43KdB ppVAqwVpYi1zfOEgi96l/IHS9+rgGLnB+/oylGmo1T2rc7SgbsUQOqcr2UPo3Z1C+/On kAzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=43IFxuU/YGBMpyeQtij+KdO9QDh+O+m1Z7AVC7ByFvI=; b=Ye5rz8CDJwcDoPxtW62TwQqDsFF0Ddd1VoCw7xl5g+wslsCkAf7eNS5gnmz2/6bf6/ DXMUUEr7POLrPTqiXZcvG2gvr9l/dI5hxVHoaJwOeN9k5H9H40KqFtdqtsaicgbz++VE 3UE02jBGlL8OVsRPSSEgTzhnDmPvHvHwqd5hEXXoTaaEZFkQWEr+XXh0nUJtYfuE6LE/ pntI0yqACC1CG7slAuq1dZZ1F7RQAIycVAdnqo4pFyLNncyOLAlE40LPVYRve7L9FICG 3eLeTYrflvDeviT8TjUbLorVSQi6YX04bi44WWYj4Ix6w8y2qFhud8wKBE1zxkY2Tj/f nxSg== X-Gm-Message-State: AOAM533Hi/0e7ts1lMyWeTA/OooF4mOsTebrWaEYcB/2Jl9Fn8Rbkzbw 77ykxBTNJvEpuZMtpZxS3HILkg== X-Received: by 2002:a7b:c7d4:: with SMTP id z20mr5445178wmk.114.1642875894073; Sat, 22 Jan 2022 10:24:54 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:53 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 11/14] hw/intc/arm_gicv3_its: Make GITS_BASER RAZ/WI for unimplemented registers Date: Sat, 22 Jan 2022 18:24:41 +0000 Message-Id: <20220122182444.724087-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::336 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x336.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The ITS has a bank of 8 GITS_BASER registers, which allow the guest to specify the base address of various data tables. Each register has a read-only type field indicating which table it is for and a read-write field where the guest can write in the base address (among other things). We currently allow the guest to write the writeable fields for all eight registers, even if the type field is 0 indicating "Unimplemented". This means the guest can provoke QEMU into asserting by writing an address into one of these unimplemented base registers, which bypasses the "if (!value) continue" check in extract_table_params() and lets us hit the assertion that the type field is one of the permitted table types. Prevent the assertion by not allowing the guest to write to the unimplemented base registers. This means their value will remain 0 and extract_table_params() will ignore them. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/arm_gicv3_its.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index b17f2631269..237198845d7 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -929,6 +929,10 @@ static bool its_writel(GICv3ITSState *s, hwaddr offset, if (!(s->ctlr & R_GITS_CTLR_ENABLED_MASK)) { index = (offset - GITS_BASER) / 8; + if (s->baser[index] == 0) { + /* Unimplemented GITS_BASERn: RAZ/WI */ + break; + } if (offset & 7) { value <<= 32; value &= ~GITS_BASER_RO_MASK; @@ -1025,6 +1029,10 @@ static bool its_writell(GICv3ITSState *s, hwaddr offset, */ if (!(s->ctlr & R_GITS_CTLR_ENABLED_MASK)) { index = (offset - GITS_BASER) / 8; + if (s->baser[index] == 0) { + /* Unimplemented GITS_BASERn: RAZ/WI */ + break; + } s->baser[index] &= GITS_BASER_RO_MASK; s->baser[index] |= (value & ~GITS_BASER_RO_MASK); } From patchwork Sat Jan 22 18:24:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534119 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1688593imr; Sat, 22 Jan 2022 11:04:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJyuKfrLCWv12fxq8iqX2iGwq1Vg8sq2g33vARbhNguBIJh0NHt3EU73x/UaQDh7dXjHty8X X-Received: by 2002:a25:8092:: with SMTP id n18mr13816038ybk.221.1642878248420; Sat, 22 Jan 2022 11:04:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642878248; cv=none; d=google.com; s=arc-20160816; b=MDXYwp4fNdSE9pv1DrBnoom2zc4WyNeqarSsuO33qnfsVjI1wGIWZr1PchioMb9TUR 3GzFV7WDte7Yk0KD/YvuviVN2n7jb5UkdeGPbkNk8nHC5q+/83geoMIDCovUZxvGFPX0 ugJ6WQWNHimO/Bqt/yg0K6ew8uj7sxEmQaMuiPSJjmhp5gv/6W1tcCOiQ1TklVClNuJn h8XhteWd1XaWYahPSyuOPVBB/Q7byZ1oOt7d/6UTDXZPG2LIYWRM1mNZcBUXH0auvSPj tXmpybmowDHfWBpu82lLdamnnXupEW/98Iq9aGJcrnccn4covRHxah8KfG++jc0kLpst qapw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=MVgp6Ydys3b4ZUYTxQ7NMxi3s2REQ8l+tqo9NG4Dx+g=; b=eMK5l9XSX6g3gAeUrpS6TLy1WLjjY9rruRdzCCyKgcavO/D5Dj76JpIxQGxhE6r51p 3kcqKUBBzmx2t+WzVFuN7Q5O0O8S1O0M0TdT6SEoem0o7OvVx/obyk/vly/OfPoappK6 l/nu8jTknUtAbCdgG1JB6bzv27ZG5dbacnJlN1l59u7ZD0rFKgZ1ohd6aEYBCb+LGX0x ErnsZKmLB75z4loI5O9JxhZwm8mkDSvQdRJ/lnAc1gFZDy/eg872oEzQqBXIRwhVtYJu qhOVT7a/GvtaY1a8ulCfujbbEXq5a9YiFy/NDik5AxmnaqvzdhLCDdljlVMuy7TxFD6z 0fMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WEWtf1pr; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id l11si2190583ybt.568.2022.01.22.11.04.08 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 11:04:08 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WEWtf1pr; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:35256 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLgF-0002nG-Nw for patch@linaro.org; Sat, 22 Jan 2022 14:04:07 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4z-0005nA-NH for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:39 -0500 Received: from [2a00:1450:4864:20::431] (port=40723 helo=mail-wr1-x431.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4u-0007hj-O3 for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:37 -0500 Received: by mail-wr1-x431.google.com with SMTP id s18so5903541wrv.7 for ; Sat, 22 Jan 2022 10:24:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MVgp6Ydys3b4ZUYTxQ7NMxi3s2REQ8l+tqo9NG4Dx+g=; b=WEWtf1prF/r0AoWHJ50DAOT1HyPSZWocu/NqtlB+sKgw96e2GmeHnQz462C7nShxyF NzyqG5H/la+WTvVtBwL6nXg3dIdeNffsNpFTfJQTONeUtNNtX5NkwNU8ImaIhY2lTDR7 kEezG3Z5Q9gZcId5+suVJOKa9NrsTW/OpGuPRcFedmeriy2n4OdZ6j0sc6IaZ5+et5+Z mhlbePPOfa/poK0PT64UEF7TPUVO1pO75ykF9OGA6p6uuWi7CGrhj8fwB+5lXApPQ+V0 EnUtHiYy3S/Ec9mzF+pff/8aRjD4pEIVT3HJzuNGpjP+tmOqppvRbK+rB8P0Y1LI0Ma2 4AqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MVgp6Ydys3b4ZUYTxQ7NMxi3s2REQ8l+tqo9NG4Dx+g=; b=eC88E6biAaZl2gupjZw7ieNvmQBsrofZlkgn/fJLXg2khT7xhE6ti7LT77GXTGjnfv aFppVyy+GFbedtLPwRnLB7bDSt4SeWx4/vhC270z16JBcD8wBNulyQ2eiglsO3uz9Agv YvvSOhuL/fctEwFQVodqt1b0jF0J19EYw1TiIc0nHkHDQFEuSnBTOaLJzXMO7FPeKzjy 51lTxzrpbDfWMrDGnLFhINwJv6QGvAOxQi6UtIV4ODBdh+y05h/UXv+ZspYLkScpnpda 3kMRB1sNDFaGZyg9jM56Y4TWwNJnlFa1wQbdDeBJgWGeW2uj9QGiCTS5S8KAeU2RsWIm YOjQ== X-Gm-Message-State: AOAM530Rcd8dNTs4DWF0ZC7I6Uogj23lbkFqRbLtvY2O1DO13oVKBdq7 ffNSaL8oXvLurSsRTv2TcxeVUA== X-Received: by 2002:a5d:6da1:: with SMTP id u1mr8235096wrs.592.1642875894841; Sat, 22 Jan 2022 10:24:54 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:54 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 12/14] hw/intc/arm_gicv3_its: Check table bounds against correct limit Date: Sat, 22 Jan 2022 18:24:42 +0000 Message-Id: <20220122182444.724087-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::431 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Currently when we fill in a TableDesc based on the value the guest has written to the GITS_BASER register, we calculate both: * num_entries : the number of entries in the table, constrained by the amount of memory the guest has given it * num_ids : the number of IDs we support for this table, constrained by the implementation choices and the architecture (eg DeviceIDs are 16 bits, so num_ids is 1 << 16) When validating ITS commands, however, we check only num_ids, thus allowing a broken guest to specify table entries that index off the end of it. This will only corrupt guest memory, but the ITS is supposed to reject such commands as invalid. Instead of calculating both num_entries and num_ids, set num_entries to the minimum of the two limits, and check that. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- include/hw/intc/arm_gicv3_its_common.h | 1 - hw/intc/arm_gicv3_its.c | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/hw/intc/arm_gicv3_its_common.h b/include/hw/intc/arm_gicv3_its_common.h index b32c697207f..3e2ad2dff60 100644 --- a/include/hw/intc/arm_gicv3_its_common.h +++ b/include/hw/intc/arm_gicv3_its_common.h @@ -47,7 +47,6 @@ typedef struct { uint16_t entry_sz; uint32_t page_sz; uint32_t num_entries; - uint32_t num_ids; uint64_t base_addr; } TableDesc; diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 237198845d7..3f2ead45369 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -256,10 +256,10 @@ static ItsCmdResult process_its_cmd(GICv3ITSState *s, uint64_t value, eventid = (value & EVENTID_MASK); - if (devid >= s->dt.num_ids) { + if (devid >= s->dt.num_entries) { qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid command attributes: devid %d>=%d", - __func__, devid, s->dt.num_ids); + __func__, devid, s->dt.num_entries); return CMD_CONTINUE; } @@ -300,7 +300,7 @@ static ItsCmdResult process_its_cmd(GICv3ITSState *s, uint64_t value, return CMD_CONTINUE; } - if (icid >= s->ct.num_ids) { + if (icid >= s->ct.num_entries) { qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid ICID 0x%x in ITE (table corrupted?)\n", __func__, icid); @@ -384,10 +384,10 @@ static ItsCmdResult process_mapti(GICv3ITSState *s, uint64_t value, icid = value & ICID_MASK; - if (devid >= s->dt.num_ids) { + if (devid >= s->dt.num_entries) { qemu_log_mask(LOG_GUEST_ERROR, "%s: invalid command attributes: devid %d>=%d", - __func__, devid, s->dt.num_ids); + __func__, devid, s->dt.num_entries); return CMD_CONTINUE; } @@ -400,7 +400,7 @@ static ItsCmdResult process_mapti(GICv3ITSState *s, uint64_t value, num_eventids = 1ULL << (FIELD_EX64(dte, DTE, SIZE) + 1); num_intids = 1ULL << (GICD_TYPER_IDBITS + 1); - if ((icid >= s->ct.num_ids) + if ((icid >= s->ct.num_entries) || !dte_valid || (eventid >= num_eventids) || (((pIntid < GICV3_LPI_INTID_START) || (pIntid >= num_intids)) && (pIntid != INTID_SPURIOUS))) { @@ -485,7 +485,7 @@ static ItsCmdResult process_mapc(GICv3ITSState *s, uint32_t offset) valid = (value & CMD_FIELD_VALID_MASK); - if ((icid >= s->ct.num_ids) || (rdbase >= s->gicv3->num_cpu)) { + if ((icid >= s->ct.num_entries) || (rdbase >= s->gicv3->num_cpu)) { qemu_log_mask(LOG_GUEST_ERROR, "ITS MAPC: invalid collection table attributes " "icid %d rdbase %" PRIu64 "\n", icid, rdbase); @@ -566,7 +566,7 @@ static ItsCmdResult process_mapd(GICv3ITSState *s, uint64_t value, valid = (value & CMD_FIELD_VALID_MASK); - if ((devid >= s->dt.num_ids) || + if ((devid >= s->dt.num_entries) || (size > FIELD_EX64(s->typer, GITS_TYPER, IDBITS))) { qemu_log_mask(LOG_GUEST_ERROR, "ITS MAPD: invalid device table attributes " @@ -791,7 +791,7 @@ static void extract_table_params(GICv3ITSState *s) L1TABLE_ENTRY_SIZE) * (page_sz / td->entry_sz)); } - td->num_ids = 1ULL << idbits; + td->num_entries = MIN(td->num_entries, 1ULL << idbits); } } From patchwork Sat Jan 22 18:24:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534110 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1674947imr; Sat, 22 Jan 2022 10:34:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJzxrmIkmntQVRbnLyX0BX0Zb0EwsGFb2DSVvtY8/MboPcs4Zm7tBCcL/a+W36RNdEqbulyD X-Received: by 2002:a25:f442:: with SMTP id p2mr13306960ybe.661.1642876480659; Sat, 22 Jan 2022 10:34:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876480; cv=none; d=google.com; s=arc-20160816; b=gY3lfEnpQPrmXhB2eABNGux7Xz0QIigu1sFjwfQl/9CQiu7CMwXWC7lJ4+0zop1nXv 7cFz5H4188evS1OTNx+yu9YPo52Z+9WyDC6TwMwirHyYrnQn8zsKS+qLIxgu2zwCKXYo YJIiACHx6fwBFxRO9juDtJIHeQA9T7Ukbt9nuvnmURMkO8PkU8/Pggn5bEH+691IOD4C ADZVX+Yit8d5zaicpsqwwcKJHrQ+ekNOymQvvihxe1jobQvQo/mt8UxBtxhrQnwEe94J 3XDaGqxH/GUSLvX0HU1KPqltnwYvamrvuDxrB6A9Cs4F3Pq5qxwdBCaY75v00b2076vB DeEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=NmW5MPyGTPGnJ2dZTLAZgefhA7dKwEY4XGRobcyVNv4=; b=gF+zuw8GTHY0KdlbnVMEegLanhhsbPSxTIrebEsIRaQKv/kKBHpkIjaSTDjBddAzPb /hrG8ABJCa14rd+Dci8S4KpjHkHtPSZ8OLJyQKPaoEgfiJKVyxwZH7YVyTn0y3Pvf7IC gHBf+dZHcjzYtPwhxI/OownjgJAOXmwADCLeGF/XKjurOiBMZiyGSJMHRxCvZFrokdJs S//xoKiF6x1fDNk6l6917sYGafVok22PoCCKbrJBMZ+S5OaMKG4X8Fq5cmkw2qmYV569 6PA9HZn13tHEX2iwQg4K5o3FsBD93K2xtK9XDDtStduvFfV1dn7WDVPIo2RzqxzKxadt rZtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OhiD1L+V; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id y18si9669221ybk.740.2022.01.22.10.34.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:34:40 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OhiD1L+V; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:59074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBLDk-00059I-31 for patch@linaro.org; Sat, 22 Jan 2022 13:34:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34406) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4p-0005k3-9a for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:29 -0500 Received: from [2a00:1450:4864:20::434] (port=43902 helo=mail-wr1-x434.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4U-0007hw-U4 for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:08 -0500 Received: by mail-wr1-x434.google.com with SMTP id v13so5892277wrv.10 for ; Sat, 22 Jan 2022 10:24:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NmW5MPyGTPGnJ2dZTLAZgefhA7dKwEY4XGRobcyVNv4=; b=OhiD1L+VGbQ4RSRi6COzwbz4HHxAVFKiOZGbGE3GqSgyIHsMAgl2eglEDFD6JeL/fo YHIcwsMYRyHBKliWJPP16G54/xSmHvBgToYjdf18hZTuANzmPbZc6NabGpia7yyg+6y0 EbacIfDl46N/Sn0Ppn46C6zPli6pSGksys3S1u5L76aYgF9e7sMRlylhHMTR0iaFTKbB FKu99/gXj42hzXIsA58HygBt74uU8yWsUt/dJ7r50pRQKfz4FXS6ep6Qm8I86n+vC9/w yPzcqSNz4ibpJU5gQR6ZS71kJ+Iu/5BXfPAvMAQkrNpVYfwzYLI/G015NYd3Dp8EZoHh wkqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NmW5MPyGTPGnJ2dZTLAZgefhA7dKwEY4XGRobcyVNv4=; b=wf6NYrES44oau/70i38lyhWVy1OOaedBATDI3PtRH24Bs85lW9l1xrI8DOvfx894vK 173joa7LJ21sK4eZXdZ4FhD5fByaxy6S8AOPGhI0lrMkf+AIUTYRs2tL2uqa4QNXjz7k EO8+DxgrgEVVFqLMGqqRAJgE9fP+5owCP9pE4ntgCD338/2lLc16kWNYBDY6RDTmZ582 kQYNXZPT3FnacgJV9wGodNoeI5vcPXSz7dhOIu0Z1OZNh+B4SCPpMh4W361BX5ieVQkp E8Ho6VtE/lMaITws8b9yivwkQRJnW1GRNFOoRWp6zt73qeDQ2jzhhN+uGkDaE4ScNC2O tqew== X-Gm-Message-State: AOAM532oBnm0bDbCOMFw8mpLQVPrSco6k+YLeL+jwL+rjupdWkP58qg9 VDwjdFpAZMSi08BAGXam4pGINA== X-Received: by 2002:a05:6000:156b:: with SMTP id 11mr8303386wrz.558.1642875895683; Sat, 22 Jan 2022 10:24:55 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:55 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 13/14] hw/intc/arm_gicv3_its: Implement MOVALL Date: Sat, 22 Jan 2022 18:24:43 +0000 Message-Id: <20220122182444.724087-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::434 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Implement the ITS MOVALL command, which takes all the pending interrupts on a source redistributor and makes the not-pending on that source redistributor and pending on a destination redistributor. This is a GICv3 ITS command which we forgot to implement. (It is not used by Linux guests.) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/gicv3_internal.h | 16 +++++++++++ hw/intc/arm_gicv3_its.c | 55 ++++++++++++++++++++++++++++++++++++++ hw/intc/arm_gicv3_redist.c | 54 +++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index a316f6c58a5..da45975d92b 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -324,6 +324,7 @@ FIELD(GITS_TYPER, CIL, 36, 1) #define GITS_CMD_MAPI 0x0B #define GITS_CMD_INV 0x0C #define GITS_CMD_INVALL 0x0D +#define GITS_CMD_MOVALL 0x0E #define GITS_CMD_DISCARD 0x0F /* MAPC command fields */ @@ -355,6 +356,10 @@ FIELD(MAPC, RDBASE, 16, 32) #define L2_TABLE_VALID_MASK CMD_FIELD_VALID_MASK #define TABLE_ENTRY_VALID_MASK (1ULL << 0) +/* MOVALL command fields */ +FIELD(MOVALL_2, RDBASE1, 16, 36) +FIELD(MOVALL_3, RDBASE2, 16, 36) + /* * 12 bytes Interrupt translation Table Entry size * as per Table 5.3 in GICv3 spec @@ -497,6 +502,17 @@ void gicv3_redist_update_lpi(GICv3CPUState *cs); * an incoming migration has loaded new state. */ void gicv3_redist_update_lpi_only(GICv3CPUState *cs); +/** + * gicv3_redist_movall_lpis: + * @src: source redistributor + * @dest: destination redistributor + * + * Scan the LPI pending table for @src, and for each pending LPI there + * mark it as not-pending for @src and pending for @dest, as required + * by the ITS MOVALL command. + */ +void gicv3_redist_movall_lpis(GICv3CPUState *src, GICv3CPUState *dest); + void gicv3_redist_send_sgi(GICv3CPUState *cs, int grp, int irq, bool ns); void gicv3_init_cpuif(GICv3State *s); diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 3f2ead45369..ebc0403b3c7 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -582,6 +582,58 @@ static ItsCmdResult process_mapd(GICv3ITSState *s, uint64_t value, return update_dte(s, devid, valid, size, itt_addr) ? CMD_CONTINUE : CMD_STALL; } +static ItsCmdResult process_movall(GICv3ITSState *s, uint64_t value, + uint32_t offset) +{ + AddressSpace *as = &s->gicv3->dma_as; + MemTxResult res = MEMTX_OK; + uint64_t rd1, rd2; + + /* No fields in dwords 0 or 1 */ + offset += NUM_BYTES_IN_DW; + offset += NUM_BYTES_IN_DW; + value = address_space_ldq_le(as, s->cq.base_addr + offset, + MEMTXATTRS_UNSPECIFIED, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + + rd1 = FIELD_EX64(value, MOVALL_2, RDBASE1); + if (rd1 >= s->gicv3->num_cpu) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: RDBASE1 %" PRId64 + " out of range (must be less than %d)\n", + __func__, rd1, s->gicv3->num_cpu); + return CMD_CONTINUE; + } + + offset += NUM_BYTES_IN_DW; + value = address_space_ldq_le(as, s->cq.base_addr + offset, + MEMTXATTRS_UNSPECIFIED, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + + rd2 = FIELD_EX64(value, MOVALL_3, RDBASE2); + if (rd2 >= s->gicv3->num_cpu) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: RDBASE2 %" PRId64 + " out of range (must be less than %d)\n", + __func__, rd2, s->gicv3->num_cpu); + return CMD_CONTINUE; + } + + if (rd1 == rd2) { + /* Move to same target must succeed as a no-op */ + return CMD_CONTINUE; + } + + /* Move all pending LPIs from redistributor 1 to redistributor 2 */ + gicv3_redist_movall_lpis(&s->gicv3->cpu[rd1], &s->gicv3->cpu[rd2]); + + return CMD_CONTINUE; +} + /* * Current implementation blocks until all * commands are processed @@ -679,6 +731,9 @@ static void process_cmdq(GICv3ITSState *s) gicv3_redist_update_lpi(&s->gicv3->cpu[i]); } break; + case GITS_CMD_MOVALL: + result = process_movall(s, data, cq_offset); + break; default: break; } diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c index d81d8e5f076..d1645ba22c6 100644 --- a/hw/intc/arm_gicv3_redist.c +++ b/hw/intc/arm_gicv3_redist.c @@ -681,6 +681,60 @@ void gicv3_redist_process_lpi(GICv3CPUState *cs, int irq, int level) gicv3_redist_lpi_pending(cs, irq, level); } +void gicv3_redist_movall_lpis(GICv3CPUState *src, GICv3CPUState *dest) +{ + /* + * We must move all pending LPIs from the source redistributor + * to the destination. That is, for every pending LPI X on + * src, we must set it not-pending on src and pending on dest. + * LPIs that are already pending on dest are not cleared. + * + * If LPIs are disabled on dest this is CONSTRAINED UNPREDICTABLE: + * we choose to NOP. If LPIs are disabled on source there's nothing + * to be transferred anyway. + */ + AddressSpace *as = &src->gic->dma_as; + uint64_t idbits; + uint32_t pendt_size; + uint64_t src_baddr, dest_baddr; + int i; + + if (!(src->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) || + !(dest->gicr_ctlr & GICR_CTLR_ENABLE_LPIS)) { + return; + } + + idbits = MIN(FIELD_EX64(src->gicr_propbaser, GICR_PROPBASER, IDBITS), + GICD_TYPER_IDBITS); + idbits = MIN(FIELD_EX64(dest->gicr_propbaser, GICR_PROPBASER, IDBITS), + idbits); + + pendt_size = 1ULL << (idbits + 1); + src_baddr = src->gicr_pendbaser & R_GICR_PENDBASER_PHYADDR_MASK; + dest_baddr = dest->gicr_pendbaser & R_GICR_PENDBASER_PHYADDR_MASK; + + for (i = GICV3_LPI_INTID_START / 8; i < pendt_size / 8; i++) { + uint8_t src_pend, dest_pend; + + address_space_read(as, src_baddr + i, MEMTXATTRS_UNSPECIFIED, + &src_pend, sizeof(src_pend)); + if (!src_pend) { + continue; + } + address_space_read(as, dest_baddr + i, MEMTXATTRS_UNSPECIFIED, + &dest_pend, sizeof(dest_pend)); + dest_pend |= src_pend; + src_pend = 0; + address_space_write(as, src_baddr + i, MEMTXATTRS_UNSPECIFIED, + &src_pend, sizeof(src_pend)); + address_space_write(as, dest_baddr + i, MEMTXATTRS_UNSPECIFIED, + &dest_pend, sizeof(dest_pend)); + } + + gicv3_redist_update_lpi(src); + gicv3_redist_update_lpi(dest); +} + void gicv3_redist_set_irq(GICv3CPUState *cs, int irq, int level) { /* Update redistributor state for a change in an external PPI input line */ From patchwork Sat Jan 22 18:24:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 534106 Delivered-To: patch@linaro.org Received: by 2002:ac0:f7d2:0:0:0:0:0 with SMTP id i18csp1671542imr; Sat, 22 Jan 2022 10:28:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJyfafjiUI3EnjoDla1kG4TLuDtdXxFB2J2IorTOMnWs9Ut0oJ6sHhhE5GKnyoBYhXDMM+NC X-Received: by 2002:a25:ba4c:: with SMTP id z12mr14423340ybj.136.1642876111040; Sat, 22 Jan 2022 10:28:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642876111; cv=none; d=google.com; s=arc-20160816; b=OpHyr+WACRC3Gxiv5z3vfw7XM2yViMfQdN1SGijO6Ah3RfsXTMKqMj26tdzy6cIMrw 8pUvzXk5b6zvyVMatkNVdm2BXTEvnjhrk3MwKDr6HSty+wVopp6xFm45fP+YZJOtviP9 jD3bIgOwerEHM2xPcITwZpIJWVYRTnHSWoZ+4FiZw13FRBW7DqBROr8meyT2ciY0UYjy 9mzNCK/F4HCJ9fYFiAVr49LQQ99VkqBYqGkz5SvGhjthUaprFsXnW6UjvIHVwhmlils8 LGtUGE3KUfUJ6wLgqcixCL62TatOT0l3pf/E7NbUxpGt682ieFf5Ft/7Dnb9kNgeDNCi jRfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=QDK8B4Dq1xfGJouKuuAJ+UquJZW2SfG7Vdo6726q22Y=; b=B8tGtrLJQ7Fiu+peloBzGRRYKPl/G1fcKk1BojRGbV408uwnVvBqEV1yV75nddSFIj GE10a0h4TjQ+dhqkoOrE7UI/KLrHuAydls1ACAxMCHqmteYbpX6+8kSwvvaoSwfgmk+A MGhgpcUeVPC+XyOMrM+Ze1FSczJd7re1GtZW8xnJE3vZimnK8W5aMh44bp0aMllY5Ehl 1s0sLsgtPc1IGp737XZu7Ltcaddqe9OwlYIyu8LmmUTGIZsBrMpg7LDVCArMFSbFF/3T Ii68Jw9QlQKDq33HF+eY1ECteNQjYnF4itI4T/AHXsKgT8wgkRNbBl0cv7xRxuJKSRbO v+Lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jtJwW4Di; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 130si8522695ybf.393.2022.01.22.10.28.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 22 Jan 2022 10:28:31 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jtJwW4Di; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:47976 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nBL7m-0005kK-HL for patch@linaro.org; Sat, 22 Jan 2022 13:28:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:34230) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nBL4V-0005hx-Py for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:16 -0500 Received: from [2a00:1450:4864:20::432] (port=35723 helo=mail-wr1-x432.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nBL4S-0007i4-Iy for qemu-devel@nongnu.org; Sat, 22 Jan 2022 13:25:06 -0500 Received: by mail-wr1-x432.google.com with SMTP id r14so5909106wrp.2 for ; Sat, 22 Jan 2022 10:24:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QDK8B4Dq1xfGJouKuuAJ+UquJZW2SfG7Vdo6726q22Y=; b=jtJwW4DiJE2oUAWC5iw8MRolHXjzeAoMC8KVoCQqwu28Jofe5lhffnZW621jyN0oD+ cuErblqUseOE/tm9Gaq0NXcETK6Uql60EPyVX78ECd2rh5llIesBwCsLD/HEawx+Z8RN o8GevB9R6C3XiOCPzvAvZWHhDmwigveUcEB2miLPKYZGRnffZijfIadMnWTGJDZXiWO0 aj0QZmeeEiFf6NWjsiMbPgHkZdy7X5KZLD2DqUvrRjx/fs4ROXwUjda1HJrBY1gKDlk/ Y3ttK425qdOS6kBk6zqoB1fVLEJk8iyg+TE3gS9OTJCkwbYWAZmGhfgA7WpunbSAi77L pXIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QDK8B4Dq1xfGJouKuuAJ+UquJZW2SfG7Vdo6726q22Y=; b=4zkvEJBsYiXmYKoKLOwPJ1vNT1eggUqiyntlDUymYTRHpWKjlnbxzAnsAE2Xt+E9SA lLa0FaYTgnkDI0sYbpwo4Z8tmTkC/mGibSB9Fh1igG/0mRm4agO6Z9QgIJ6duRiCcLUO ZqMWHtu4zqGFSy9NZhrFeGb5FT02IpOsp55yuvkrBQ99+dolYtiMXtIpPbpfTtUfgdoh Lq8s8LqIrG3og7iqN3KwosFTamBi75og6asU1A4SZBj84j07UFlCojJy+Xu9ItboF77f cwnR6YJ5wkcu6woxUjZYa/02Qn3hbBDonwFsDbB976njfYLTxTPpmpTxGjekcyd0BxZE eyAA== X-Gm-Message-State: AOAM530sJrAxA8+quHh9UzmPjJEXXiXKmUHIRkIEEdKxicXbfC/nHyC1 UeOuIt4tZp0s6BJYmjVXM6R38vr1xoU0DA== X-Received: by 2002:a5d:59ad:: with SMTP id p13mr8556415wrr.16.1642875896636; Sat, 22 Jan 2022 10:24:56 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id 21sm8870774wmk.45.2022.01.22.10.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jan 2022 10:24:56 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 14/14] hw/intc/arm_gicv3_its: Implement MOVI Date: Sat, 22 Jan 2022 18:24:44 +0000 Message-Id: <20220122182444.724087-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220122182444.724087-1-peter.maydell@linaro.org> References: <20220122182444.724087-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::432 (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, 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: , Cc: Shashi Mallela , =?utf-8?q?Alex_Benn=C3=A9e?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Implement the ITS MOVI command. This command specifies a (physical) LPI by DeviceID and EventID and provides a new ICID for it. The ITS must find the interrupt translation table entry for the LPI, which will tell it the old ICID. It then moves the pending state of the LPI from the old redistributor to the new one and updates the ICID field in the translation table entry. This is another GICv3 ITS command that we forgot to implement. Linux does use this one, but only if the guest powers off one of its CPUs. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- All the "validate guest command argument, log and return if bad" logic feels very clunky here... --- hw/intc/gicv3_internal.h | 16 ++++ hw/intc/arm_gicv3_its.c | 146 +++++++++++++++++++++++++++++++++++++ hw/intc/arm_gicv3_redist.c | 53 ++++++++++++++ 3 files changed, 215 insertions(+) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index da45975d92b..b1af26df9f4 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -315,6 +315,7 @@ FIELD(GITS_TYPER, CIL, 36, 1) #define CMD_MASK 0xff /* ITS Commands */ +#define GITS_CMD_MOVI 0x01 #define GITS_CMD_INT 0x03 #define GITS_CMD_CLEAR 0x04 #define GITS_CMD_SYNC 0x05 @@ -360,6 +361,11 @@ FIELD(MAPC, RDBASE, 16, 32) FIELD(MOVALL_2, RDBASE1, 16, 36) FIELD(MOVALL_3, RDBASE2, 16, 36) +/* MOVI command fields */ +FIELD(MOVI_0, DEVICEID, 32, 32) +FIELD(MOVI_1, EVENTID, 0, 32) +FIELD(MOVI_2, ICID, 0, 16) + /* * 12 bytes Interrupt translation Table Entry size * as per Table 5.3 in GICv3 spec @@ -502,6 +508,16 @@ void gicv3_redist_update_lpi(GICv3CPUState *cs); * an incoming migration has loaded new state. */ void gicv3_redist_update_lpi_only(GICv3CPUState *cs); +/** + * gicv3_redist_mov_lpi: + * @src: source redistributor + * @dest: destination redistributor + * @irq: LPI to update + * + * Move the pending state of the specified LPI from @src to @dest, + * as required by the ITS MOVI command. + */ +void gicv3_redist_mov_lpi(GICv3CPUState *src, GICv3CPUState *dest, int irq); /** * gicv3_redist_movall_lpis: * @src: source redistributor diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index ebc0403b3c7..51d9be4ae6f 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -634,6 +634,149 @@ static ItsCmdResult process_movall(GICv3ITSState *s, uint64_t value, return CMD_CONTINUE; } +static ItsCmdResult process_movi(GICv3ITSState *s, uint64_t value, + uint32_t offset) +{ + AddressSpace *as = &s->gicv3->dma_as; + MemTxResult res = MEMTX_OK; + uint32_t devid, eventid, intid; + uint16_t old_icid, new_icid; + uint64_t old_cte, new_cte; + uint64_t old_rdbase, new_rdbase; + uint64_t dte; + bool dte_valid, ite_valid, cte_valid; + uint64_t num_eventids; + IteEntry ite = {}; + + devid = FIELD_EX64(value, MOVI_0, DEVICEID); + + offset += NUM_BYTES_IN_DW; + value = address_space_ldq_le(as, s->cq.base_addr + offset, + MEMTXATTRS_UNSPECIFIED, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + eventid = FIELD_EX64(value, MOVI_1, EVENTID); + + offset += NUM_BYTES_IN_DW; + value = address_space_ldq_le(as, s->cq.base_addr + offset, + MEMTXATTRS_UNSPECIFIED, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + new_icid = FIELD_EX64(value, MOVI_2, ICID); + + if (devid >= s->dt.num_entries) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: devid %d>=%d", + __func__, devid, s->dt.num_entries); + return CMD_CONTINUE; + } + dte = get_dte(s, devid, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + + dte_valid = FIELD_EX64(dte, DTE, VALID); + if (!dte_valid) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: " + "invalid dte: %"PRIx64" for %d\n", + __func__, dte, devid); + return CMD_CONTINUE; + } + + num_eventids = 1ULL << (FIELD_EX64(dte, DTE, SIZE) + 1); + if (eventid >= num_eventids) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: eventid %d >= %" + PRId64 "\n", + __func__, eventid, num_eventids); + return CMD_CONTINUE; + } + + ite_valid = get_ite(s, eventid, dte, &old_icid, &intid, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + + if (!ite_valid) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: invalid ITE\n", + __func__); + return CMD_CONTINUE; + } + + if (old_icid >= s->ct.num_entries) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid ICID 0x%x in ITE (table corrupted?)\n", + __func__, old_icid); + return CMD_CONTINUE; + } + + if (new_icid >= s->ct.num_entries) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: ICID 0x%x\n", + __func__, new_icid); + return CMD_CONTINUE; + } + + cte_valid = get_cte(s, old_icid, &old_cte, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + if (!cte_valid) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: " + "invalid cte: %"PRIx64"\n", + __func__, old_cte); + return CMD_CONTINUE; + } + + cte_valid = get_cte(s, new_icid, &new_cte, &res); + if (res != MEMTX_OK) { + return CMD_STALL; + } + if (!cte_valid) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid command attributes: " + "invalid cte: %"PRIx64"\n", + __func__, new_cte); + return CMD_CONTINUE; + } + + old_rdbase = FIELD_EX64(old_cte, CTE, RDBASE); + if (old_rdbase >= s->gicv3->num_cpu) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: CTE has invalid rdbase 0x%"PRIx64"\n", + __func__, old_rdbase); + return CMD_CONTINUE; + } + + new_rdbase = FIELD_EX64(new_cte, CTE, RDBASE); + if (new_rdbase >= s->gicv3->num_cpu) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: CTE has invalid rdbase 0x%"PRIx64"\n", + __func__, new_rdbase); + return CMD_CONTINUE; + } + + if (old_rdbase != new_rdbase) { + /* Move the LPI from the old redistributor to the new one */ + gicv3_redist_mov_lpi(&s->gicv3->cpu[old_rdbase], + &s->gicv3->cpu[new_rdbase], + intid); + } + + /* Update the ICID field in the interrupt translation table entry */ + ite.itel = FIELD_DP64(ite.itel, ITE_L, VALID, 1); + ite.itel = FIELD_DP64(ite.itel, ITE_L, INTTYPE, ITE_INTTYPE_PHYSICAL); + ite.itel = FIELD_DP64(ite.itel, ITE_L, INTID, intid); + ite.itel = FIELD_DP64(ite.itel, ITE_L, DOORBELL, INTID_SPURIOUS); + ite.iteh = FIELD_DP32(ite.iteh, ITE_H, ICID, new_icid); + return update_ite(s, eventid, dte, ite) ? CMD_CONTINUE : CMD_STALL; +} + /* * Current implementation blocks until all * commands are processed @@ -731,6 +874,9 @@ static void process_cmdq(GICv3ITSState *s) gicv3_redist_update_lpi(&s->gicv3->cpu[i]); } break; + case GITS_CMD_MOVI: + result = process_movi(s, data, cq_offset); + break; case GITS_CMD_MOVALL: result = process_movall(s, data, cq_offset); break; diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c index d1645ba22c6..412a04f59cf 100644 --- a/hw/intc/arm_gicv3_redist.c +++ b/hw/intc/arm_gicv3_redist.c @@ -681,6 +681,59 @@ void gicv3_redist_process_lpi(GICv3CPUState *cs, int irq, int level) gicv3_redist_lpi_pending(cs, irq, level); } +void gicv3_redist_mov_lpi(GICv3CPUState *src, GICv3CPUState *dest, int irq) +{ + /* + * Move the specified LPI's pending state from the source redistributor + * to the destination. + * + * If LPIs are disabled on dest this is CONSTRAINED UNPREDICTABLE: + * we choose to NOP. If LPIs are disabled on source there's nothing + * to be transferred anyway. + */ + AddressSpace *as = &src->gic->dma_as; + uint64_t idbits; + uint32_t pendt_size; + uint64_t src_baddr; + uint8_t src_pend; + + if (!(src->gicr_ctlr & GICR_CTLR_ENABLE_LPIS) || + !(dest->gicr_ctlr & GICR_CTLR_ENABLE_LPIS)) { + return; + } + + idbits = MIN(FIELD_EX64(src->gicr_propbaser, GICR_PROPBASER, IDBITS), + GICD_TYPER_IDBITS); + idbits = MIN(FIELD_EX64(dest->gicr_propbaser, GICR_PROPBASER, IDBITS), + idbits); + + pendt_size = 1ULL << (idbits + 1); + if ((irq / 8) >= pendt_size) { + return; + } + + src_baddr = src->gicr_pendbaser & R_GICR_PENDBASER_PHYADDR_MASK; + + address_space_read(as, src_baddr + (irq / 8), + MEMTXATTRS_UNSPECIFIED, &src_pend, sizeof(src_pend)); + if (!extract32(src_pend, irq % 8, 1)) { + /* Not pending on source, nothing to do */ + return; + } + src_pend &= ~(1 << (irq % 8)); + address_space_write(as, src_baddr + (irq / 8), + MEMTXATTRS_UNSPECIFIED, &src_pend, sizeof(src_pend)); + if (irq == src->hpplpi.irq) { + /* + * We just made this LPI not-pending so only need to update + * if it was previously the highest priority pending LPI + */ + gicv3_redist_update_lpi(src); + } + /* Mark it pending on the destination */ + gicv3_redist_lpi_pending(dest, irq, 1); +} + void gicv3_redist_movall_lpis(GICv3CPUState *src, GICv3CPUState *dest) { /*