Skip to content

Commit 5e992c6

Browse files
brooniewilldeacon
authored andcommitted
selftests: arm64: Add stress tests for FPSMID and SVE context switching
Add programs sve-test and fpsimd-test which spin reading and writing to the SVE and FPSIMD registers, verifying the operations they perform. The intended use is to leave them running to stress the context switch code's handling of these registers which isn't compatible with what kselftest does so they're not integrated into the framework but there's no other obvious testsuite where they fit so let's store them here. These tests were written by Dave Martin and lightly adapted by me. Signed-off-by: Mark Brown <broonie@kernel.org> Acked-by: Dave Martin <Dave.Martin@arm.com> Acked-by: Shuah Khan <skhan@linuxfoundation.org> Link: https://lore.kernel.org/r/20200819114837.51466-4-broonie@kernel.org Signed-off-by: Will Deacon <will@kernel.org>
1 parent 0dca276 commit 5e992c6

4 files changed

Lines changed: 1222 additions & 0 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#define sa_sz 32
2+
#define sa_flags 8
3+
#define sa_handler 0
4+
#define sa_mask_sz 8
5+
#define SIGUSR1 10
6+
#define SIGTERM 15
7+
#define SIGINT 2
8+
#define SIGABRT 6
9+
#define SA_NODEFER 1073741824
10+
#define SA_SIGINFO 4
11+
#define ucontext_regs 184
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
// Copyright (C) 2015-2019 ARM Limited.
3+
// Original author: Dave Martin <Dave.Martin@arm.com>
4+
5+
#ifndef ASSEMBLER_H
6+
#define ASSEMBLER_H
7+
8+
.macro __for from:req, to:req
9+
.if (\from) == (\to)
10+
_for__body %\from
11+
.else
12+
__for \from, %(\from) + ((\to) - (\from)) / 2
13+
__for %(\from) + ((\to) - (\from)) / 2 + 1, \to
14+
.endif
15+
.endm
16+
17+
.macro _for var:req, from:req, to:req, insn:vararg
18+
.macro _for__body \var:req
19+
.noaltmacro
20+
\insn
21+
.altmacro
22+
.endm
23+
24+
.altmacro
25+
__for \from, \to
26+
.noaltmacro
27+
28+
.purgem _for__body
29+
.endm
30+
31+
.macro function name
32+
.macro endfunction
33+
.type \name, @function
34+
.purgem endfunction
35+
.endm
36+
\name:
37+
.endm
38+
39+
.macro define_accessor name, num, insn
40+
.macro \name\()_entry n
41+
\insn \n, 1
42+
ret
43+
.endm
44+
45+
function \name
46+
adr x2, .L__accessor_tbl\@
47+
add x2, x2, x0, lsl #3
48+
br x2
49+
50+
.L__accessor_tbl\@:
51+
_for x, 0, (\num) - 1, \name\()_entry \x
52+
endfunction
53+
54+
.purgem \name\()_entry
55+
.endm
56+
57+
#endif /* ! ASSEMBLER_H */

0 commit comments

Comments
 (0)