tools/sched_ext: Sync with scx repo
Synchronize with https://github.com/sched-ext/scx at d384453984a0 ("kernel:
Sync at ad3b301aa0 ("sched_ext: Provides a sysfs 'events' to expose core
event counters")").
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -7,6 +7,13 @@
|
||||
#ifndef __SCX_COMMON_BPF_H
|
||||
#define __SCX_COMMON_BPF_H
|
||||
|
||||
/*
|
||||
* The generated kfunc prototypes in vmlinux.h are missing address space
|
||||
* attributes which cause build failures. For now, suppress the generated
|
||||
* prototypes. See https://github.com/sched-ext/scx/issues/1111.
|
||||
*/
|
||||
#define BPF_NO_KFUNC_PROTOTYPES
|
||||
|
||||
#ifdef LSP
|
||||
#define __bpf__
|
||||
#include "../vmlinux.h"
|
||||
@@ -78,10 +85,7 @@ s32 scx_bpf_task_cpu(const struct task_struct *p) __ksym;
|
||||
struct rq *scx_bpf_cpu_rq(s32 cpu) __ksym;
|
||||
struct cgroup *scx_bpf_task_cgroup(struct task_struct *p) __ksym __weak;
|
||||
u64 scx_bpf_now(void) __ksym __weak;
|
||||
|
||||
void scx_bpf_events(struct scx_event_stats *events, size_t events__sz) __ksym __weak;
|
||||
#define scx_read_event(e, name) \
|
||||
(bpf_core_field_exists((e)->name) ? (e)->name : 0)
|
||||
|
||||
/*
|
||||
* Use the following as @it__iter when calling scx_bpf_dsq_move[_vtime]() from
|
||||
@@ -89,6 +93,9 @@ void scx_bpf_events(struct scx_event_stats *events, size_t events__sz) __ksym __
|
||||
*/
|
||||
#define BPF_FOR_EACH_ITER (&___it)
|
||||
|
||||
#define scx_read_event(e, name) \
|
||||
(bpf_core_field_exists((e)->name) ? (e)->name : 0)
|
||||
|
||||
static inline __attribute__((format(printf, 1, 2)))
|
||||
void ___scx_bpf_bstr_format_checker(const char *fmt, ...) {}
|
||||
|
||||
@@ -581,6 +588,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
||||
__u.__val; \
|
||||
})
|
||||
|
||||
#define READ_ONCE_ARENA(type, x) \
|
||||
({ \
|
||||
union { type __val; char __c[1]; } __u = \
|
||||
{ .__c = { 0 } }; \
|
||||
__read_once_size((void *)&(x), __u.__c, sizeof(x)); \
|
||||
__u.__val; \
|
||||
})
|
||||
|
||||
#define WRITE_ONCE_ARENA(type, x, val) \
|
||||
({ \
|
||||
union { type __val; char __c[1]; } __u = \
|
||||
{ .__val = (val) }; \
|
||||
__write_once_size((void *)&(x), __u.__c, sizeof(x)); \
|
||||
__u.__val; \
|
||||
})
|
||||
|
||||
/*
|
||||
* log2_u32 - Compute the base 2 logarithm of a 32-bit exponential value.
|
||||
* @v: The value for which we're computing the base 2 logarithm.
|
||||
|
||||
@@ -256,7 +256,6 @@ static int central_timerfn(void *map, int *key, struct bpf_timer *timer)
|
||||
u64 now = scx_bpf_now();
|
||||
u64 nr_to_kick = nr_queued;
|
||||
s32 i, curr_cpu;
|
||||
struct scx_event_stats events;
|
||||
|
||||
curr_cpu = bpf_get_smp_processor_id();
|
||||
if (timer_pinned && (curr_cpu != central_cpu)) {
|
||||
@@ -292,7 +291,6 @@ static int central_timerfn(void *map, int *key, struct bpf_timer *timer)
|
||||
|
||||
bpf_timer_start(timer, TIMER_INTERVAL_NS, BPF_F_TIMER_CPU_PIN);
|
||||
__sync_fetch_and_add(&nr_timers, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <unistd.h>
|
||||
#include <inttypes.h>
|
||||
#include <signal.h>
|
||||
#include <assert.h>
|
||||
#include <libgen.h>
|
||||
#include <bpf/bpf.h>
|
||||
#include <scx/common.h>
|
||||
@@ -60,14 +61,22 @@ restart:
|
||||
skel->rodata->nr_cpu_ids = libbpf_num_possible_cpus();
|
||||
skel->rodata->slice_ns = __COMPAT_ENUM_OR_ZERO("scx_public_consts", "SCX_SLICE_DFL");
|
||||
|
||||
assert(skel->rodata->nr_cpu_ids <= INT32_MAX);
|
||||
|
||||
while ((opt = getopt(argc, argv, "s:c:pvh")) != -1) {
|
||||
switch (opt) {
|
||||
case 's':
|
||||
skel->rodata->slice_ns = strtoull(optarg, NULL, 0) * 1000;
|
||||
break;
|
||||
case 'c':
|
||||
skel->rodata->central_cpu = strtoul(optarg, NULL, 0);
|
||||
case 'c': {
|
||||
u32 central_cpu = strtoul(optarg, NULL, 0);
|
||||
if (central_cpu >= skel->rodata->nr_cpu_ids) {
|
||||
fprintf(stderr, "invalid central CPU id value, %u given (%u max)\n", central_cpu, skel->rodata->nr_cpu_ids);
|
||||
return -1;
|
||||
}
|
||||
skel->rodata->central_cpu = (s32)central_cpu;
|
||||
break;
|
||||
}
|
||||
case 'v':
|
||||
verbose = true;
|
||||
break;
|
||||
@@ -96,7 +105,7 @@ restart:
|
||||
*/
|
||||
cpuset = CPU_ALLOC(skel->rodata->nr_cpu_ids);
|
||||
SCX_BUG_ON(!cpuset, "Failed to allocate cpuset");
|
||||
CPU_ZERO(cpuset);
|
||||
CPU_ZERO_S(CPU_ALLOC_SIZE(skel->rodata->nr_cpu_ids), cpuset);
|
||||
CPU_SET(skel->rodata->central_cpu, cpuset);
|
||||
SCX_BUG_ON(sched_setaffinity(0, sizeof(*cpuset), cpuset),
|
||||
"Failed to affinitize to central CPU %d (max %d)",
|
||||
|
||||
Reference in New Issue
Block a user