1 // SPDX-License-Identifier: GPL-2.0 2 #include <test_progs.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <sys/mman.h> 6 #include <pthread.h> 7 #include <sys/types.h> 8 #include <sys/stat.h> 9 #include <fcntl.h> 10 #include "test_send_signal_kern.skel.h" 11 12 static void sigusr1_handler(int signum) 13 { 14 } 15 16 #define THREAD_COUNT 100 17 18 static void *worker(void *p) 19 { 20 int i; 21 22 for ( i = 0; i < 1000; i++) 23 usleep(1); 24 25 return NULL; 26 } 27 28 void test_send_signal_sched_switch(void) 29 { 30 struct test_send_signal_kern *skel; 31 pthread_t threads[THREAD_COUNT]; 32 u32 duration = 0; 33 int i, err; 34 35 signal(SIGUSR1, sigusr1_handler); 36 37 skel = test_send_signal_kern__open_and_load(); 38 if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n")) 39 return; 40 41 skel->bss->pid = getpid(); 42 skel->bss->sig = SIGUSR1; 43 44 err = test_send_signal_kern__attach(skel); 45 if (CHECK(err, "skel_attach", "skeleton attach failed\n")) 46 goto destroy_skel; 47 48 for (i = 0; i < THREAD_COUNT; i++) { 49 err = pthread_create(threads + i, NULL, worker, NULL); 50 if (CHECK(err, "pthread_create", "Error creating thread, %s\n", 51 strerror(errno))) 52 goto destroy_skel; 53 } 54 55 for (i = 0; i < THREAD_COUNT; i++) 56 pthread_join(threads[i], NULL); 57 58 destroy_skel: 59 test_send_signal_kern__destroy(skel); 60 } 61