From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CF35DC433EF for ; Wed, 27 Oct 2021 19:04:18 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 855AD60296 for ; Wed, 27 Oct 2021 19:04:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 855AD60296 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3vBzwOl5Ilme58JIBYBO+x/X4AAKJlzif2YYqmKe0+c=; b=UxgqxBKfAlobAU WtVYvzrtWciGeepzq4QUQLd9nQjjJ4tlnW1AqC+SO4JUaDJH+cWDlGZfz8EmMKLgzb1UMgLJW5MCJ JMGugcn7uZsdZCCLQBCK5sPdgcyNF82nEDS3GLYkEAJFJA++RIx/N2g865yZUs4CX31NzzEeUAOHb wJk+6RFzT61OBNiH+ku0hZWMHKkpaXOZ7Vmgms+ED6wpKgiHlqSJWNp/oSkqx94waKiKs+dp1E/5G qOfQbMT2yp3NguL4KptlSrki6ZA6jmHiMNfLRmtJ8v1WwIetJIj/WToCWqFQSb054mst/KlSeTAKv VL9+Hda2VRp3CpqfFTxQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mfoBn-005le8-RG; Wed, 27 Oct 2021 19:02:21 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mfo1b-005ggj-By for linux-arm-kernel@lists.infradead.org; Wed, 27 Oct 2021 18:51:48 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id B022B610C8; Wed, 27 Oct 2021 18:51:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635360707; bh=xZLlC1q99EwXMUJBADXxGM/i8bzqpIz0Zg3di6U+rpQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cMepY/3c0JzMcbeP41jh6q4egO8SQLxGVG6xpbWmN+FbQ7VtcL5wZzUfRwVfCl6PD g+DatSWOvczkjN0B+ENCYu5GYFm8FfPfx+WknKorfkWfT7ortm7wUyXAkrCjK8ZuMo QMDWRybm/MU7deFe+jBZJpYlVwtyImIzCAL0+fktti855NtsenghOgOfEVoKcw51NG SSF14dWftEGrmRwC8wPeuowUT7khxhONeNaRn+Ha4VF1KEUklSyNnlXsRyiIxy/K6t O0MNyBFuZo530WgadPWE3ku6ADnZIIEexxYNb5gJoJ7wzmgNjBgb/4h8rDTX/oLMtv yJC+zbFqgcH0g== From: Mark Brown To: Catalin Marinas , Will Deacon , Shuah Khan , Shuah Khan Cc: Alan Hayward , Luis Machado , Salil Akerkar , Basant Kumar Dwivedi , Szabolcs Nagy , linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v5 19/38] arm64/sme: Implement SVCR context switching Date: Wed, 27 Oct 2021 19:44:05 +0100 Message-Id: <20211027184424.166237-20-broonie@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211027184424.166237-1-broonie@kernel.org> References: <20211027184424.166237-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3708; h=from:subject; bh=xZLlC1q99EwXMUJBADXxGM/i8bzqpIz0Zg3di6U+rpQ=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBheZ31Idi3hrnKS94NlwPXznM5UHTI5wVCixiKNwI4 VgRe1RWJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYXmd9QAKCRAk1otyXVSH0D65B/ wO4hqCBSjlhn9Q+xbfN6dMiAlz+UAqxUr119QWrKnQEqGmGoLSR+Xz49J5uw7WfTsAvwJcGBrqw6JA bFdFRKOC6/Vh6UJgAN1SHO/k1+QEIH9Wce7/WJQ2R4Ev8A7XmjNexdzjLy10zlz7cqI888vzOBU0Ur vbfPArlcHaY5bcQUaLpDFrcDkfpGILdrcG+dOM1lepPARuE/mZqqAqS1KJGrBdLst0S5omj+DjV7V4 nqQpkdE0SAVpuWKskSJbzeh4fU1ckg7hJ66Rwpge92lyKYBFE5YqJqlhXzhTvV2bjzRwMHTVQrSXXY PTLfDEMy31ncfSGOdNmFr2DxD4JCEy X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211027_115147_485964_748DB68E X-CRM114-Status: GOOD ( 12.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In SME the use of both streaming SVE mode and ZA are tracked through PSTATE.SM and PSTATE.ZA, visible through the system register SVCR. In order to context switch the floating point state for SME we need to context switch the contents of this register as part of context switching the floating point state. Since changing the vector length exits streaming SVE mode and disables ZA we also make sure we update SVCR appropriately when setting vector length, and similarly ensure that new threads have streaming SVE mode and ZA disabled. Signed-off-by: Mark Brown --- arch/arm64/include/asm/processor.h | 1 + arch/arm64/include/asm/thread_info.h | 1 + arch/arm64/kernel/fpsimd.c | 11 +++++++++++ arch/arm64/kernel/process.c | 2 ++ 4 files changed, 15 insertions(+) diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index 51eca2513cb5..3c235e165725 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -168,6 +168,7 @@ struct thread_struct { u64 mte_ctrl; #endif u64 sctlr_user; + u64 svcr; u64 tpidr2_el0; }; diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h index 5c4355204f4a..03cb88f63317 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -81,6 +81,7 @@ int arch_dup_task_struct(struct task_struct *dst, #define TIF_SVE_VL_INHERIT 24 /* Inherit SVE vl_onexec across exec */ #define TIF_SSBD 25 /* Wants SSB mitigation */ #define TIF_TAGGED_ADDR 26 /* Allow tagged user addresses */ +#define TIF_SME 27 /* SME in use */ #define TIF_SME_VL_INHERIT 28 /* Inherit SME vl_onexec across exec */ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 0af82c518979..d6e6bec6b490 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -355,6 +355,9 @@ static void task_fpsimd_load(void) WARN_ON(!system_supports_fpsimd()); WARN_ON(!have_cpu_fpsimd_context()); + if (IS_ENABLED(CONFIG_ARM64_SME) && test_thread_flag(TIF_SME)) + write_sysreg_s(current->thread.svcr, SYS_SVCR_EL0); + if (IS_ENABLED(CONFIG_ARM64_SVE) && test_thread_flag(TIF_SVE)) { sve_set_vq(sve_vq_from_vl(task_get_sve_vl(current)) - 1); sve_load_state(sve_pffr(¤t->thread), @@ -380,6 +383,10 @@ static void fpsimd_save(void) if (test_thread_flag(TIF_FOREIGN_FPSTATE)) return; + if (IS_ENABLED(CONFIG_ARM64_SME) && + test_thread_flag(TIF_SME)) + current->thread.svcr = read_sysreg_s(SYS_SVCR_EL0); + if (IS_ENABLED(CONFIG_ARM64_SVE) && test_thread_flag(TIF_SVE)) { if (WARN_ON(sve_get_vl() != last->sve_vl)) { @@ -731,6 +738,10 @@ int vec_set_vector_length(struct task_struct *task, enum vec_type type, if (test_and_clear_tsk_thread_flag(task, TIF_SVE)) sve_to_fpsimd(task); + if (system_supports_sme() && type == ARM64_VEC_SME) + task->thread.svcr &= ~(SYS_SVCR_EL0_SM_MASK | + SYS_SVCR_EL0_ZA_MASK); + if (task == current) put_cpu_fpsimd_context(); diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 3f4279ad68bc..4dd35619ece6 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -309,6 +309,8 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src) dst->thread.sve_state = NULL; clear_tsk_thread_flag(dst, TIF_SVE); + dst->thread.svcr = 0; + /* clear any pending asynchronous tag fault raised by the parent */ clear_tsk_thread_flag(dst, TIF_MTE_ASYNC_FAULT); -- 2.30.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel