From patchwork Tue May 9 14:22:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91618 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2945482vqo; Tue, 9 May 2023 07:53:22 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6XjA8QZioylqETHR0G85UQt2RnVO3arcGULo9FjNI6G2iy9G7hMW+fM8P/1LGg3auz+qfd X-Received: by 2002:a05:6a20:9153:b0:101:3600:6aa5 with SMTP id x19-20020a056a20915300b0010136006aa5mr3265997pzc.3.1683644001837; Tue, 09 May 2023 07:53:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683644001; cv=none; d=google.com; s=arc-20160816; b=LGgoNqeboiFAKNPoTh1Zp0QtvPizf/XloGs2m1IDrym2zi7zzNhzKFXN+IemH0fJO5 ExLCppsQGy3F8UTAN3lRheFYJ19vwjB9NAQtM0M5UnAfTntcBqtiX6AS9XuY8MF05XWq KnROuQZWcdJlpa5q/zNMkAIjsnyKs6X4DBq3GoCVfXq72TWpgnb3VKBUcm1VeQHefegZ PQp4RqGozt7SZ5FDS9sOLPCAtyVY2wKA8i/PIiFfMMM557/lkL4PGvoGl6NbrlRzBSdR 03r+UWu8ftH9o1qvdvVNbZ9TuRG30tgxEsi4rdC+W0wO2jsZCiH9xXK+yEiZmBQ69bef BbkA== 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=Uey4E2qzP2ZpdOGL5TGVtTTmSbNzbKcfhNcbwS/hZWA=; b=xZrY1ZsYyoeXURNVTzGqduHXPf+y+zx79WPTj1MxE76z0Fee5pAWwPB+XIFZDc625l BeQh/BIyJjYfc1VxUjSzfvwO0KUgy3LjVIVdbp+m6qN1qqFb8XjBXqpUW+7zZrEbVJFH bnojmU5kqqu8wHFe1tbivSKxOS7ThGqZGypwhy0DGLAvynJ9w7O3QdseFlrxmwBHD99N d49OGPvM5+HSI8pIa/69cEnj/g0AXEf/VvXwJqwLXLDdah+viQQ5QJ0dFkSkAjwFvh8+ FzIm7zCZoz3rAKERFapBU9GKdUUObCPGncdQxY3+iAMagpdfG5vJEKt1glehZ+/pDnJf rUNA== 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 t14-20020a63b24e000000b005288172b346si1622679pgo.584.2023.05.09.07.53.06; Tue, 09 May 2023 07:53:21 -0700 (PDT) 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 S235741AbjEIOXY (ORCPT + 99 others); Tue, 9 May 2023 10:23:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234641AbjEIOXU (ORCPT ); Tue, 9 May 2023 10:23:20 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 61CDC30E3 for ; Tue, 9 May 2023 07:23:18 -0700 (PDT) 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 9B7951063; Tue, 9 May 2023 07:24:02 -0700 (PDT) Received: from e126864.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 39FB43F663; Tue, 9 May 2023 07:23:15 -0700 (PDT) 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 v2 01/11] KVM: arm64: initialize HCRX_EL2 Date: Tue, 9 May 2023 15:22:25 +0100 Message-Id: <20230509142235.3284028-2-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765428692997914914?= X-GMAIL-MSGID: =?utf-8?q?1765428692997914914?= 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 a kexec by a future kernel. 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 Acked-by: Marc Zyngier Acked-by: Oliver Upton --- arch/arm64/include/asm/el2_setup.h | 18 ++++++++++-------- arch/arm64/include/asm/kvm_arm.h | 3 +++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h index 037724b19c5c..0201577863ca 100644 --- a/arch/arm64/include/asm/el2_setup.h +++ b/arch/arm64/include/asm/el2_setup.h @@ -22,6 +22,15 @@ isb .endm +.macro __init_el2_hcrx + mrs x0, id_aa64mmfr1_el1 + ubfx x0, x0, #ID_AA64MMFR1_EL1_HCX_SHIFT, #4 + cbz x0, .Lskip_hcrx_\@ + mov_q x0, HCRX_HOST_FLAGS + msr_s SYS_HCRX_EL2, x0 +.Lskip_hcrx_\@: +.endm + /* * Allow Non-secure EL1 and EL0 to access physical timer and counter. * This is not necessary for VHE, since the host kernel runs in EL2, @@ -184,6 +193,7 @@ */ .macro init_el2_state __init_el2_sctlr + __init_el2_hcrx __init_el2_timers __init_el2_debug __init_el2_lor @@ -284,14 +294,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 baef29fcbeee..fb7fe28b8eb8 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) From patchwork Tue May 9 14:22:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91612 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2933952vqo; Tue, 9 May 2023 07:35:45 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ46vBQofqQNCuhm4YJFmifbMa9a9/n+uqVpsvkjxbJjE/F2DfKwLdR9oibjkMDwVMrJ6IJU X-Received: by 2002:a05:6a20:8e13:b0:101:73a9:1683 with SMTP id y19-20020a056a208e1300b0010173a91683mr1979662pzj.33.1683642944717; Tue, 09 May 2023 07:35:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683642944; cv=none; d=google.com; s=arc-20160816; b=b01FBME1yAgyRPolidArTgobefhjTbLrTyHLXLOvpo6/SF6B0ZVwdFTR8268rX3mh2 YyhkLGGbvglYfyJLLnXun0h5qzSz+shTIp0eAsOJl+SCrGQ1oXA9ribRRPa60oyhmVOo 4gtkprIG71UdPNpPWUMliWzg7ijHImGQgyotQCYD8dHyop1qW5aKzDlkjucdPo0xJF5z FC5v4RVFyAuGJVfPKY+ysLDXeod1D/KG1li52TFlYOa5pWFQ+AiKqLubEjOWmWHwvdYz z4PEKyDfbaCil7O5lLMgVr2yuDBn68pkZzFBbfXrhEbK6PWRfc4Y14MckjoH0asFlQnN OmPQ== 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=Jj6Wg4ZLT14w+oX1DulLywsFFdyGLccEf4NRHwp/NqY=; b=GQLAe01jyNgcgV7vzpT5CHNH6ZFmErVopc+p/WxdMJTm+kiisteHN71ac1um2rrhrI 4rIyypqfi8tmZq1jUsE3sgB8ABkCRfkua6IAS7fcRabhC38IZKS0JvHDOu9+OBj4mRm+ 8CP0g75mUMbdRyvjyIOb84+NSWiGvNQPvwaCow7QJVdG69MTPpxlyMnM+dBoX76e3QPr U+i+bDpyEvn0hD/suCKR7bQ1fOLyB5s3aIq2xOUY9g3rw6d9MCSW992ktDjKOXeU8F3V ljoY930FYl865qWpDfzsggsCh4etWF+fyaxfZtcFT6/CG1OTW//sb1WaULtLs5DXdbsT nvgA== 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 w64-20020a638243000000b00524d469f753si1696458pgd.25.2023.05.09.07.35.32; Tue, 09 May 2023 07:35:44 -0700 (PDT) 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 S235841AbjEIOX0 (ORCPT + 99 others); Tue, 9 May 2023 10:23:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235548AbjEIOXX (ORCPT ); Tue, 9 May 2023 10:23:23 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F0ACD30D6 for ; Tue, 9 May 2023 07:23:21 -0700 (PDT) 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 EAB7E1576; Tue, 9 May 2023 07:24:05 -0700 (PDT) Received: from e126864.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 7DB2D3F663; Tue, 9 May 2023 07:23:18 -0700 (PDT) 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 v2 02/11] arm64: cpufeature: detect FEAT_HCX Date: Tue, 9 May 2023 15:22:26 +0100 Message-Id: <20230509142235.3284028-3-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765427584268965091?= X-GMAIL-MSGID: =?utf-8?q?1765427584268965091?= 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. KVM currently relies on the register being present on all CPUs (or none), so the kernel will panic if that is not the case. Fortunately no such systems currently exist, but this can be revisited if they appear. Note that the kernel will not panic if CONFIG_KVM is disabled. Reviewed-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- arch/arm64/kernel/cpufeature.c | 8 ++++++++ arch/arm64/tools/cpucaps | 1 + 2 files changed, 9 insertions(+) diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 7d7128c65161..9898ad77b1db 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -364,6 +364,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), @@ -2309,6 +2310,13 @@ 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_STRICT_BOOT_CPU_FEATURE, + .matches = has_cpuid_feature, + ARM64_CPUID_FIELDS(ID_AA64MMFR1_EL1, HCX, IMP) + }, #endif { .desc = "Kernel page table isolation (KPTI)", diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index 40ba95472594..e1de10fa080e 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -32,6 +32,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_NESTED_VIRT From patchwork Tue May 9 14:22:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91616 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2945240vqo; Tue, 9 May 2023 07:52:58 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4suFvRj/C1mkXq0Y4ibFXMCsTs8gU5On9VnVI/f+t3JEZ0WCBEYAzjnKIk/UVWmLisAYl2 X-Received: by 2002:a05:6a20:7490:b0:e4:b52:76c9 with SMTP id p16-20020a056a20749000b000e40b5276c9mr17603065pzd.23.1683643977795; Tue, 09 May 2023 07:52:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683643977; cv=none; d=google.com; s=arc-20160816; b=zKt5Lhf41lI4q2A6rE+2TbTVi+meLGaVSdDk07ffVkZYJ/3jG81DcdrSqv5AsEP4xp MoqTnvxlwRPZiCcjprAWkVXF4wEaluOCyPzi6eSYWFsckpFmP0qxAaVKTibMsZ3zmHKC THhZGeyskZke8ek/eQPmG8GwLHdVjDY7H9G0dzF9Np4/ss2LGL54WVzFGsBH4MZ0zKxz taGTkmzTEzuKn0XJ24DrArmu7qZGpoCqk9eWHNrkmpf/AC08w8NFTuapx5IBEWlSh5QI 7b4SKuCzgdbbppaloKQkKpwunzDvWUbT0P/jXgZrOtcBbgY80CsgNhPLece3e7loGMv9 YS2Q== 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=2XBmNWJBMx1jrXOvE7WAmvQjwDJKOQnh7RFqH8eyNW4=; b=uBbLhUaaAKxe/Mal0FTfx75d6UjxUvi6F6kU817VSJa0m/g8QkIA7RJs0gH3JKWyTo VcXDZLNn8PosUymYpTWtrjEJQHon1BdZ6BxlBGIXY4+7DzJNNE803be21eWZoi6+ffHR 5Mup154zoXR24/Mb/CumBWPuh9hR2+k/wVFWqKqijlf1Ahb02l8q+YNYtewp9zCSN9EE G3TdcAKB4at0/TVAaLu6P+RKCdGqwqOjXQJHhWK5x7bEkPEMwwL/FIckz52IGPWLOpTq 4DOOvNseA7TBjSrl/Xqv09CfRpdF5kuGpLHkdimSzU+dngfS7mZoSBPUAMaZqpZARUon 8NQA== 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 d9-20020a633609000000b005073e3342eesi1751485pga.143.2023.05.09.07.52.43; Tue, 09 May 2023 07:52:57 -0700 (PDT) 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 S235871AbjEIOXe (ORCPT + 99 others); Tue, 9 May 2023 10:23:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235839AbjEIOX0 (ORCPT ); Tue, 9 May 2023 10:23:26 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4632044AA for ; Tue, 9 May 2023 07:23:25 -0700 (PDT) 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 855A9FEC; Tue, 9 May 2023 07:24:09 -0700 (PDT) Received: from e126864.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 DA7993F663; Tue, 9 May 2023 07:23:21 -0700 (PDT) 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 v2 03/11] KVM: arm64: switch HCRX_EL2 between host and guest Date: Tue, 9 May 2023 15:22:27 +0100 Message-Id: <20230509142235.3284028-4-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765428667659946233?= X-GMAIL-MSGID: =?utf-8?q?1765428667659946233?= Switch the HCRX_EL2 register between host and guest configurations, in order to enable different features in the host and guest. Now that there are separate guest flags, we can also remove SMPME from the host flags, as SMPME is used for virtualizing SME priorities and has no use in the host. Signed-off-by: Kristina Martsenko Acked-by: Marc Zyngier Acked-by: Oliver Upton --- arch/arm64/include/asm/kvm_arm.h | 3 ++- arch/arm64/kvm/hyp/include/hyp/switch.h | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index fb7fe28b8eb8..7bb2fbddda54 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h @@ -93,7 +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) +#define HCRX_GUEST_FLAGS (HCRX_EL2_SMPME) +#define HCRX_HOST_FLAGS 0 /* TCR_EL2 Registers bits */ #define TCR_EL2_RES1 ((1U << 31) | (1 << 23)) diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index c41166f1a1dd..8f95bcbe6cdf 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -130,6 +130,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) @@ -144,6 +147,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 Tue May 9 14:22:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91625 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2965847vqo; Tue, 9 May 2023 08:18:04 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5gLWe8S9EPZcU8/LoKAPPAxWO5k/ZDzSwTQaDsVZNHD3wamuEbHiKYLr2nWZiIr9GWM3Sp X-Received: by 2002:a05:6a20:938b:b0:f8:a481:a952 with SMTP id x11-20020a056a20938b00b000f8a481a952mr19094902pzh.1.1683645483782; Tue, 09 May 2023 08:18:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645483; cv=none; d=google.com; s=arc-20160816; b=eozdrW/wjAEDXdHTUqqicfWKnujVaM3mm73t7mvuY6aE2oFrN1mqkhdylTvwgllEdQ dukn48ky6lgxp5qxzRXUr4d7hCLDmbsKWA0m3QJ0CqgB5lsiaS171VP0ghQF/pg+4g4e 7D65Zj1NIkc2ZUSbadEIW3/X2kqMvrOOcUnV+1DaHyxfJ3vyzyhAYTedL1KrRi+wrihr rYednSzLsVsc7Nj88+NGHgRVyNqlUS5LabnuCnheje+8RJRDr5UQUJy6aVUdv7q7eXQJ +3wWcEyUJsiimXxFLD/gB4Qwxtg4Rvkh+DcltLEP7n5O/C/FpAmuom1d+R2cwUAgd59T HBFg== 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=84gSo5Kml7TQ0BQ2eWPRyHcrwsTcR2eoov8E9V0qSLE=; b=Da7Ul++8tD8KW4UCl2TDSlICrMPPaJPHjsTOb+USZftiwRu2m4dtF9iR+iciUWDqYA 5/BJx1d53XbptmziPzsYvoon/dPDV/tovKnzihAr0bHsrmAaAAQn7vAHYyZx24ekfNLE yNeNvFRxUe3rGK72dzqXmNjq7m/7+W1dY600XWwk6wzZ5043fnHYOPtAYwEOr9MgM6b+ FtId4xqELHRfJwx7M5ELqHOmXzZSz7uz8KNAWS3YowT+ZOD5p8X6uqLfv3P42J6L5BR3 v9/buSZQokdvN0pDdJU8sWeelptD/tvEXvoXgu+H+SB2monB0C9EPLT4johnwoJLvopf qysw== 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 k124-20020a628482000000b0064327a34c1csi1349242pfd.225.2023.05.09.08.17.50; Tue, 09 May 2023 08:18:03 -0700 (PDT) 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 S235851AbjEIOXh (ORCPT + 99 others); Tue, 9 May 2023 10:23:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235837AbjEIOXb (ORCPT ); Tue, 9 May 2023 10:23:31 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B86C34C10 for ; Tue, 9 May 2023 07:23:28 -0700 (PDT) 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 F3DBC1063; Tue, 9 May 2023 07:24:12 -0700 (PDT) Received: from e126864.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 74BA83F840; Tue, 9 May 2023 07:23:25 -0700 (PDT) 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 v2 04/11] arm64: mops: document boot requirements for MOPS Date: Tue, 9 May 2023 15:22:28 +0100 Message-Id: <20230509142235.3284028-5-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765430246728537142?= X-GMAIL-MSGID: =?utf-8?q?1765430246728537142?= FEAT_MOPS introduces new instructions, we require that these instructions not execute as UNDEFINED when we identify that the feature is supported. Signed-off-by: Kristina Martsenko --- Documentation/arm64/booting.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/arm64/booting.rst b/Documentation/arm64/booting.rst index ffeccdd6bdac..b3bbf330ed0a 100644 --- a/Documentation/arm64/booting.rst +++ b/Documentation/arm64/booting.rst @@ -379,6 +379,12 @@ 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. + 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 Tue May 9 14:22:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91620 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2948675vqo; Tue, 9 May 2023 07:58:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4Y9E01FtmLnsTAVuUyPD41FMDa91b8a7eD5W25pgMw/g+Zqat9/JWbir1lvqB1uM3AL12C X-Received: by 2002:a05:6a00:2408:b0:63f:18ae:1d5f with SMTP id z8-20020a056a00240800b0063f18ae1d5fmr17935241pfh.29.1683644316798; Tue, 09 May 2023 07:58:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683644316; cv=none; d=google.com; s=arc-20160816; b=oRPF5Vw1Mv5qv96BlNZHoZjVAdxJUxTp2kEAyPom/NmjrY+rLXJDcqqKYdHX3okXzn N/mRZEuOYFogebiM8kn2tCLG8IL7y+NcdKywIeYQUfNZz74NWAQDpFkTGVfpkVbsa+9d 8UBlVkhKJ7i0KBx+y9Bzxj1s9267mr6ScNfKR+oQ1UseGCzLiUK6T/wgb6cGaC5HC8Mh Oj+VSyQmZBq168jP0QksA87bap3GnPctyGEbdh/E/6/LSDIo5t4ImDju2YCh8YgTfmOs YzaZ0UvTtkOroe755RkzS3UBG8TIEMLwvu/4AAx+WOKO3AoDcBvQq9abXNeA1/MbJmtg 3kSQ== 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=H9tMz6bXtKfwO4QCThdkUnS3FmydhBHKXr9hWUjCX8Y=; b=GbSsKiuqEHK0nJ8stvLhkVffWFo0kDLK4JNnyt4pKieWN0oZdaTP0Yso8V+AeODQKm ZksyJ84G4iewPbwA7OzX1CWqwQb7bu3G9MrQomV/aKugr2uHjodq1CcKK/qFijJVYaft e4vWKRcoJjhTX0YWJT1oJydd+MfsWaaBssWXHFuID/EfT1LgtEMVAWzjOcVm0mq3nNlW w/EZ4uCZaG7WrzqjyKHB9GB31TGAVeWrh6FabH/pHrMeVVyDKOGYBNoemhkOWXm7IHPh uxWRBaO8WPmTY3HsdMhm/OkA3lY8vGYEse30GB6aNdn61bCAtR2ZpBgLuPf8TcbPCCmz xyMA== 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 z124-20020a633382000000b0051367d909efsi1721637pgz.106.2023.05.09.07.58.23; Tue, 09 May 2023 07:58:36 -0700 (PDT) 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 S235864AbjEIOXl (ORCPT + 99 others); Tue, 9 May 2023 10:23:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235846AbjEIOXd (ORCPT ); Tue, 9 May 2023 10:23:33 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 0C1D330E5 for ; Tue, 9 May 2023 07:23:32 -0700 (PDT) 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 4A0A1FEC; Tue, 9 May 2023 07:24:16 -0700 (PDT) Received: from e126864.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 BD09D3F840; Tue, 9 May 2023 07:23:28 -0700 (PDT) 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 v2 05/11] arm64: mops: don't disable host MOPS instructions from EL2 Date: Tue, 9 May 2023 15:22:29 +0100 Message-Id: <20230509142235.3284028-6-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765429023272340319?= X-GMAIL-MSGID: =?utf-8?q?1765429023272340319?= 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. Reviewed-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- 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 7bb2fbddda54..d2d4f4cd12b8 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 (HCRX_EL2_SMPME) -#define HCRX_HOST_FLAGS 0 +#define HCRX_HOST_FLAGS (HCRX_EL2_MSCEn) /* TCR_EL2 Registers bits */ #define TCR_EL2_RES1 ((1U << 31) | (1 << 23)) From patchwork Tue May 9 14:22:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91628 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2966532vqo; Tue, 9 May 2023 08:18:59 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6lx+7Q8m0TBL0d/KrOKQNGPdCYt9zX5gbQdw9NCrzF3tnQsvtbjtZ+/0P957pi9r9fKhIW X-Received: by 2002:a17:90b:38c2:b0:24d:f67d:7177 with SMTP id nn2-20020a17090b38c200b0024df67d7177mr21197551pjb.20.1683645538286; Tue, 09 May 2023 08:18:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645538; cv=none; d=google.com; s=arc-20160816; b=m1wQIeQMFwRtqBcw+JcyST2OEjNLC3Ln02CpChvM4tR9PEU+XJ1PmBRbVLB6uhzMAU 2XtwiyOihYF+r/6mc+tnuiJEE6Q/Yun871javXDVIUDKOMZH/LmRgFrEDhzTM6psxI0A QYJ1DcO/JLf9OGsfX+kr7UocmPCjgKS6qxXQ1U/SbxKucSh0VFpyfsYt0gQa/hN1oKZy D1asDIu7pelEdcChY00i/jvvi2HIiczSHEnHwlW21dtAo2H3dXyKkfu8u9X8wN7Nt7er LJy4S4ih9N5V46qRN8LqqmPqenYzUytmYR2Ih3ocKohzrp2Wd9HyNNMBkpPNTbfY60kl l2Yg== 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=5xcbzUmsxv9J3W69JnKM74WfS7Uc0TUI2Hyw0DuZLd8=; b=xLKkxeeznpcTtjJFpSVlpEwnYqqVYzd3PZcfv9FaQnm2vgkVUxRTpsNDXdfCBH8F0k TGwbyCYWJfX4IKvmspKBqwioi/dIXxIL9XxzF/639X1S/ttcjW4dh8Tg3kFbuPWPU5RZ KyhW7xxqfP0BRAEqtsvv0lNUJvlIZKw+fCiO+zmaywxlwX+h/B2PsVmqUprVDw4/fmAZ 2q2jR98vto0GRRQg9inZNHiMyOGUL3Rv56PkecbSzKXfRFAnt1Pm5yLE6M5YTTx7W0B6 GbksElkA/UVbEEMBup8fZ1MjlgEbnN0jCdt9XRke7pAJ0/w8GeGG0laGwJa4t8mvpzrF fAfQ== 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 j20-20020a633c14000000b005303c1de315si1636511pga.853.2023.05.09.08.18.44; Tue, 09 May 2023 08:18:58 -0700 (PDT) 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 S235890AbjEIOXw (ORCPT + 99 others); Tue, 9 May 2023 10:23:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35830 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235887AbjEIOXp (ORCPT ); Tue, 9 May 2023 10:23:45 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 882F54C2C for ; Tue, 9 May 2023 07:23:35 -0700 (PDT) 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 973191063; Tue, 9 May 2023 07:24:19 -0700 (PDT) Received: from e126864.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 3ABC93F663; Tue, 9 May 2023 07:23:32 -0700 (PDT) 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 v2 06/11] KVM: arm64: hide MOPS from guests Date: Tue, 9 May 2023 15:22:30 +0100 Message-Id: <20230509142235.3284028-7-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765430303643612136?= X-GMAIL-MSGID: =?utf-8?q?1765430303643612136?= 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. Acked-by: Catalin Marinas Signed-off-by: Kristina Martsenko Acked-by: Marc Zyngier Acked-by: Oliver Upton --- 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 71b12094d613..6dae7fe91cfa 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1252,6 +1252,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 Tue May 9 14:22:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91623 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2962586vqo; Tue, 9 May 2023 08:14:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4uCbv2yFfZu3Y83swcWROBxaAQa4w7SrgPF/rkjRKT4fmEUTuGj3w6R28pt/y5Z2iAI97v X-Received: by 2002:a17:902:f54c:b0:19c:dbce:dce8 with SMTP id h12-20020a170902f54c00b0019cdbcedce8mr20147463plf.15.1683645245974; Tue, 09 May 2023 08:14:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645245; cv=none; d=google.com; s=arc-20160816; b=Fgyz2e6020Z8doEN+T1HD29EEmPMg6Xtx/BkFSU4LLmQfeZuOVZtonBbos1VkasAP+ sMjrQnUp0gxHJG/wDVQJN2zm4Ac+pJVfTHpz3w1eDV4BojGy+dGRZXgehigtLxj2vAaV SD7IpklrrvliGuAnSxqB/cnBvGp3OenmvwpCxQmstpHThJ5Vz45QwIWwqHQTPC2SDmaN OHJJUidyZShXvPjLkawS1mqCmcfzBHnjNAle4OprvcG9hm/xqYx30qdMX7d+GUQVEkyi EhHuW2c4trIJ+TKc8hvwTmCxTlZNkPvsMgzPdQwsA4KV6S/wPtICKziQtGrRV08lECKM Nw9Q== 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=4hiHxVp3aINJZvxyiNZ/ZF6MQxdhTRgahKe56R0qgn4=; b=LR1Oo7da+aey29K0o7kr1MTWr0saG9IMrBYDVGB7FYd9YIQKaarAC7Aogxx4hmdIww 0CDJ53n3NTP66zS3fxsRvK8NA5wNVus4g1AQiN4+1wR0t4WnqVV0wfy2u8HXP8i6Kd41 22ve1qzIJYAz2eo44YlUJlSHniAHirkM9C56iOW3mEy300C86wUfcmwEUjVgVMsdsBgj nNg3KZiVe3JdwTdnDM0x+oViNafLLVhSSATP5LiKti5MPT/jmYxXRpm+2KM2H+p69kat i1alIZNrJB0aJfEG+kUwX8zuQckYdZd8M3fmjUGWejT8PlJJ888tkJKF4KNh3a5vnc7i AGOQ== 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 jj13-20020a170903048d00b001aaf59c9633si1463799plb.565.2023.05.09.08.13.50; Tue, 09 May 2023 08:14:05 -0700 (PDT) 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 S235891AbjEIOX7 (ORCPT + 99 others); Tue, 9 May 2023 10:23:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35850 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235900AbjEIOXx (ORCPT ); Tue, 9 May 2023 10:23:53 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 88BEB559A for ; Tue, 9 May 2023 07:23:38 -0700 (PDT) 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 544631576; Tue, 9 May 2023 07:24:22 -0700 (PDT) Received: from e126864.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 6C71B3F663; Tue, 9 May 2023 07:23:35 -0700 (PDT) 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 v2 07/11] arm64: mops: handle MOPS exceptions Date: Tue, 9 May 2023 15:22:31 +0100 Message-Id: <20230509142235.3284028-8-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765429997748858189?= X-GMAIL-MSGID: =?utf-8?q?1765429997748858189?= The memory copy/set instructions added as part of FEAT_MOPS can take an exception (e.g. page fault) 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. This is because the architecture allows two options (Option A and Option B) to implement the instructions and a heterogeneous system can have different implementations between CPUs. 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. Reviewed-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- 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 | 52 ++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 8487aec9b658..ca954f566861 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) @@ -356,6 +356,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 e73af709cb7a..72e83af0135f 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 3af3c01c93a6..a8ec174e5b0e 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 4bb1b8f47298..32dc692bffd3 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -514,6 +514,57 @@ 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) { + /* SET* instruction */ + if (option_a ^ wrong_option) { + /* Format is from Option A; forward set */ + pt_regs_write_reg(regs, dstreg, dst + size); + pt_regs_write_reg(regs, sizereg, -size); + } + } else { + /* CPY* instruction */ + if (!(option_a ^ wrong_option)) { + /* Format is from Option B */ + if (regs->pstate & PSR_N_BIT) { + /* Backward copy */ + pt_regs_write_reg(regs, dstreg, dst - size); + pt_regs_write_reg(regs, srcreg, src - size); + } + } else { + /* Format is from Option A */ + if (size & BIT(63)) { + /* Forward copy */ + 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; \ @@ -824,6 +875,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 Tue May 9 14:22:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91626 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2966035vqo; Tue, 9 May 2023 08:18:20 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5oCQPLMtZz7/WROQiwcOWdKYVDViLiNIoGeHNsa3BXkyTOTvIzNw+kyuFds7FUNW7esv8f X-Received: by 2002:a05:6a20:3d8a:b0:ff:b87d:ce31 with SMTP id s10-20020a056a203d8a00b000ffb87dce31mr13246101pzi.28.1683645500212; Tue, 09 May 2023 08:18:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645500; cv=none; d=google.com; s=arc-20160816; b=X4WJN8/DlrAm4tpY/wfVztfv2x7IpM9PK1xTJ199RhD72JSG0kkCXDxbIXGL+iEAJT WEHWfg44ivfK3WxDNS6mya5bqjhLsSdtP5xUsrdbf2xXrlMYOUGI7+2ELZkPH4fVctE1 J97smuNwXvxR1L7RO0gHgxIef1CM6ksKc5gj8gPXSmP4nREmGnrdMPmngMlj35NUEgC9 sSWV06WqqGZOh2kr0rhZS9eSzeIlvAdXp5hgqPABAcr30lzWKOCdkaPbJS+NN6SrIgoB zt9oC0x3hI8CsQ6DDJGDj1t9NrdR3TB3osZzWEhPczvXjGwaS6e7oaGJpCoxjxNzEJWL N9fA== 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=Ltmbw9GT0qn9eToGdm1T4ILANMieR8zXuM8b4MpiZ0s=; b=xWJkLEchtdfAhve+HJg0gqDH8jEc9ArzG3FBqmv3TGWVxfy+v5AkUEN0ufy5ZcaGjB Kg34/5Enp1QAF3HVy/txr9PVQnelAN1+R9o8x0WSnUXrYN9jmP1RIcOEJEQ/krsPmNOs FnUEYUz0kurNRoaASMfUXmm8SyfS7a0r/p5PImMh7Fuj5QtIB9TEkw1NX4KYIlnXM028 WPmEMDZFTy9hbDijZKqsZPa5FyNPia2Y7/xhFoWVlQV1OCS7rKb4FNWqHSci+Rpqb4p+ jJKocXMk2Bm9dAzzD4ngukFlJyULHGX0DpiKSc2a0OirZGus51HSCO7pcd+1LHh7F8dy GIjw== 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 j20-20020a633c14000000b005303c1de315si1636511pga.853.2023.05.09.08.18.05; Tue, 09 May 2023 08:18:20 -0700 (PDT) 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 S235899AbjEIOYK (ORCPT + 99 others); Tue, 9 May 2023 10:24:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235869AbjEIOYC (ORCPT ); Tue, 9 May 2023 10:24:02 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6B6B13C0D for ; Tue, 9 May 2023 07:23:41 -0700 (PDT) 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 24A0DFEC; Tue, 9 May 2023 07:24:25 -0700 (PDT) Received: from e126864.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 4407D3F663; Tue, 9 May 2023 07:23:38 -0700 (PDT) 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 v2 08/11] arm64: mops: handle single stepping after MOPS exception Date: Tue, 9 May 2023 15:22:32 +0100 Message-Id: <20230509142235.3284028-9-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765430263989219944?= X-GMAIL-MSGID: =?utf-8?q?1765430263989219944?= 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. Acked-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- 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 32dc692bffd3..4363e3b53a81 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -563,6 +563,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 Tue May 9 14:22:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91615 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2944459vqo; Tue, 9 May 2023 07:51:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6hFsNw/OtNfwCXqNOFVpR8HYkQ/VAaNWRCRe5/WWia10Jqpvy6qbiAOFDAEA4IAzZwN1fs X-Received: by 2002:a05:6a20:3caa:b0:db:22dc:23d with SMTP id b42-20020a056a203caa00b000db22dc023dmr19624352pzj.5.1683643906578; Tue, 09 May 2023 07:51:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683643906; cv=none; d=google.com; s=arc-20160816; b=VX9sL0f+0P1PiTouoBUnQvOgPDlPjM5PMPuKtPopf2S09fj4oe6BerQS3fdh5bqmf/ hP+DZndjrc8vQkvJ5WHqiLUHEKQwKg+zvCFmtF5/FbcwmRUTtQ854GMdZIoS62QV7jhl y+RWg30/c2uQrfQEBxWvthk9eMiHzzqlHv3DCVupo8Sjw8xgug0p90BTmetA3U37tIMU cPfGivm4BKv+gMROiL9GrOMuqs5NcTNUVLNnqK0gDjctELTCMaZVAC/EQfAdUSoVg95A HltEmFMCVXrYMsv6j+n0Z+IR8vClwLNbVckfTF8uXvtySpBoboGzM2gcE4R6U4rXClLM 5bYw== 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=nI/ErCiGqxFMh/ZJjBvWLzj9JG9GqrJSn+1gP0vQJkU=; b=uiMnLWFlxmxHevi99ASQC9mlTim40IVDqTP7dQ0GxrGBx5B67n8Y/9ZfpaTfzlAtEH KmxlO/y7Pi4esrLGDipZg2wRMI96ML4XKK0miu+LuxV/UsqLBNxRQAHeFf6TrZ8/Xaaw 3GjfwaO6o1jTiXPy8CVuVket36HNrkR2paPpxgrwywCbXDJmNH9Sd9+GaZkeHkKrNJuR XQkCNlhzRq/NDqjtwFxCcmdztSlPaaAcf1IG9vZGe+bkqgT/Lembg+x9GxrjtRmjveQM Iy8hqbFCMjmKFa582bOaQjCKTXusMIwJYgdcdI4nbF8he3B5AmvhmC6BTgS8sGv5lHhU HiwQ== 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 m24-20020a637118000000b00524eef9225bsi1687720pgc.550.2023.05.09.07.51.31; Tue, 09 May 2023 07:51:46 -0700 (PDT) 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 S235902AbjEIOYT (ORCPT + 99 others); Tue, 9 May 2023 10:24:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235873AbjEIOYN (ORCPT ); Tue, 9 May 2023 10:24:13 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3C1B9525E for ; Tue, 9 May 2023 07:23:46 -0700 (PDT) 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 140641595; Tue, 9 May 2023 07:24:28 -0700 (PDT) Received: from e126864.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 E22593F663; Tue, 9 May 2023 07:23:40 -0700 (PDT) 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 v2 09/11] arm64: mops: detect and enable FEAT_MOPS Date: Tue, 9 May 2023 15:22:33 +0100 Message-Id: <20230509142235.3284028-10-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765428592624181070?= X-GMAIL-MSGID: =?utf-8?q?1765428592624181070?= 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. Reviewed-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- 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 | 15 +++++++++++++++ arch/arm64/kernel/cpuinfo.c | 1 + arch/arm64/tools/cpucaps | 1 + 7 files changed, 24 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 9898ad77b1db..3badc4fa7154 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -223,6 +223,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), @@ -2187,6 +2188,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) @@ -2649,6 +2655,14 @@ static const struct arm64_cpu_capabilities arm64_features[] = { .cpu_enable = cpu_enable_dit, ARM64_CPUID_FIELDS(ID_AA64PFR0_EL1, DIT, IMP) }, + { + .desc = "Memory Copy and Memory Set instructions", + .capability = ARM64_HAS_MOPS, + .type = ARM64_CPUCAP_SYSTEM_FEATURE, + .matches = has_cpuid_feature, + .cpu_enable = cpu_enable_mops, + ARM64_CPUID_FIELDS(ID_AA64ISAR2_EL1, MOPS, IMP) + }, {}, }; @@ -2777,6 +2791,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 e1de10fa080e..debc4609f129 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -35,6 +35,7 @@ HAS_GIC_PRIO_RELAXED_SYNC HAS_HCX HAS_LDAPR HAS_LSE_ATOMICS +HAS_MOPS HAS_NESTED_VIRT HAS_NO_FPSIMD HAS_NO_HW_PREFETCH From patchwork Tue May 9 14:22:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91627 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2966319vqo; Tue, 9 May 2023 08:18:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4RgePYfy5ERykDntsc95bevVzYlepsHXB66AXuqB2XmJ2BAGQ6zo70Yp/q+fE7419Xofvc X-Received: by 2002:a17:90a:bc8d:b0:250:bc78:9828 with SMTP id x13-20020a17090abc8d00b00250bc789828mr1532996pjr.4.1683645521155; Tue, 09 May 2023 08:18:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645521; cv=none; d=google.com; s=arc-20160816; b=qv7Gc8GAGsWcF7hDnAKUPoUeWAF6TjMZFedvp8Tg4+caslmf2b+KdunIcMtt4zbVyY jlZES2gRxWojT+MHSU9PJSxLeL2nDSgoSz4OYkXk2yzGMyXrY/r1YM/4wcjxYprcsBAP P5t8FZPlsQYjBIHqzUYmVopWP5pZRy62YPsBYUMNggjwtV5pobi0IJRmxSSfxs/A9VvO fYizXr5PIdp6ph/Zmzeg0vE8BOZF36h1zlQGWZ7g/4qX6yAmCONrllJNLmFoZ93jOYEQ rshFOk7mWIYZDc1gkVDlBm5T67umVMK6jQ3dWlsiVzgko0Sdv/0wJDRUlrNhHSxWhzhk CdWA== 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=BPWqirbH4yEeDqRHBENwltrJbQNfMlmuvlJtUn9IcG4=; b=haoUzVtz/Bf+/4T6qKdVsriBGJuiLyf9df42Dz/lIq/JT8kQmM6yAt2ANAGPd/77uV MxrdWFKJRqfYW1/Np1/Zu0KvrWDqkxOT4KD6fDkNWIB/gr63QUsgVoAJ/d3Z+DP6MS1E FcOruOYPHaB4mMAS0GCgUtBLMVNrmrS+dUCj/hiKCOh60hG4gg87ZRI3kVzl0DFHUGiF HWwMlYnis2wPggLNmu2/feIixH1qMig4HA4DDqvP4Hbp3SleLcf6f5/6+iYicQi+mXhH RDrt+gY5jf8DAOMkr3mqbLoOghWCmZ+NLqgKt+Qur5HH1g3BMg7YBiGcVHHlf1ZPT94V S1uA== 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 u9-20020a17090a2b8900b0024b5bdfb757si9603833pjd.28.2023.05.09.08.18.25; Tue, 09 May 2023 08:18:41 -0700 (PDT) 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 S235892AbjEIOYY (ORCPT + 99 others); Tue, 9 May 2023 10:24:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235869AbjEIOYV (ORCPT ); Tue, 9 May 2023 10:24:21 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E5A364EF2 for ; Tue, 9 May 2023 07:23:54 -0700 (PDT) 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 5EF831063; Tue, 9 May 2023 07:24:30 -0700 (PDT) Received: from e126864.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 D3BEA3F663; Tue, 9 May 2023 07:23:43 -0700 (PDT) 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 v2 10/11] arm64: mops: allow disabling MOPS from the kernel command line Date: Tue, 9 May 2023 15:22:34 +0100 Message-Id: <20230509142235.3284028-11-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765430286108244383?= X-GMAIL-MSGID: =?utf-8?q?1765430286108244383?= 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. For example it could be used to test new memory copy routines that do not use MOPS instructions (e.g. from Arm Optimized Routines). Reviewed-by: Catalin Marinas Signed-off-by: Kristina Martsenko --- 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 9e5bab29685f..e01fbfd78ae9 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -429,6 +429,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 370ab84fd06e..8439248c21d3 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" }, }; From patchwork Tue May 9 14:22:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kristina Martsenko X-Patchwork-Id: 91624 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2965403vqo; Tue, 9 May 2023 08:17:27 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7K8MpOa9sHhN66ZsyFRQ5JMP+Huf1VgS+sbZfbz9Gvsk6mibWLeLjUsXMlWu5MVJE0+hOz X-Received: by 2002:a05:6a00:c87:b0:63f:15cc:9c1c with SMTP id a7-20020a056a000c8700b0063f15cc9c1cmr18635810pfv.34.1683645446743; Tue, 09 May 2023 08:17:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683645446; cv=none; d=google.com; s=arc-20160816; b=cd2FfJ3GltaLhHV3pAMOsgrwcifLDeAxSvYtgrhyNwVEuz6n3RdAPKV7eGjsCd7g4W kVEcAbbunvrh5pOZrtviSG8z5ldiDB5FmKphu0yYEbT0wXQU/8z/m1/oJMr2EDpxp2tj tQoXOOo3ktHBgpiKMoH1g5Dho+mpLbeOaTRQ81c1EH20mdkV7RUQDajNitvAVYD3m3g8 pw7YojZv3H2LjTF3oXAUwbx8dP6sri4k04GRmn2oqvsOgqCKDbh1zx0gmBM8k7BruuPE 73TFwbvZh9vZPa6cOi6XisdgluFgbBwiPqBn9NhMzknE+NOr1sFz4sPGTuFzOIvvc/hz dw+Q== 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=Agpmob5Y7e8ZYv6rQ/XJFKPxHYItv5mgYbl7q6BWQYY=; b=xD6iaQjzl2GRtCTMeNhwfPeNm2GSxirEdsIJjV4J+YsvgloefuzDGUtqTKAqeY83zt GumO4hsTOJaSA/Vuf+U0ALdlCgRkwowzE8KmZvxdqB3domlXuHF8Y6NutEdMHHl8AJHe ZW2PecfCDRdy8Hk+LnfqMunn4pD085lsZ3O0eBxNo5DdOSfDdAIIe82lxt1mU9+P8Lqk 50NvP9wxWiuzHdyFiasdx93v6+NSvIIjBRwK6R6Hop7Afv9qiVVbueKzZd0oSugLDxcU Y2tzCFCLspQJy+9T8ITI91j4SUAR+Yltn2wd4mBAX2oqpiT3afJf5o2JLDISXo19DdLE pdnA== 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 r16-20020aa79ed0000000b0063c56e46f9esi2682241pfq.294.2023.05.09.08.17.13; Tue, 09 May 2023 08:17:26 -0700 (PDT) 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 S235917AbjEIOYh (ORCPT + 99 others); Tue, 9 May 2023 10:24:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235922AbjEIOYb (ORCPT ); Tue, 9 May 2023 10:24:31 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B4F77559B for ; Tue, 9 May 2023 07:24:03 -0700 (PDT) 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 ADD6E1596; Tue, 9 May 2023 07:24:33 -0700 (PDT) Received: from e126864.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 2A1123F663; Tue, 9 May 2023 07:23:46 -0700 (PDT) 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 v2 11/11] kselftest/arm64: add MOPS to hwcap test Date: Tue, 9 May 2023 15:22:35 +0100 Message-Id: <20230509142235.3284028-12-kristina.martsenko@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230509142235.3284028-1-kristina.martsenko@arm.com> References: <20230509142235.3284028-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,T_SCC_BODY_TEXT_LINE 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?1765430208049225396?= X-GMAIL-MSGID: =?utf-8?q?1765430208049225396?= Add the MOPS hwcap to the hwcap kselftest and check that a SIGILL is not generated when the feature is detected. A SIGILL is reliable when the feature is not detected as SCTLR_EL1.MSCEn won't have been set. Signed-off-by: Kristina Martsenko Reviewed-by: Mark Brown --- tools/testing/selftests/arm64/abi/hwcap.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/testing/selftests/arm64/abi/hwcap.c b/tools/testing/selftests/arm64/abi/hwcap.c index 93333a90bf3a..d4ad813fed10 100644 --- a/tools/testing/selftests/arm64/abi/hwcap.c +++ b/tools/testing/selftests/arm64/abi/hwcap.c @@ -39,6 +39,20 @@ static void cssc_sigill(void) asm volatile(".inst 0xdac01c00" : : : "x0"); } +static void mops_sigill(void) +{ + char dst[1], src[1]; + register char *dstp asm ("x0") = dst; + register char *srcp asm ("x1") = src; + register long size asm ("x2") = 1; + + /* CPYP [x0]!, [x1]!, x2! */ + asm volatile(".inst 0x1d010440" + : "+r" (dstp), "+r" (srcp), "+r" (size) + : + : "cc", "memory"); +} + static void rng_sigill(void) { asm volatile("mrs x0, S3_3_C2_C4_0" : : : "x0"); @@ -209,6 +223,14 @@ static const struct hwcap_data { .cpuinfo = "cssc", .sigill_fn = cssc_sigill, }, + { + .name = "MOPS", + .at_hwcap = AT_HWCAP2, + .hwcap_bit = HWCAP2_MOPS, + .cpuinfo = "mops", + .sigill_fn = mops_sigill, + .sigill_reliable = true, + }, { .name = "RNG", .at_hwcap = AT_HWCAP2,