Substitute sleep with dummy CPU intensive computation. Finish aforemention computation as soon as signal was delivered to the test process. Make the BPF code to only execute when PID global variable is set Signed-off-by: Mykola Lysenko <mykolal@fb.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/bpf/20220308200449.1757478-3-mykolal@fb.com
46 lines
875 B
C
46 lines
875 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
// Copyright (c) 2019 Facebook
|
|
#include <linux/bpf.h>
|
|
#include <linux/version.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
|
|
__u32 sig = 0, pid = 0, status = 0, signal_thread = 0;
|
|
|
|
static __always_inline int bpf_send_signal_test(void *ctx)
|
|
{
|
|
int ret;
|
|
|
|
if (status != 0 || pid == 0)
|
|
return 0;
|
|
|
|
if ((bpf_get_current_pid_tgid() >> 32) == pid) {
|
|
if (signal_thread)
|
|
ret = bpf_send_signal_thread(sig);
|
|
else
|
|
ret = bpf_send_signal(sig);
|
|
if (ret == 0)
|
|
status = 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
SEC("tracepoint/syscalls/sys_enter_nanosleep")
|
|
int send_signal_tp(void *ctx)
|
|
{
|
|
return bpf_send_signal_test(ctx);
|
|
}
|
|
|
|
SEC("tracepoint/sched/sched_switch")
|
|
int send_signal_tp_sched(void *ctx)
|
|
{
|
|
return bpf_send_signal_test(ctx);
|
|
}
|
|
|
|
SEC("perf_event")
|
|
int send_signal_perf(void *ctx)
|
|
{
|
|
return bpf_send_signal_test(ctx);
|
|
}
|
|
|
|
char __license[] SEC("license") = "GPL";
|