From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Martin Subject: [RFC PATCH 04/10] arm64/sve: Factor out clearing of tasks' SVE regs Date: Thu, 12 Jan 2017 11:26:03 +0000 Message-ID: <1484220369-23970-5-git-send-email-Dave.Martin@arm.com> References: <1484220369-23970-1-git-send-email-Dave.Martin@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1484220369-23970-1-git-send-email-Dave.Martin@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-arm-kernel@lists.infradead.org Cc: linux-arch@vger.kernel.org, Florian Weimer , libc-alpha@sourceware.org, Ard Biesheuvel , Marc Zyngier , gdb@sourceware.org, Yao Qi , Szabolcs Nagy , Joseph Myers , Alan Hayward , Torvald Riegel , Christoffer Dall List-Id: linux-arch.vger.kernel.org The patch factors out the code that clears a task's SVE regs on exec(), so that we can reuse it in subsequent patches. Signed-off-by: Dave Martin --- arch/arm64/kernel/fpsimd.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index ab2bb62..54d7ed0 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -260,6 +260,19 @@ void fpsimd_thread_switch(struct task_struct *next) } } +static void clear_sve_regs(struct task_struct *task) +{ + BUG_ON(task == current && preemptible()); + + BUG_ON((char *)__task_sve_state(task) < (char *)task); + BUG_ON(arch_task_struct_size < + ((char *)__task_sve_state(task) - (char *)task)); + + memset(__task_sve_state(task), 0, + arch_task_struct_size - + ((char *)__task_sve_state(task) - (char *)task)); +} + void fpsimd_flush_thread(void) { if (!system_supports_fpsimd()) @@ -272,13 +285,7 @@ void fpsimd_flush_thread(void) memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); if (IS_ENABLED(CONFIG_ARM64_SVE) && (elf_hwcap & HWCAP_SVE)) { - BUG_ON((char *)__task_sve_state(current) < (char *)current); - BUG_ON(arch_task_struct_size < - ((char *)__task_sve_state(current) - (char *)current)); - - memset(__task_sve_state(current), 0, - arch_task_struct_size - - ((char *)__task_sve_state(current) - (char *)current)); + clear_sve_regs(current); /* * User tasks must have a valid vector length set, but tasks -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com ([217.140.101.70]:43250 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751213AbdALL1y (ORCPT ); Thu, 12 Jan 2017 06:27:54 -0500 From: Dave Martin Subject: [RFC PATCH 04/10] arm64/sve: Factor out clearing of tasks' SVE regs Date: Thu, 12 Jan 2017 11:26:03 +0000 Message-ID: <1484220369-23970-5-git-send-email-Dave.Martin@arm.com> In-Reply-To: <1484220369-23970-1-git-send-email-Dave.Martin@arm.com> References: <1484220369-23970-1-git-send-email-Dave.Martin@arm.com> Sender: linux-arch-owner@vger.kernel.org List-ID: To: linux-arm-kernel@lists.infradead.org Cc: Ard Biesheuvel , Marc Zyngier , Alan Hayward , Christoffer Dall , linux-arch@vger.kernel.org, libc-alpha@sourceware.org, Florian Weimer , Joseph Myers , Szabolcs Nagy , Torvald Riegel , gdb@sourceware.org, Yao Qi Message-ID: <20170112112603.7-6rQk4UNFdT9amLNQWaRgnxjAs1XBqpygoILCpINjo@z> The patch factors out the code that clears a task's SVE regs on exec(), so that we can reuse it in subsequent patches. Signed-off-by: Dave Martin --- arch/arm64/kernel/fpsimd.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index ab2bb62..54d7ed0 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -260,6 +260,19 @@ void fpsimd_thread_switch(struct task_struct *next) } } +static void clear_sve_regs(struct task_struct *task) +{ + BUG_ON(task == current && preemptible()); + + BUG_ON((char *)__task_sve_state(task) < (char *)task); + BUG_ON(arch_task_struct_size < + ((char *)__task_sve_state(task) - (char *)task)); + + memset(__task_sve_state(task), 0, + arch_task_struct_size - + ((char *)__task_sve_state(task) - (char *)task)); +} + void fpsimd_flush_thread(void) { if (!system_supports_fpsimd()) @@ -272,13 +285,7 @@ void fpsimd_flush_thread(void) memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); if (IS_ENABLED(CONFIG_ARM64_SVE) && (elf_hwcap & HWCAP_SVE)) { - BUG_ON((char *)__task_sve_state(current) < (char *)current); - BUG_ON(arch_task_struct_size < - ((char *)__task_sve_state(current) - (char *)current)); - - memset(__task_sve_state(current), 0, - arch_task_struct_size - - ((char *)__task_sve_state(current) - (char *)current)); + clear_sve_regs(current); /* * User tasks must have a valid vector length set, but tasks -- 2.1.4