Thread (69 messages) 69 messages, 6 authors, 2021-10-14

Re: [PATCH v1 24/38] arm64/sme: Implement traps and syscall handling for SME

From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
Date: 2021-10-11 12:40:07
Also in: linux-kselftest

On Thu, 30 Sep 2021 19:11:30 +0100
Mark Brown [off-list ref] wrote:
By default all SME operations in userspace will trap.  When this happens
we allocate storage space for the SME register state, set up the SVE
registers and disable traps.  We do not need to initialize ZA since the
architecture guarantees that it will be zeroed when enabled and when we
trap ZA is disabled.

On syscall we exit streaming mode if we were previously in it and ensure
that all but the lower 128 bits of the registers are zeroed while
preserving the state of ZA. This follows the aarch64 PCS for SME, ZA
state is preserved over a function call and streaming mode is exited.
Since the traps for SME do not distinguish between streaming mode SVE
and ZA usage if ZA is in use rather than reenabling traps we instead
zero the parts of the SVE registers not shared with FPSIMD and leave SME
enabled, this simplifies handling SME traps. If ZA is not in use then we
reenable SME traps and fall through to normal handling of SVE.

Signed-off-by: Mark Brown <broonie@kernel.org>
...  continuing the trivial theme of my review today...

 
 	/*
 	 * task_fpsimd_load() won't be called to update CPACR_EL1 in
-	 * ret_to_user unless TIF_FOREIGN_FPSTATE is still set, which only
-	 * happens if a context switch or kernel_neon_begin() or context
-	 * modification (sigreturn, ptrace) intervenes.
-	 * So, ensure that CPACR_EL1 is already correct for the fast-path case.
+	 * ret_to_user unless TIF_FOREIGN_FPSTATE is still set, which
+	 * only happens if a context switch or kernel_neon_begin() or
Why the rewrap here?
+	 * context modification (sigreturn, ptrace) intervenes.  So,
+	 * ensure that CPACR_EL1 is already correct for the fast-path
+	 * case.
 	 */
 	sve_user_disable();
 }
 
 void do_el0_svc(struct pt_regs *regs)
 {
-	sve_user_discard();
+	fp_user_discard();
 	el0_svc_common(regs, regs->regs[8], __NR_syscalls, sys_call_table);
 }
 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help