1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // 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)) {
- 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);
- 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;
- }
|