mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00

CONFIG_PREEMPT is a preemtion model the so called "Low-Latency Desktop". A different preemption model is PREEMPT_RT the so called "Real-Time". Both implement preemption in kernel and set CONFIG_PREEMPTION. There is also the so called "LAZY PREEMPT" which the "Scheduler controlled preemption model". Here we have also preemption in the kernel the rules are slightly different. Therefore the testsuite should not check for CONFIG_PREEMPT (as one model) but for CONFIG_PREEMPTION to figure out if preemption in the kernel is possible. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Link: https://lore.kernel.org/r/20241119161819.qvEcs-n_@linutronix.de Signed-off-by: Alexei Starovoitov <ast@kernel.org>
48 lines
1.0 KiB
C
48 lines
1.0 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include "vmlinux.h"
|
|
#include <bpf/bpf_helpers.h>
|
|
#include <bpf/bpf_tracing.h>
|
|
|
|
char _license[] SEC("license") = "GPL";
|
|
|
|
#ifndef EBUSY
|
|
#define EBUSY 16
|
|
#endif
|
|
|
|
extern bool CONFIG_PREEMPTION __kconfig __weak;
|
|
int nr_get_errs = 0;
|
|
int nr_del_errs = 0;
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_TASK_STORAGE);
|
|
__uint(map_flags, BPF_F_NO_PREALLOC);
|
|
__type(key, int);
|
|
__type(value, int);
|
|
} task_storage SEC(".maps");
|
|
|
|
SEC("lsm.s/socket_post_create")
|
|
int BPF_PROG(socket_post_create, struct socket *sock, int family, int type,
|
|
int protocol, int kern)
|
|
{
|
|
struct task_struct *task;
|
|
int ret, zero = 0;
|
|
int *value;
|
|
|
|
if (!CONFIG_PREEMPTION)
|
|
return 0;
|
|
|
|
task = bpf_get_current_task_btf();
|
|
value = bpf_task_storage_get(&task_storage, task, &zero,
|
|
BPF_LOCAL_STORAGE_GET_F_CREATE);
|
|
if (!value)
|
|
__sync_fetch_and_add(&nr_get_errs, 1);
|
|
|
|
ret = bpf_task_storage_delete(&task_storage,
|
|
bpf_get_current_task_btf());
|
|
if (ret == -EBUSY)
|
|
__sync_fetch_and_add(&nr_del_errs, 1);
|
|
|
|
return 0;
|
|
}
|