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
  28void 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
  58destroy_skel:
  59        test_send_signal_kern__destroy(skel);
  60}
  61