send_signal_sched_switch.c (1291B)
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 12static void sigusr1_handler(int signum) 13{ 14} 15 16#define THREAD_COUNT 100 17 18static 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/* NOTE: cause events loss */ 29void serial_test_send_signal_sched_switch(void) 30{ 31 struct test_send_signal_kern *skel; 32 pthread_t threads[THREAD_COUNT]; 33 u32 duration = 0; 34 int i, err; 35 36 signal(SIGUSR1, sigusr1_handler); 37 38 skel = test_send_signal_kern__open_and_load(); 39 if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n")) 40 return; 41 42 skel->bss->pid = getpid(); 43 skel->bss->sig = SIGUSR1; 44 45 err = test_send_signal_kern__attach(skel); 46 if (CHECK(err, "skel_attach", "skeleton attach failed\n")) 47 goto destroy_skel; 48 49 for (i = 0; i < THREAD_COUNT; i++) { 50 err = pthread_create(threads + i, NULL, worker, NULL); 51 if (CHECK(err, "pthread_create", "Error creating thread, %s\n", 52 strerror(errno))) 53 goto destroy_skel; 54 } 55 56 for (i = 0; i < THREAD_COUNT; i++) 57 pthread_join(threads[i], NULL); 58 59destroy_skel: 60 test_send_signal_kern__destroy(skel); 61}