Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061// SPDX-License-Identifier: LGPL-2.1/* * Basic test coverage for critical regions and rseq_current_cpu(). */
#define _GNU_SOURCE#include <assert.h>#include <sched.h>#include <signal.h>#include <stdio.h>#include <string.h>#include <sys/time.h>
#include "rseq.h"
void test_cpu_pointer(void){ cpu_set_t affinity, test_affinity; int i;
sched_getaffinity(0, sizeof(affinity), &affinity); CPU_ZERO(&test_affinity); for (i = 0; i < CPU_SETSIZE; i++) { if (CPU_ISSET(i, &affinity)) { int node;
CPU_SET(i, &test_affinity); sched_setaffinity(0, sizeof(test_affinity), &test_affinity); assert(sched_getcpu() == i); assert(rseq_current_cpu() == i); assert(rseq_current_cpu_raw() == i); assert(rseq_cpu_start() == i); node = rseq_fallback_current_node(); assert(rseq_current_node_id() == node); CPU_CLR(i, &test_affinity); } } sched_setaffinity(0, sizeof(affinity), &affinity);}
int main(int argc, char **argv){ if (rseq_register_current_thread()) { fprintf(stderr, "Error: rseq_register_current_thread(...) failed(%d): %s\n", errno, strerror(errno)); goto init_thread_error; } printf("testing current cpu\n"); test_cpu_pointer(); if (rseq_unregister_current_thread()) { fprintf(stderr, "Error: rseq_unregister_current_thread(...) failed(%d): %s\n", errno, strerror(errno)); goto init_thread_error; } return 0;
init_thread_error: return -1;}