Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <test_progs.h>
0003 #include <stdio.h>
0004 #include <stdlib.h>
0005 #include <sys/mman.h>
0006 #include <pthread.h>
0007 #include <sys/types.h>
0008 #include <sys/stat.h>
0009 #include <fcntl.h>
0010 #include "test_send_signal_kern.skel.h"
0011 
0012 static void sigusr1_handler(int signum)
0013 {
0014 }
0015 
0016 #define THREAD_COUNT 100
0017 
0018 static void *worker(void *p)
0019 {
0020     int i;
0021 
0022     for ( i = 0; i < 1000; i++)
0023         usleep(1);
0024 
0025     return NULL;
0026 }
0027 
0028 /* NOTE: cause events loss */
0029 void serial_test_send_signal_sched_switch(void)
0030 {
0031     struct test_send_signal_kern *skel;
0032     pthread_t threads[THREAD_COUNT];
0033     u32 duration = 0;
0034     int i, err;
0035 
0036     signal(SIGUSR1, sigusr1_handler);
0037 
0038     skel = test_send_signal_kern__open_and_load();
0039     if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n"))
0040         return;
0041 
0042     skel->bss->pid = getpid();
0043     skel->bss->sig = SIGUSR1;
0044 
0045     err = test_send_signal_kern__attach(skel);
0046     if (CHECK(err, "skel_attach", "skeleton attach failed\n"))
0047         goto destroy_skel;
0048 
0049     for (i = 0; i < THREAD_COUNT; i++) {
0050         err = pthread_create(threads + i, NULL, worker, NULL);
0051         if (CHECK(err, "pthread_create", "Error creating thread, %s\n",
0052               strerror(errno)))
0053             goto destroy_skel;
0054     }
0055 
0056     for (i = 0; i < THREAD_COUNT; i++)
0057         pthread_join(threads[i], NULL);
0058 
0059 destroy_skel:
0060     test_send_signal_kern__destroy(skel);
0061 }