linux/tools/testing/selftests/bpf/prog_tests/send_signal_sched_switch.c
<<
>>
Prefs
   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}
  62