From patchwork Thu Feb 16 16:00:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58154 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp381728wrn; Thu, 16 Feb 2023 08:03:32 -0800 (PST) X-Google-Smtp-Source: AK7set9+HLIQ5TVL9TsBPaG7W9mLCeteTyx+d+jfnJ8hVhbNGswyb4P3tUYv4pQGjFtdZq544/a0 X-Received: by 2002:a50:fa8a:0:b0:4aa:a4ea:cdc9 with SMTP id w10-20020a50fa8a000000b004aaa4eacdc9mr6996876edr.16.1676563412273; Thu, 16 Feb 2023 08:03:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563412; cv=none; d=google.com; s=arc-20160816; b=xps5QecMIKaOUZ6pQjmUwok9gFnGYqxgWzPVuIaQoRmKL+MRmtmP4BVAvvg5Id5tNW pBQQWve27UylbeN3ldevxu4qu0S1UFuPKtLgq7P8OO0nUZql/ZZWHCMU1CgKnvH5gGY3 e4w+HdWc2cFXij5gKx76usLDoLl7yn3ZNjbr1gVlUt6PNP7FNJGrJ6/WiG2qNrnGNjeM 6wAH6iClHTJmWprS6hpquoKM812wHAk1BbUO2FsmnlK1avZLuTN+WeQ+WBXZUINlYSdI fBhO25NL/W/WHISSwc+bB6Q/zcBWuVk78BbtmZrEiU+hhYFK3OkPiIdW0rDE4T5H3Oi/ F8gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=eA9QoqGBrTXv0Q1QfCY20A15jmTMES8tGiolwaXwZTc=; b=jIFFVyuAkqaZt2U0WYiez+MQ+bmbyEQ8ZKZzauOtIySlHF7SMi3St754dFAwbdJF46 Rty70nTWcXY82s1bET5aBUslIdt4US5orQ5uXPhRTFtN5b29RdCZfvS7kxGmxsv1xdgU StjZ4a7z65sxzBEKojSaJprVuX26p6MD9M7oeegPHhqMUTSJJHpjchMTtRpG51wak2H2 umtFVV4CC2Fj6y6i85LThGMvjJantT+v/f/YhM+X/12X9T0LFD/UisYRoixNL6XuF0BS jmA5ejjCsKi080PiMgUzHqjTPG5h8AHrVh+MTZuCWXYSKIOhFMXTmShbltdbiuhlAp5f cKNA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a11-20020aa7d90b000000b004ad7ac04a59si126670edr.389.2023.02.16.08.03.07; Thu, 16 Feb 2023 08:03:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229673AbjBPQBh (ORCPT + 99 others); Thu, 16 Feb 2023 11:01:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58928 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229462AbjBPQBc (ORCPT ); Thu, 16 Feb 2023 11:01:32 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 68F8256487 for ; Thu, 16 Feb 2023 08:01:30 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D7CF3113E; Thu, 16 Feb 2023 08:02:12 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D83E83F881; Thu, 16 Feb 2023 08:01:26 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 01/10] KVM: arm64: initialize HCRX_EL2 Date: Thu, 16 Feb 2023 16:00:03 +0000 Message-Id: <20230216160012.272345-2-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004156313054377?= X-GMAIL-MSGID: =?utf-8?q?1758004156313054377?= ARMv8.7/9.2 adds a new hypervisor configuration register HCRX_EL2. Initialize the register to a safe value (all fields 0), to be robust against firmware that has not initialized it. This is also needed to ensure that the register is reinitialized after kexec. In addition, move SMPME setup over to the new flags, as it would otherwise get overridden. It is safe to set the bit even if SME is not (uniformly) supported, as it will write to a RES0 bit (having no effect), and SME will be disabled by the cpufeature framework. (Similar to how e.g. the API bit is handled in HCR_HOST_NVHE_FLAGS.) Signed-off-by: Kristina Martsenko --- arch/arm64/include/asm/el2_setup.h | 8 -------- arch/arm64/include/asm/kvm_arm.h | 3 +++ arch/arm64/kernel/head.S | 7 +++++++ arch/arm64/kvm/hyp/nvhe/hyp-init.S | 6 ++++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h index e62785923ff6..699154229b15 100644 --- a/arch/arm64/include/asm/el2_setup.h +++ b/arch/arm64/include/asm/el2_setup.h @@ -284,14 +284,6 @@ cbz x1, .Lskip_sme_\@ msr_s SYS_SMPRIMAP_EL2, xzr // Make all priorities equal - - mrs x1, id_aa64mmfr1_el1 // HCRX_EL2 present? - ubfx x1, x1, #ID_AA64MMFR1_EL1_HCX_SHIFT, #4 - cbz x1, .Lskip_sme_\@ - - mrs_s x1, SYS_HCRX_EL2 - orr x1, x1, #HCRX_EL2_SMPME_MASK // Enable priority mapping - msr_s SYS_HCRX_EL2, x1 .Lskip_sme_\@: .endm diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index 5a4b2342d571..caa31f4ab1cd 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -9,6 +9,7 @@ #include #include +#include #include /* Hyp Configuration Register (HCR) bits */ @@ -92,6 +93,8 @@ #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC) #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H) +#define HCRX_HOST_FLAGS (HCRX_EL2_SMPME) + /* TCR_EL2 Registers bits */ #define TCR_EL2_RES1 ((1U << 31) | (1 << 23)) #define TCR_EL2_TBI (1 << 20) diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 212d93aca5e6..e06b34322339 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -572,6 +572,13 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL) msr hcr_el2, x0 isb + mrs x0, ID_AA64MMFR1_EL1 + ubfx x0, x0, #ID_AA64MMFR1_EL1_HCX_SHIFT, #4 + cbz x0, 3f + mov_q x1, HCRX_HOST_FLAGS + msr_s SYS_HCRX_EL2, x1 + isb +3: init_el2_state /* Hypervisor stub */ diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S index a6d67c2bb5ae..01f854697c70 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S +++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S @@ -95,6 +95,12 @@ SYM_CODE_START_LOCAL(___kvm_hyp_init) ldr x1, [x0, #NVHE_INIT_HCR_EL2] msr hcr_el2, x1 + mrs x1, ID_AA64MMFR1_EL1 + ubfx x1, x1, #ID_AA64MMFR1_EL1_HCX_SHIFT, #4 + cbz x1, 1f + mov_q x2, HCRX_HOST_FLAGS + msr_s SYS_HCRX_EL2, x2 +1: ldr x1, [x0, #NVHE_INIT_VTTBR] msr vttbr_el2, x1 From patchwork Thu Feb 16 16:00:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58151 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp381501wrn; Thu, 16 Feb 2023 08:03:12 -0800 (PST) X-Google-Smtp-Source: AK7set9fv0HwPA/73JM3bQcBLJlDZOZ4BZzGvJ/HqgwfXe+wofGDJdlyynYq+BnBcI8yZKPTIg3s X-Received: by 2002:a17:906:9f25:b0:8b1:4d5f:fb83 with SMTP id fy37-20020a1709069f2500b008b14d5ffb83mr1953409ejc.15.1676563392316; Thu, 16 Feb 2023 08:03:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563392; cv=none; d=google.com; s=arc-20160816; b=cLDrpZqWbkQa1jZKAJiuQPw5SGQJ0kZSslZMMpzr7oEDqlJYuiBFeLZdD0adtwZyjm WRLRZOqU4OcCVWH0AQ1z9gsPQ0U22yVcpJaxwL6mVpsYrsg2CIEYe6tJWg8HzXfAic+X MrjrsYbUUuKqMUjn3n+U+nrENRpUGKfe4Uml4giK/eveuLK6wpvuQOWyEZKl/TCeW2os G3woRDl6oPBOaQa/ZvJB1NnCNDjjtEGQeZjeWXWh9mh8+B9srJ671W3REAMxAXO6FewM 17WKmDDbxEf4rmeLLJpfwMU9x0Z2VBwL4pEYP2aE2ZnLJ59TchXSzmEXBswfcdigl1ie AlFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qhvBf50uPp7fJSNgWcC/TLVMF6iX6DfnouHB1iSfZSY=; b=hYt7JYtnBQFYVaF02Subugr8jOqQGs1oux8PvOA5b22HMnj0V+nCUpEs4tlfBA+r2N xQEb6PC4sMRf2dyGyuytjN+tnN+YVYUq+A1wxH35ef+hV2nE5/9J6e4SK/M68B4VWlRF Y/FPPHlzizTtZqY6jxIM+K/bN6tHUgfhjtXOCXXa9P4c1PfGOsyzM2AXuM60xV65PrnJ WUa/toanJr0OXGk2g5d6FpmP5c/jraxK4+WFoDDxR3oZLUYsgiOHleaavdsBBnWDRBm1 ACBo4OmLQvZ0XzM5ySaxktsdicKVlxWUIaTRJ4Sigm39fGBwj4QHL/f0rU7W8HHlPI9U yoUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l4-20020a056402124400b004acbe0c6ffbsi2461914edw.482.2023.02.16.08.02.48; Thu, 16 Feb 2023 08:03:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229709AbjBPQBn (ORCPT + 99 others); Thu, 16 Feb 2023 11:01:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229630AbjBPQBg (ORCPT ); Thu, 16 Feb 2023 11:01:36 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5CD5C5355B for ; Thu, 16 Feb 2023 08:01:34 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D68F1168F; Thu, 16 Feb 2023 08:02:16 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 14FAD3F881; Thu, 16 Feb 2023 08:01:30 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 02/10] arm64: cpufeature: detect FEAT_HCX Date: Thu, 16 Feb 2023 16:00:04 +0000 Message-Id: <20230216160012.272345-3-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004135777118074?= X-GMAIL-MSGID: =?utf-8?q?1758004135777118074?= Detect if the system has the new HCRX_EL2 register added in ARMv8.7/9.2, so that subsequent patches can check for its presence. Signed-off-by: Kristina Martsenko Reviewed-by: Catalin Marinas --- arch/arm64/kernel/cpufeature.c | 12 ++++++++++++ arch/arm64/tools/cpucaps | 1 + 2 files changed, 13 insertions(+) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 45a42cf2191c..1b0a71541381 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -357,6 +357,7 @@ static const struct arm64_ftr_bits ftr_id_aa64mmfr0[] = { static const struct arm64_ftr_bits ftr_id_aa64mmfr1[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_TIDCP1_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_AFP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_HCX_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_ETS_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_TWED_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64MMFR1_EL1_XNX_SHIFT, 4, 0), @@ -2290,6 +2291,17 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .type = ARM64_CPUCAP_SYSTEM_FEATURE, .matches = is_kvm_protected_mode, }, + { + .desc = "HCRX_EL2 register", + .capability = ARM64_HAS_HCX, + .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .sys_reg = SYS_ID_AA64MMFR1_EL1, + .sign = FTR_UNSIGNED, + .field_pos = ID_AA64MMFR1_EL1_HCX_SHIFT, + .field_width = 4, + .min_field_value = ID_AA64MMFR1_EL1_HCX_IMP, + .matches = has_cpuid_feature, + }, #endif { .desc = "Kernel page table isolation (KPTI)", diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index 10dcfa13390a..bf32a1122c04 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -31,6 +31,7 @@ HAS_GENERIC_AUTH_IMP_DEF HAS_GIC_CPUIF_SYSREGS HAS_GIC_PRIO_MASKING HAS_GIC_PRIO_RELAXED_SYNC +HAS_HCX HAS_LDAPR HAS_LSE_ATOMICS HAS_NO_FPSIMD From patchwork Thu Feb 16 16:00:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58153 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp381718wrn; Thu, 16 Feb 2023 08:03:31 -0800 (PST) X-Google-Smtp-Source: AK7set8GMgQg18jxHd0h0cAB29aIzauw9lO2ewIkp6CWSu0acwFuGCgK5t2vJcmlr/j5P7EXU9j0 X-Received: by 2002:a17:906:dfd2:b0:877:7113:71f3 with SMTP id jt18-20020a170906dfd200b00877711371f3mr6456855ejc.25.1676563411395; Thu, 16 Feb 2023 08:03:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563411; cv=none; d=google.com; s=arc-20160816; b=MeHHeOaPW3XHBfMH+oXsMi/I5fUeMjt2dqe54eppWFip4imjt9Nsfcpb76uH2rpAUg 1NXmO8Nmzaj/0d/D49J4cf44UWVWtYsh5aJ6UnFVidzCvPRDwaeB6wlAeP+h6Ajahwmn A7Aj07BXwet/eHCeh8cBpUpduMNGad/YVp/Wz94/aNsk4k9osLjBarwFwQdSYF4SPfOy TKJdO8X8348qxRhbR8XKocQxRSM9cYeMCJGVvgNoE6zew9cHH81cujLTA+UJawH87Czr OUClsWlpFShgbDRL7XG1MI/3eJQf0xlHAgcHvzh0EK1YiD4bBB5IfMzH4Uz0Zln58Uw0 dHqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=dNrWzBmmZoGSGJu7G5pgcJxjy1NPJsEuJ+j+h0gX7Vo=; b=pKd3ImWz2qJcJnUwCKgRtaqZd9zEKjbFvGgvdf6pZFV3ISGohqghPpOY+tIbqnDenK rrbzZ02wRfpnxCOJi38HWZvQkaczNnFIHg1OcvBSJYajfYa+dVKqrngrnyAQjgkmVBf5 UGexsIMU32MpJCLSLmXx0E4rdCajJxciSOQiSA44dCXHLHeKED68QFZNzI6mUObAAOm2 3IP0+0B286zpj/4n91kI5788cJ4yDw3gPP+YAlFUV/EOxq/OhPa5spMJ9uP3EJB0QORR GkdsIU0PlVt+N6HC9ZpBJCcn3qJClnE0+0q1rHBX0cS94yYC9OQK1TUOT18K+dRtfp+W 6XpA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cq19-20020a170906d51300b008b14d614ed6si1880365ejc.472.2023.02.16.08.03.07; Thu, 16 Feb 2023 08:03:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229762AbjBPQBp (ORCPT + 99 others); Thu, 16 Feb 2023 11:01:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229672AbjBPQBl (ORCPT ); Thu, 16 Feb 2023 11:01:41 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4A39454548 for ; Thu, 16 Feb 2023 08:01:38 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 127B91042; Thu, 16 Feb 2023 08:02:21 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 37A003F881; Thu, 16 Feb 2023 08:01:35 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 03/10] KVM: arm64: switch HCRX_EL2 between host and guest Date: Thu, 16 Feb 2023 16:00:05 +0000 Message-Id: <20230216160012.272345-4-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004155237141114?= X-GMAIL-MSGID: =?utf-8?q?1758004155237141114?= Switch the HCRX_EL2 register between host and guest configurations, in order to enable different features in the host and guest. Note that the guest flags are only set if all CPUs have HCRX_EL2. Asymmetric systems where only some CPUs have HCRX_EL2 are not supported and will result in guests running with the host flags set (and a "SANITY CHECK" warning printed for the host). After this change, SMPME is no longer set for guests, which should have no effect as SME is currently disabled for guests. Signed-off-by: Kristina Martsenko --- I wasn't sure what to do about asymmetric systems. It seems a bit fragile, maybe someone has a better idea? arch/arm64/include/asm/kvm_arm.h | 1 + arch/arm64/kvm/hyp/include/hyp/switch.h | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index caa31f4ab1cd..cd8dd307aaba 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -93,6 +93,7 @@ #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC) #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H) +#define HCRX_GUEST_FLAGS 0 #define HCRX_HOST_FLAGS (HCRX_EL2_SMPME) /* TCR_EL2 Registers bits */ diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index 07d37ff88a3f..a1bf2d879db5 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -129,6 +129,9 @@ static inline void ___activate_traps(struct kvm_vcpu *vcpu) if (cpus_have_final_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE)) write_sysreg_s(vcpu->arch.vsesr_el2, SYS_VSESR_EL2); + + if (cpus_have_final_cap(ARM64_HAS_HCX)) + write_sysreg_s(HCRX_GUEST_FLAGS, SYS_HCRX_EL2); } static inline void ___deactivate_traps(struct kvm_vcpu *vcpu) @@ -143,6 +146,9 @@ static inline void ___deactivate_traps(struct kvm_vcpu *vcpu) vcpu->arch.hcr_el2 &= ~HCR_VSE; vcpu->arch.hcr_el2 |= read_sysreg(hcr_el2) & HCR_VSE; } + + if (cpus_have_final_cap(ARM64_HAS_HCX)) + write_sysreg_s(HCRX_HOST_FLAGS, SYS_HCRX_EL2); } static inline bool __populate_fault_info(struct kvm_vcpu *vcpu) From patchwork Thu Feb 16 16:00:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58155 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp381900wrn; Thu, 16 Feb 2023 08:03:47 -0800 (PST) X-Google-Smtp-Source: AK7set9tocH3mxZJ+Gw+KCUoah1gs5xaHEQcWAgIQOxExIZN0JOvQOEKiHLMojSiUOmdrVsoUYqe X-Received: by 2002:a17:907:a42a:b0:8b1:730b:a296 with SMTP id sg42-20020a170907a42a00b008b1730ba296mr1973701ejc.15.1676563427134; Thu, 16 Feb 2023 08:03:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563427; cv=none; d=google.com; s=arc-20160816; b=RWvWIb5LK/UWkEiLSN43rx2NIBJpwZn79qIKSEJuBn5f2rPkT3DlFfnY88HUdVMR0x +1ZAOPgozJjkvDhyl0/tuh/LOEQhj1cl5ZDOP4ZiS1+Cg986vxJWPrVG48y3PG9po3a6 GENT8tdWtGg9H9JE9vm6ITMD9f46fbA8ie0uahQx+iUs0wo2mPPoxK041XjohBkmGupg mbX4JCMNXk1VYajMBmG/wTyl3yFDKdAft1DHv076UB6HDzg1G2B04jAhY4KLQYMxVXfW v/4e4aeGyYW52xtBV5bz3J7+uNNe6/ym9lt48wGsnxakUo77XSTVrZwRccasOGCtbb82 aJIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=SgtbRMfdu5mp33Qy+rwd39uorsnF+c3KKGd2Sg7VTlI=; b=r4aENq1cYQoYIpVbqrD3/hMYXy+12Z6hheHM10xdX6MPrLYHLLftxpOTBPYn5Tje/8 IbdGEpRxzGxP8Ra6WtKBFWowRXXnm1NA3RIqtc1dkjD8RnvaxARGcsi3cLY6XhBFgxwf EnJPu6lylerExJcn4qyOzXhX8/F7KupKSx+opX/pnrOLe8UK6V1jInBVXubOKJSu8mph uPr2YxRgv/twP0z+6rZNZfKTuchYWm6bH/VAOmpaJuPBj3UTUDhZx53DY0hfgy+ChOpA ZUuQzwpnTwfrJt7YxTDugdqZzM9FKtjECDQ8KpmPzcPE2d3YNww4T/AydHN4Q6Y/yL5E PgCQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ep11-20020a1709069b4b00b008786508e28csi2018494ejc.1005.2023.02.16.08.03.08; Thu, 16 Feb 2023 08:03:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229929AbjBPQBz (ORCPT + 99 others); Thu, 16 Feb 2023 11:01:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59602 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229608AbjBPQBv (ORCPT ); Thu, 16 Feb 2023 11:01:51 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D568D59B78 for ; Thu, 16 Feb 2023 08:01:42 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 432C5113E; Thu, 16 Feb 2023 08:02:25 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5D02B3F881; Thu, 16 Feb 2023 08:01:39 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 04/10] arm64: mops: document boot requirements for MOPS Date: Thu, 16 Feb 2023 16:00:06 +0000 Message-Id: <20230216160012.272345-5-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004171840802605?= X-GMAIL-MSGID: =?utf-8?q?1758004171840802605?= FEAT_MOPS introduces new instructions, we require that these instructions not execute as UNDEFINED when we identify that the feature is supported. Additionally, the instructions may generate a Memory Copy or Memory Set exception, we require that the exception be taken to EL1 in case EL2 is not able to correctly handle it. Signed-off-by: Kristina Martsenko --- Documentation/arm64/booting.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/arm64/booting.rst b/Documentation/arm64/booting.rst index ffeccdd6bdac..f3913ee94c42 100644 --- a/Documentation/arm64/booting.rst +++ b/Documentation/arm64/booting.rst @@ -379,6 +379,14 @@ Before jumping into the kernel, the following conditions must be met: - SMCR_EL2.EZT0 (bit 30) must be initialised to 0b1. + For CPUs with Memory Copy and Memory Set instructions (FEAT_MOPS): + + - If the kernel is entered at EL1 and EL2 is present: + + - HCRX_EL2.MSCEn (bit 11) must be initialised to 0b1. + + - HCRX_EL2.MCE2 (bit 10) must be initialised to 0b0. + The requirements described above for CPU mode, caches, MMUs, architected timers, coherency and system registers apply to all CPUs. All CPUs must enter the kernel in the same exception level. Where the values documented From patchwork Thu Feb 16 16:00:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58159 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp383819wrn; Thu, 16 Feb 2023 08:06:26 -0800 (PST) X-Google-Smtp-Source: AK7set+GX3phknrQRojubMgax/e+HiKozKvB5pUhDFX5gsJzew01WoJpFUX2asG38n+3rBLcMLzh X-Received: by 2002:a17:902:d485:b0:199:2932:615e with SMTP id c5-20020a170902d48500b001992932615emr7773267plg.18.1676563585864; Thu, 16 Feb 2023 08:06:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563585; cv=none; d=google.com; s=arc-20160816; b=iyQayw2aiO7qVMlKSK+5pbGfwliROytk5ua0CmCZLJijj+pStCGa++aruYQjirNFvB FFvdOjcZaHa1z26Oz9LZRGA82sVGWoXIZaBSSJW0iZziRkU9jycT6BFYJWXEmkUY6Uf0 42e570mO/ZYX1HMGoxJEvX/s5KA7LDcqpOmZcZ6JQO0/FaDoovDGnON5eRAzvC/hBsZE 5vUffwrVkkUa9QAOgs7yQIyF4hZDf++yFkglYub7DXtmxFdl4Z7iOYHVS+bqLanFsx0L JuRiFZKiGhm6AwjHZLACg1CPij0/xhB8jG4e0+4rUT4Icg6FF0+KH0rxZtW0UtJiBV62 ETAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=NFysGTpr3R7WwLxGKRIlwN5irm/01kvas0mrJHiDQ4Y=; b=cP6ww7Zw0GDUqoYVjGj5ZwTBter4ysc9t3PidGfeBQVOe+1zGOUEsKMtulLTOhmFGN /FeXuP2XdgAE2eY3dAh5nz/9qJxmh3SoGjw+q/clU/PtsW3VZdZuR0vAady8US1nMQh8 CXSJbgb4UZ3bm7YcGqFhFDtfRfYV06UEHjqqds0FZEBbfUavrEVcfYejyogqWiWxqZUo GireyC0Gq1w6ZoVKPs1gTPq6LmLFXeziKdO7tlyLIB1KhnHFJolA89TtS7sM7ZoZ85En kWTUQWzcx6AHu+PwQ7fD1MtXc1u9ftiyUUUuOH3cfQviXZW+PrhK5QqRlgeujqFigkBo TnPg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z18-20020a170903019200b0019ab2f00b90si2156779plg.171.2023.02.16.08.06.12; Thu, 16 Feb 2023 08:06:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230101AbjBPQB6 (ORCPT + 99 others); Thu, 16 Feb 2023 11:01:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229719AbjBPQBv (ORCPT ); Thu, 16 Feb 2023 11:01:51 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C45AD564A8 for ; Thu, 16 Feb 2023 08:01:46 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 41809168F; Thu, 16 Feb 2023 08:02:29 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7424F3F881; Thu, 16 Feb 2023 08:01:43 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 05/10] arm64: mops: don't disable host MOPS instructions from EL2 Date: Thu, 16 Feb 2023 16:00:07 +0000 Message-Id: <20230216160012.272345-6-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004338540317470?= X-GMAIL-MSGID: =?utf-8?q?1758004338540317470?= To allow nVHE host EL0 and EL1 to use FEAT_MOPS instructions, configure EL2 to not cause these instructions to be treated as UNDEFINED. A VHE host is unaffected by this control. Signed-off-by: Kristina Martsenko Reviewed-by: Catalin Marinas --- arch/arm64/include/asm/kvm_arm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index cd8dd307aaba..f37d37957322 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -94,7 +94,7 @@ #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H) #define HCRX_GUEST_FLAGS 0 -#define HCRX_HOST_FLAGS (HCRX_EL2_SMPME) +#define HCRX_HOST_FLAGS (HCRX_EL2_SMPME | HCRX_EL2_MSCEn) /* TCR_EL2 Registers bits */ #define TCR_EL2_RES1 ((1U << 31) | (1 << 23)) From patchwork Thu Feb 16 16:00:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58156 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp383044wrn; Thu, 16 Feb 2023 08:05:22 -0800 (PST) X-Google-Smtp-Source: AK7set+zxKeoLTDdsMxR/hBGmMlGCpAiMvAKSFSKf1rUVYWc3FXUEbxtkdskiEWy0oPz48k9Sr/8 X-Received: by 2002:a17:906:8306:b0:8b1:1f2d:ecf1 with SMTP id j6-20020a170906830600b008b11f2decf1mr7008357ejx.67.1676563522490; Thu, 16 Feb 2023 08:05:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563522; cv=none; d=google.com; s=arc-20160816; b=FPxALivGdjMrqo49bqv/DXOx7FhZh/KNlxblNPj68vj0bOjyP6brqt5I4zig+L4dlr l9ulPexOqT97hVuEHywOgrVEQAgBPGeY1BxSp27Sr5X0772QQGnQsE3IXoUjjQJZdUYJ Nsu9mM994C+WAvUAd6Dq1Zqh8tAWRVpD+0rkVyaS3NzXBi8qTzAEtouz+1i8I2bMcikj cJsQMmiEDiVNGxWPXrBELV3GPbp5oUJ41DcPuPwgbMFVjZKiOzgC5pK4K7F+j/Zc5I7F JNAnODGNDSqukT6xWf9uWCNXytWWwD/DS0ervB7w/KH6puDhWlROY5Vkc+I/uILzRefQ +Vzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=hlcDx/UTKs2e1olbAGvC+CALi/yHG38ejl0YWhaliz8=; b=CylkuDBHHz01sSEkbo9n78RYdEz41baOMWMQU0JsPU7JanXAK/zx44JyohPvMr9B0H f3DjFW/Ie/QWXnwaB6Y+Xi9R6be6M/pgwuukI8nqA9kB8r8TXPFKtVl/EYH6ZXAv84TV 26lY5VtWrJ+a6MQWGzB48VNC0EFN+qXU1FJcrTKh8fjDfzb1tN3oCcdWWOtgZYqoRPFS zEVDB/6Ub1o4QVH/Kq4CNfk4CvKEdluCguBlL+Tu34nAC/9sbmprPxnP9BEfNDCwwHUy GtmzBra4VrMdU6jKiV4QogGciLEnTNfvpz1p1pepLPMQ1QWqmusx4IM8vAoTXlzXzkv9 4Now== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id eq23-20020a170907291700b008b123cf1570si1747540ejc.243.2023.02.16.08.04.58; Thu, 16 Feb 2023 08:05:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229608AbjBPQCE (ORCPT + 99 others); Thu, 16 Feb 2023 11:02:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229658AbjBPQBy (ORCPT ); Thu, 16 Feb 2023 11:01:54 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9A4B9564B7 for ; Thu, 16 Feb 2023 08:01:50 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0DD0A1042; Thu, 16 Feb 2023 08:02:33 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6E66D3F881; Thu, 16 Feb 2023 08:01:47 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 06/10] KVM: arm64: hide MOPS from guests Date: Thu, 16 Feb 2023 16:00:08 +0000 Message-Id: <20230216160012.272345-7-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004272182194299?= X-GMAIL-MSGID: =?utf-8?q?1758004272182194299?= As FEAT_MOPS is not supported in guests yet, hide it from the ID registers for guests. The MOPS instructions are UNDEFINED in guests as HCRX_EL2.MSCEn is not set in HCRX_GUEST_FLAGS, and will take an exception to EL1 if executed. Signed-off-by: Kristina Martsenko Acked-by: Catalin Marinas --- arch/arm64/kvm/sys_regs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 0bc7df55916e..3456205c6b92 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1213,6 +1213,7 @@ static u64 read_id_reg(const struct kvm_vcpu *vcpu, struct sys_reg_desc const *r ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3)); if (!cpus_have_final_cap(ARM64_HAS_WFXT)) val &= ~ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_WFxT); + val &= ~ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_MOPS); break; case SYS_ID_AA64DFR0_EL1: /* Limit debug to ARMv8.0 */ From patchwork Thu Feb 16 16:00:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58157 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp383599wrn; Thu, 16 Feb 2023 08:06:07 -0800 (PST) X-Google-Smtp-Source: AK7set9ewhBnz88FNudLqmYPDiGS2UtgFBK6dRwms5CeT9GKu4zuSe6LdbQ1XqfJe+MVqlQPaLpU X-Received: by 2002:a17:906:a84a:b0:8af:370b:da59 with SMTP id dx10-20020a170906a84a00b008af370bda59mr7183962ejb.17.1676563567848; Thu, 16 Feb 2023 08:06:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563567; cv=none; d=google.com; s=arc-20160816; b=LjXif0srijQY7K86iI1eq+IovTY3JLK8vxq7BO0nYIq7JDJw8tsXNvslQHdNAgHRJ2 AsuNS1cSNePElBpYox0qim38WUbiMpzjhHJgGP3tbQgMs08M+GGbF4ZFPY/924qxwQrh KukSg8Mut7WcaIWNkDXm7xGGRHFun8buD9wP9XuwBv2HlRt7wOClro1o4a8/5LxAOOas ZYCCq2o6E5vSsoBXNeUHfInFo4oLVhTVdc+8LZFryTcYWexRl1BlhWZIcUo4r6LoVVPO FuWVR7tEwXsQ8NHdLdE51eGUBbNLrk++n1Zzurb0jg9IXlAzi9+hg47Q0BoQF18f1qOw VaEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=8tCVCZmK2IYEpD2Zvc6s5ajUqZ5YZqtqCzMIhDVvdds=; b=aXPT1PW3yPTULkV+ZoFtQYBjzPnP+961pUYIh47Wl26d48UwITSUiXy+T81RyJEmf2 8amTm+tYYEe72TMX4+0K1KJQ0R5b5ExBnh3HpduSagbYW8Sz698uJgJBhGIX4a8yhwZs EybhqmPm5Mi1eu50V/va5wP98Z3JDjakJ/0VRW3Fgo7WKVrMKBhmsRR2SJ2WYA7LQLK6 YumbJwD1IjC8Z3sMO4r0p0Nrj01d1uM7E+tgCXsS9HwA7DdgcFHSfMPMgSJJe0i7nSoS +nqmlC46LNCDnxBQykfO32S/qSlieGepqqDoaohcGhVPg++VrU7SlTZuYXJ6LggnhU9B CXUA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mt23-20020a170907619700b008b178b41ec1si635875ejc.284.2023.02.16.08.05.13; Thu, 16 Feb 2023 08:06:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229723AbjBPQCR (ORCPT + 99 others); Thu, 16 Feb 2023 11:02:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229921AbjBPQCD (ORCPT ); Thu, 16 Feb 2023 11:02:03 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 700BF56EFE for ; Thu, 16 Feb 2023 08:01:54 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E7996113E; Thu, 16 Feb 2023 08:02:36 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 25CE73F881; Thu, 16 Feb 2023 08:01:51 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 07/10] arm64: mops: handle MOPS exceptions Date: Thu, 16 Feb 2023 16:00:09 +0000 Message-Id: <20230216160012.272345-8-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004319741800571?= X-GMAIL-MSGID: =?utf-8?q?1758004319741800571?= The memory copy/set instructions added as part of FEAT_MOPS can take an exception part-way through their execution and resume execution afterwards. If however the task is re-scheduled and execution resumes on a different CPU, then the CPU may take a new type of exception to indicate this. In this case the OS has to reset the registers and restart execution from the prologue instruction. The algorithm for doing this is provided as part of the Arm ARM. Add an exception handler for the new exception and wire it up for userspace tasks. Signed-off-by: Kristina Martsenko Reviewed-by: Catalin Marinas --- arch/arm64/include/asm/esr.h | 11 +++++++- arch/arm64/include/asm/exception.h | 1 + arch/arm64/kernel/entry-common.c | 11 ++++++++ arch/arm64/kernel/traps.c | 45 ++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index c9f15b9e3c71..96caaaee97a3 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -47,7 +47,7 @@ #define ESR_ELx_EC_DABT_LOW (0x24) #define ESR_ELx_EC_DABT_CUR (0x25) #define ESR_ELx_EC_SP_ALIGN (0x26) -/* Unallocated EC: 0x27 */ +#define ESR_ELx_EC_MOPS (0x27) #define ESR_ELx_EC_FP_EXC32 (0x28) /* Unallocated EC: 0x29 - 0x2B */ #define ESR_ELx_EC_FP_EXC64 (0x2C) @@ -352,6 +352,15 @@ #define ESR_ELx_SME_ISS_ZA_DISABLED 3 #define ESR_ELx_SME_ISS_ZT_DISABLED 4 +/* ISS field definitions for MOPS exceptions */ +#define ESR_ELx_MOPS_ISS_MEM_INST (UL(1) << 24) +#define ESR_ELx_MOPS_ISS_FROM_EPILOGUE (UL(1) << 18) +#define ESR_ELx_MOPS_ISS_WRONG_OPTION (UL(1) << 17) +#define ESR_ELx_MOPS_ISS_OPTION_A (UL(1) << 16) +#define ESR_ELx_MOPS_ISS_DESTREG(esr) (((esr) & (UL(0x1f) << 10)) >> 10) +#define ESR_ELx_MOPS_ISS_SRCREG(esr) (((esr) & (UL(0x1f) << 5)) >> 5) +#define ESR_ELx_MOPS_ISS_SIZEREG(esr) (((esr) & (UL(0x1f) << 0)) >> 0) + #ifndef __ASSEMBLY__ #include diff --git a/arch/arm64/include/asm/exception.h b/arch/arm64/include/asm/exception.h index 92963f98afec..5a6dc3643e9b 100644 --- a/arch/arm64/include/asm/exception.h +++ b/arch/arm64/include/asm/exception.h @@ -77,6 +77,7 @@ void do_el0_svc(struct pt_regs *regs); void do_el0_svc_compat(struct pt_regs *regs); void do_el0_fpac(struct pt_regs *regs, unsigned long esr); void do_el1_fpac(struct pt_regs *regs, unsigned long esr); +void do_el0_mops(struct pt_regs *regs, unsigned long esr); void do_serror(struct pt_regs *regs, unsigned long esr); void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags); diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c index cce1167199e3..2ef3ab5d7555 100644 --- a/arch/arm64/kernel/entry-common.c +++ b/arch/arm64/kernel/entry-common.c @@ -611,6 +611,14 @@ static void noinstr el0_bti(struct pt_regs *regs) exit_to_user_mode(regs); } +static void noinstr el0_mops(struct pt_regs *regs, unsigned long esr) +{ + enter_from_user_mode(regs); + local_daif_restore(DAIF_PROCCTX); + do_el0_mops(regs, esr); + exit_to_user_mode(regs); +} + static void noinstr el0_inv(struct pt_regs *regs, unsigned long esr) { enter_from_user_mode(regs); @@ -688,6 +696,9 @@ asmlinkage void noinstr el0t_64_sync_handler(struct pt_regs *regs) case ESR_ELx_EC_BTI: el0_bti(regs); break; + case ESR_ELx_EC_MOPS: + el0_mops(regs, esr); + break; case ESR_ELx_EC_BREAKPT_LOW: case ESR_ELx_EC_SOFTSTP_LOW: case ESR_ELx_EC_WATCHPT_LOW: diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 0ccc063daccb..689188712909 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -507,6 +507,50 @@ void do_el1_fpac(struct pt_regs *regs, unsigned long esr) die("Oops - FPAC", regs, esr); } +void do_el0_mops(struct pt_regs *regs, unsigned long esr) +{ + bool wrong_option = esr & ESR_ELx_MOPS_ISS_WRONG_OPTION; + bool option_a = esr & ESR_ELx_MOPS_ISS_OPTION_A; + int dstreg = ESR_ELx_MOPS_ISS_DESTREG(esr); + int srcreg = ESR_ELx_MOPS_ISS_SRCREG(esr); + int sizereg = ESR_ELx_MOPS_ISS_SIZEREG(esr); + unsigned long dst, src, size; + + dst = pt_regs_read_reg(regs, dstreg); + src = pt_regs_read_reg(regs, srcreg); + size = pt_regs_read_reg(regs, sizereg); + + /* + * Put the registers back in the original format suitable for a + * prologue instruction, using the generic return routine from the + * Arm ARM (DDI 0487I.a) rules CNTMJ and MWFQH. + */ + if (esr & ESR_ELx_MOPS_ISS_MEM_INST) { + if ((!option_a && wrong_option) || (option_a && !wrong_option)) { + pt_regs_write_reg(regs, dstreg, dst + size); + pt_regs_write_reg(regs, sizereg, -size); + } + } else { + if ((option_a && wrong_option) || (!option_a && !wrong_option)) { + if (regs->pstate & PSR_N_BIT) { + pt_regs_write_reg(regs, dstreg, dst - size); + pt_regs_write_reg(regs, srcreg, src - size); + } + } else { + if (size & BIT(63)) { + pt_regs_write_reg(regs, dstreg, dst + size); + pt_regs_write_reg(regs, srcreg, src + size); + pt_regs_write_reg(regs, sizereg, -size); + } + } + } + + if (esr & ESR_ELx_MOPS_ISS_FROM_EPILOGUE) + regs->pc -= 8; + else + regs->pc -= 4; +} + #define __user_cache_maint(insn, address, res) \ if (address >= TASK_SIZE_MAX) { \ res = -EFAULT; \ @@ -817,6 +861,7 @@ static const char *esr_class_str[] = { [ESR_ELx_EC_DABT_LOW] = "DABT (lower EL)", [ESR_ELx_EC_DABT_CUR] = "DABT (current EL)", [ESR_ELx_EC_SP_ALIGN] = "SP Alignment", + [ESR_ELx_EC_MOPS] = "MOPS", [ESR_ELx_EC_FP_EXC32] = "FP (AArch32)", [ESR_ELx_EC_FP_EXC64] = "FP (AArch64)", [ESR_ELx_EC_SERROR] = "SError", From patchwork Thu Feb 16 16:00:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58158 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp383645wrn; Thu, 16 Feb 2023 08:06:12 -0800 (PST) X-Google-Smtp-Source: AK7set8FTzMbOgbCuaONgBJh6UY2djESnlSgQ8WW6DOfm/m2Js/J5nrDtQirT5DjSSLuKt0UpsIc X-Received: by 2002:a05:6a20:c114:b0:bf:1769:347f with SMTP id bh20-20020a056a20c11400b000bf1769347fmr4647950pzb.47.1676563572433; Thu, 16 Feb 2023 08:06:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563572; cv=none; d=google.com; s=arc-20160816; b=Odd4QeUlGu1ObcRRyib17RnABbPCWYpiFQlB/orZu5IHXReydvTXYbPUmSnZAfOLH8 1nG0dzYd/vuBfFcmBFHGJpCk1P4ntolOsoVuXfxY4syESvlDnjBZRm8Wpsq3BLwHWBzN 115DnoyCbibqiIDiLT/FUv0LaulXDkbRgf8DLSEyC2cEFOdBx22KvswLaYqwGGGkKH6b WqhWOxGlrwy7aDjz4zUocbFmWYYtHu9GRkoWmSfZUVzZyTRhalGo0vIcMGjDBmx82l+4 qEaUqFNyfCenzsFY25a+Y+w3/4HEdc+qQRT5mTnp94Lvc1mlbQNiJ71J63QOkJL0EoeT eQaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=vAG0Xo7PUAt5X7FhIvAFjKRtLwBMcJLcz28JoXpK1UU=; b=dCENZ6BpbX6AwnlfzvjkY0/vjsADkMZ1JiWh2WdO+SVoM+tezXE03Gnli3/SvK8VJb ob/PA/j7iyOOD6CittygrEgZntvj6sKymErDmzoTt45EHKPkAgkGZ3wvreZ9cXnCaFdo ycfDKhmQuELK9HAS7ZqiQtLS47UXY/199xGXu+w0nc+MjITdbBVp7kntEyHipXVhKPZ2 egUsoAyVpj77NWYKTbhSjHuynhmk2LOyn7BLyEUD/bfN1q8MJPx9WPGLAvgKtYCIKUeX rByqzc8GItS62LGDRMxnvy8OAZb0OzKmMmZl+3GGHESWPQRxLp9EOqL47/ZyXgeQ8bGt 8KCA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u63-20020a638542000000b004fbba63b11dsi444418pgd.542.2023.02.16.08.05.58; Thu, 16 Feb 2023 08:06:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229664AbjBPQCZ (ORCPT + 99 others); Thu, 16 Feb 2023 11:02:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229820AbjBPQCO (ORCPT ); Thu, 16 Feb 2023 11:02:14 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B738585F5E for ; Thu, 16 Feb 2023 08:01:58 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3CBD21042; Thu, 16 Feb 2023 08:02:41 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3DA033F881; Thu, 16 Feb 2023 08:01:55 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 08/10] arm64: mops: handle single stepping after MOPS exception Date: Thu, 16 Feb 2023 16:00:10 +0000 Message-Id: <20230216160012.272345-9-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004324389971301?= X-GMAIL-MSGID: =?utf-8?q?1758004324389971301?= When a MOPS main or epilogue instruction is being executed, the task may get scheduled on a different CPU and restart execution from the prologue instruction. If the main or epilogue instruction is being single stepped then it makes sense to finish the step and take the step exception before starting to execute the next (prologue) instruction. So fast-forward the single step state machine when taking a MOPS exception. This means that if a main or epilogue instruction is single stepped with ptrace, the debugger will sometimes observe the PC moving back to the prologue instruction. (As already mentioned, this should be rare as it only happens when the task is scheduled to another CPU during the step.) This also ensures that perf breakpoints count prologue instructions consistently (i.e. every time they are executed), rather than skipping them when there also happens to be a breakpoint on a main or epilogue instruction. Signed-off-by: Kristina Martsenko Acked-by: Catalin Marinas --- arch/arm64/kernel/traps.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 689188712909..3dfc901a430b 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -549,6 +549,12 @@ void do_el0_mops(struct pt_regs *regs, unsigned long esr) regs->pc -= 8; else regs->pc -= 4; + + /* + * If single stepping then finish the step before executing the + * prologue instruction. + */ + user_fastforward_single_step(current); } #define __user_cache_maint(insn, address, res) \ From patchwork Thu Feb 16 16:00:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58160 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp383965wrn; Thu, 16 Feb 2023 08:06:38 -0800 (PST) X-Google-Smtp-Source: AK7set/k2VmZzF0izu2VOEvU9N0NObrSUvVbg5fNtwJ7DKkiPgmKn6KH3PTRG3kV50o7yIkxtNrJ X-Received: by 2002:a17:90b:1c08:b0:234:5e7d:6d27 with SMTP id oc8-20020a17090b1c0800b002345e7d6d27mr6847253pjb.42.1676563598233; Thu, 16 Feb 2023 08:06:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563598; cv=none; d=google.com; s=arc-20160816; b=SEi4WpCS9q1MiD8D7PFsf8s+BcKxy7zpLl+h+IjoutwKpBG+vsbT77zP7qkfd6JM3U ssilNfhIGEmiG1EKOjEfQpmZqYtd4+uBmADGN0LwabqLCUiAq4dz2QlwzoNpy+kkPCk6 t93bZYCGz2Ow/m/JZ/EIVE1BxUxIeHxz0R7rd52wi/qUW2/wbXp+W6kCbm9q2WNoGYDo KfZCoHcIVcSwwOclBzATj13NkVLz+5DTv3H2SaUPdV1A6Cn0bcA7/Glm6T6032Yt0d3v OPLLE32oIIpdiNVd8dbh3B5Hbg3XSpvxCH3inI84JXCwHyxnGRG72WjEsZtx33G/tyt0 dv2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=jbOH3gLssVMx84Cs+lRR/W7H+OWTwHe1mZx8rqqb2Eo=; b=DuaZZPkV0alnlVmTsXxmxGOEQYYN1v7UaoOalbsE4ReLx+h2rt5zPOtpOt97027eR4 5jM2Y5u4vW6d7E9J6V3d8NntIMvGmF+sEdDJSPMH4CqOWKg+Mi1EnnpWQP9TfmesmHbk 1cjQOVHGO9bZW6MK16tDQoeZ7i2uJC/YoJBk6X1ewSfPrhj+xGKiiSDiER+AZY4840MY xVU0fiQKM7JaE7e5EXoL40APnlMOvbU62bys/VyEB43wjLzlbs3omidkfp8dPc9UBAPv KhA2rv2mWjrRwKL04xhKWiUFPCiAh7H/XB7KRJR6Mg4Fkl8I0PVPl8mzbIY1bxMy17eA R4uQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y23-20020a17090a105700b002340e5003e8si1857064pjd.45.2023.02.16.08.06.25; Thu, 16 Feb 2023 08:06:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229872AbjBPQCa (ORCPT + 99 others); Thu, 16 Feb 2023 11:02:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229635AbjBPQCS (ORCPT ); Thu, 16 Feb 2023 11:02:18 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 0681185F56 for ; Thu, 16 Feb 2023 08:02:02 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CCA3B168F; Thu, 16 Feb 2023 08:02:44 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6DC973F881; Thu, 16 Feb 2023 08:01:59 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 09/10] arm64: mops: detect and enable FEAT_MOPS Date: Thu, 16 Feb 2023 16:00:11 +0000 Message-Id: <20230216160012.272345-10-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004351330553380?= X-GMAIL-MSGID: =?utf-8?q?1758004351330553380?= The Arm v8.8/9.3 FEAT_MOPS feature provides new instructions that perform a memory copy or set. Wire up the cpufeature code to detect the presence of FEAT_MOPS and enable it. Signed-off-by: Kristina Martsenko Reviewed-by: Catalin Marinas --- Documentation/arm64/cpu-feature-registers.rst | 2 ++ Documentation/arm64/elf_hwcaps.rst | 3 +++ arch/arm64/include/asm/hwcap.h | 1 + arch/arm64/include/uapi/asm/hwcap.h | 1 + arch/arm64/kernel/cpufeature.c | 19 +++++++++++++++++++ arch/arm64/kernel/cpuinfo.c | 1 + arch/arm64/tools/cpucaps | 1 + 7 files changed, 28 insertions(+) diff --git a/Documentation/arm64/cpu-feature-registers.rst b/Documentation/arm64/cpu-feature-registers.rst index c7adc7897df6..4e4625f2455f 100644 --- a/Documentation/arm64/cpu-feature-registers.rst +++ b/Documentation/arm64/cpu-feature-registers.rst @@ -288,6 +288,8 @@ infrastructure: +------------------------------+---------+---------+ | Name | bits | visible | +------------------------------+---------+---------+ + | MOPS | [19-16] | y | + +------------------------------+---------+---------+ | RPRES | [7-4] | y | +------------------------------+---------+---------+ | WFXT | [3-0] | y | diff --git a/Documentation/arm64/elf_hwcaps.rst b/Documentation/arm64/elf_hwcaps.rst index 83e57e4d38e2..8f847d0dcf57 100644 --- a/Documentation/arm64/elf_hwcaps.rst +++ b/Documentation/arm64/elf_hwcaps.rst @@ -302,6 +302,9 @@ HWCAP2_SMEB16B16 HWCAP2_SMEF16F16 Functionality implied by ID_AA64SMFR0_EL1.F16F16 == 0b1 +HWCAP2_MOPS + Functionality implied by ID_AA64ISAR2_EL1.MOPS == 0b0001. + 4. Unused AT_HWCAP bits ----------------------- diff --git a/arch/arm64/include/asm/hwcap.h b/arch/arm64/include/asm/hwcap.h index 5d45f19fda7f..692b1ec663b2 100644 --- a/arch/arm64/include/asm/hwcap.h +++ b/arch/arm64/include/asm/hwcap.h @@ -137,6 +137,7 @@ #define KERNEL_HWCAP_SME_BI32I32 __khwcap2_feature(SME_BI32I32) #define KERNEL_HWCAP_SME_B16B16 __khwcap2_feature(SME_B16B16) #define KERNEL_HWCAP_SME_F16F16 __khwcap2_feature(SME_F16F16) +#define KERNEL_HWCAP_MOPS __khwcap2_feature(MOPS) /* * This yields a mask that user programs can use to figure out what diff --git a/arch/arm64/include/uapi/asm/hwcap.h b/arch/arm64/include/uapi/asm/hwcap.h index 69a4fb749c65..a2cac4305b1e 100644 --- a/arch/arm64/include/uapi/asm/hwcap.h +++ b/arch/arm64/include/uapi/asm/hwcap.h @@ -102,5 +102,6 @@ #define HWCAP2_SME_BI32I32 (1UL << 40) #define HWCAP2_SME_B16B16 (1UL << 41) #define HWCAP2_SME_F16F16 (1UL << 42) +#define HWCAP2_MOPS (1UL << 43) #endif /* _UAPI__ASM_HWCAP_H */ diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 1b0a71541381..70a08b2ddaa6 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -216,6 +216,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar2[] = { ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_CSSC_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_RPRFM_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64ISAR2_EL1_BC_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_MOPS_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), FTR_STRICT, FTR_EXACT, ID_AA64ISAR2_EL1_APA3_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), @@ -2158,6 +2159,11 @@ static void cpu_enable_dit(const struct arm64_cpu_capabilities *__unused) set_pstate_dit(1); } +static void cpu_enable_mops(const struct arm64_cpu_capabilities *__unused) +{ + sysreg_clear_set(sctlr_el1, 0, SCTLR_EL1_MSCEn); +} + /* Internal helper functions to match cpu capability type */ static bool cpucap_late_cpu_optional(const struct arm64_cpu_capabilities *cap) @@ -2759,6 +2765,18 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .matches = has_cpuid_feature, .cpu_enable = cpu_enable_dit, }, + { + .desc = "Memory Copy and Memory Set instructions", + .capability = ARM64_HAS_MOPS, + .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .sys_reg = SYS_ID_AA64ISAR2_EL1, + .sign = FTR_UNSIGNED, + .field_pos = ID_AA64ISAR2_EL1_MOPS_SHIFT, + .field_width = 4, + .min_field_value = ID_AA64ISAR2_EL1_MOPS_IMP, + .matches = has_cpuid_feature, + .cpu_enable = cpu_enable_mops, + }, {}, }; @@ -2891,6 +2909,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = { HWCAP_CAP(ID_AA64ISAR2_EL1, RPRFM, IMP, CAP_HWCAP, KERNEL_HWCAP_RPRFM), HWCAP_CAP(ID_AA64ISAR2_EL1, RPRES, IMP, CAP_HWCAP, KERNEL_HWCAP_RPRES), HWCAP_CAP(ID_AA64ISAR2_EL1, WFxT, IMP, CAP_HWCAP, KERNEL_HWCAP_WFXT), + HWCAP_CAP(ID_AA64ISAR2_EL1, MOPS, IMP, CAP_HWCAP, KERNEL_HWCAP_MOPS), #ifdef CONFIG_ARM64_SME HWCAP_CAP(ID_AA64PFR1_EL1, SME, IMP, CAP_HWCAP, KERNEL_HWCAP_SME), HWCAP_CAP(ID_AA64SMFR0_EL1, FA64, IMP, CAP_HWCAP, KERNEL_HWCAP_SME_FA64), diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c index eb4378c23b3c..076a124255d0 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -125,6 +125,7 @@ static const char *const hwcap_str[] = { [KERNEL_HWCAP_SME_BI32I32] = "smebi32i32", [KERNEL_HWCAP_SME_B16B16] = "smeb16b16", [KERNEL_HWCAP_SME_F16F16] = "smef16f16", + [KERNEL_HWCAP_MOPS] = "mops", }; #ifdef CONFIG_COMPAT diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index bf32a1122c04..5018da44def2 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -34,6 +34,7 @@ HAS_GIC_PRIO_RELAXED_SYNC HAS_HCX HAS_LDAPR HAS_LSE_ATOMICS +HAS_MOPS HAS_NO_FPSIMD HAS_NO_HW_PREFETCH HAS_PAN From patchwork Thu Feb 16 16:00:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 58161 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp384229wrn; Thu, 16 Feb 2023 08:07:02 -0800 (PST) X-Google-Smtp-Source: AK7set812j2saP4apIdwcJLN6ivR0AGW/ia2vPqxSEx/Zd9g5soMTE1BREtPc/pl6/SzE1MPkbBY X-Received: by 2002:a05:6a20:441b:b0:c0:af73:be4d with SMTP id ce27-20020a056a20441b00b000c0af73be4dmr7780873pzb.54.1676563622331; Thu, 16 Feb 2023 08:07:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676563622; cv=none; d=google.com; s=arc-20160816; b=v4p4L/q/Na3ojGzWgUoqKsGWsHpEN30NO4misf+soAcVHoKRp79Hwkdp1gGvFqKrj/ Wtowxog6i68hAIYpdywhr3DZSc6qGLwD64QKYa4+TthDVMWvMfFNI/y1TdPnQluxLdhw LXZIrn2D24F5Ljp3Sjhdyu7Eg+ldLxOUKVFusbV0pdfDFzhpTkl+KG++32aw9MRtb1ew 2/WCaMmLNzuU0UbqI3rKfI9IISXlOGYzJaik1HHEyZ/Wd6Q7cQLZB5JV6XpNsQHgPdNW FF+gRvjO39f6h7gFLgeJfLahbn/5H5q8RZiXLX1krEQKK1i9ITx5KAD33IzPL0tqJ+mV uFKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=z3+jhmjVOzt2fz+RPp7jnzILZWMF/tm7dwW34XORRVk=; b=dvRMyyUpp32dyP0jN4nR8IyImzOTguuV1zOlw+kFyR2q4O+jr7Ga64DydHt7y3nP+C HBGF1X2RdGRheEJiZEYkXSV8VTIYG39GrZFxiDjkum5KMU3EYUT1I0qxLrYhkNatt/qp GKde5Yw9K6SW5/ChMC3BTqkDNXZo7o9OLzwUOWJIV6KGAj9B6oH8KukFOPcTW1ZH/a65 l2Cs/sN2M3gkz+GwGbPOx2ELJaAxEArYDPogt9aC9KjV0D75su/e22y08Ao8r6Ab8ZWg W1l5P7ordoMhCK0txePtcvMPJETJ8HldgMFcmxSUmwP7VHhcaJQCkqqRZpS7mRVR7zTP NbFw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o7-20020a654587000000b004dfdd5f95f2si2242322pgq.252.2023.02.16.08.06.49; Thu, 16 Feb 2023 08:07:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229635AbjBPQCk (ORCPT + 99 others); Thu, 16 Feb 2023 11:02:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59602 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229906AbjBPQCa (ORCPT ); Thu, 16 Feb 2023 11:02:30 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 851D95355B for ; Thu, 16 Feb 2023 08:02:08 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0D93F113E; Thu, 16 Feb 2023 08:02:50 -0800 (PST) Received: from e126864.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8AF763F881; Thu, 16 Feb 2023 08:02:04 -0800 (PST) From: Kristina Martsenko To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: Catalin Marinas , Will Deacon , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Mark Rutland , Mark Brown , Luis Machado , Vladimir Murzin , linux-kernel@vger.kernel.org Subject: [PATCH 10/10] arm64: mops: allow disabling MOPS from the kernel command line Date: Thu, 16 Feb 2023 16:00:12 +0000 Message-Id: <20230216160012.272345-11-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230216160012.272345-1-kristina.martsenko@arm.com> References: <20230216160012.272345-1-kristina.martsenko@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758004376597814373?= X-GMAIL-MSGID: =?utf-8?q?1758004376597814373?= Make it possible to disable the MOPS extension at runtime using the kernel command line. This can be useful for testing or working around hardware issues. Signed-off-by: Kristina Martsenko Reviewed-by: Catalin Marinas --- Documentation/admin-guide/kernel-parameters.txt | 3 +++ arch/arm64/kernel/idreg-override.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6cfa6e3996cf..ee86fe17352d 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -408,6 +408,9 @@ arm64.nosme [ARM64] Unconditionally disable Scalable Matrix Extension support + arm64.nomops [ARM64] Unconditionally disable Memory Copy and Memory + Set instructions support + ataflop= [HW,M68k] atarimouse= [HW,MOUSE] Atari Mouse diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index d833d78a7f31..d13ae90042cb 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -123,6 +123,7 @@ static const struct ftr_set_desc isar2 __initconst = { .fields = { FIELD("gpa3", ID_AA64ISAR2_EL1_GPA3_SHIFT, NULL), FIELD("apa3", ID_AA64ISAR2_EL1_APA3_SHIFT, NULL), + FIELD("mops", ID_AA64ISAR2_EL1_MOPS_SHIFT, NULL), {} }, }; @@ -174,6 +175,7 @@ static const struct { "id_aa64isar1.gpi=0 id_aa64isar1.gpa=0 " "id_aa64isar1.api=0 id_aa64isar1.apa=0 " "id_aa64isar2.gpa3=0 id_aa64isar2.apa3=0" }, + { "arm64.nomops", "id_aa64isar2.mops=0" }, { "arm64.nomte", "id_aa64pfr1.mte=0" }, { "nokaslr", "kaslr.disabled=1" }, };