Skip to content

Commit 1badac4

Browse files
compudjKAGA-KOKO
authored andcommitted
rseq/selftests: Provide basic test
"basic_test" only asserts that RSEQ works moderately correctly. E.g. that the CPUID pointer works. Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: Joel Fernandes <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Catalin Marinas <[email protected]> Cc: Dave Watson <[email protected]> Cc: Will Deacon <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Andi Kleen <[email protected]> Cc: [email protected] Cc: "H . Peter Anvin" <[email protected]> Cc: Chris Lameter <[email protected]> Cc: Russell King <[email protected]> Cc: Andrew Hunter <[email protected]> Cc: Michael Kerrisk <[email protected]> Cc: "Paul E . McKenney" <[email protected]> Cc: Paul Turner <[email protected]> Cc: Boqun Feng <[email protected]> Cc: Josh Triplett <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Ben Maurer <[email protected]> Cc: [email protected] Cc: Andy Lutomirski <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Linus Torvalds <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 2e155fb commit 1badac4

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// SPDX-License-Identifier: LGPL-2.1
2+
/*
3+
* Basic test coverage for critical regions and rseq_current_cpu().
4+
*/
5+
6+
#define _GNU_SOURCE
7+
#include <assert.h>
8+
#include <sched.h>
9+
#include <signal.h>
10+
#include <stdio.h>
11+
#include <string.h>
12+
#include <sys/time.h>
13+
14+
#include "rseq.h"
15+
16+
void test_cpu_pointer(void)
17+
{
18+
cpu_set_t affinity, test_affinity;
19+
int i;
20+
21+
sched_getaffinity(0, sizeof(affinity), &affinity);
22+
CPU_ZERO(&test_affinity);
23+
for (i = 0; i < CPU_SETSIZE; i++) {
24+
if (CPU_ISSET(i, &affinity)) {
25+
CPU_SET(i, &test_affinity);
26+
sched_setaffinity(0, sizeof(test_affinity),
27+
&test_affinity);
28+
assert(sched_getcpu() == i);
29+
assert(rseq_current_cpu() == i);
30+
assert(rseq_current_cpu_raw() == i);
31+
assert(rseq_cpu_start() == i);
32+
CPU_CLR(i, &test_affinity);
33+
}
34+
}
35+
sched_setaffinity(0, sizeof(affinity), &affinity);
36+
}
37+
38+
int main(int argc, char **argv)
39+
{
40+
if (rseq_register_current_thread()) {
41+
fprintf(stderr, "Error: rseq_register_current_thread(...) failed(%d): %s\n",
42+
errno, strerror(errno));
43+
goto init_thread_error;
44+
}
45+
printf("testing current cpu\n");
46+
test_cpu_pointer();
47+
if (rseq_unregister_current_thread()) {
48+
fprintf(stderr, "Error: rseq_unregister_current_thread(...) failed(%d): %s\n",
49+
errno, strerror(errno));
50+
goto init_thread_error;
51+
}
52+
return 0;
53+
54+
init_thread_error:
55+
return -1;
56+
}

0 commit comments

Comments
 (0)