Merge tag 'soc-ep93xx-dt-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-block.git] / tools / testing / selftests / bpf / prog_tests / send_signal_sched_switch.c
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 /* NOTE: cause events loss */
29 void 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
59 destroy_skel:
60         test_send_signal_kern__destroy(skel);
61 }