* [PATCH 00/10] sched_ext: Sync with scx upstream
@ 2025-07-23 12:07 Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 01/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c Cheng-Yang Chou
` (10 more replies)
0 siblings, 11 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
This series syncs 10 sched_ext source/header files with the latest scx
upstream via:
./sync-to-kernel.sh /path/to/kernel/tree
The updates ensure alignment with upstream development. Build tested
with `make -j`.
Thanks.
-chengyang
---
Cheng-Yang Chou (10):
sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c
sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c
sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c
sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c
sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c
sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c
sched_ext: Sync with scx upstream in
tools/sched_ext/include/scx/common.bpf.h
sched_ext: Sync with scx upstream in
tools/sched_ext/include/scx/common.h
sched_ext: Sync with scx upstream in
tools/sched_ext/include/scx/compat.bpf.h
sched_ext: Sync with scx upstream in
tools/sched_ext/include/scx/user_exit_info.h
tools/sched_ext/include/scx/common.bpf.h | 102 +++++++++++++++++--
tools/sched_ext/include/scx/common.h | 5 +-
tools/sched_ext/include/scx/compat.bpf.h | 5 +
tools/sched_ext/include/scx/user_exit_info.h | 49 +--------
tools/sched_ext/scx_central.bpf.c | 2 +-
tools/sched_ext/scx_central.c | 1 +
tools/sched_ext/scx_flatcg.bpf.c | 2 +-
tools/sched_ext/scx_flatcg.c | 2 +
tools/sched_ext/scx_qmap.bpf.c | 23 -----
tools/sched_ext/scx_simple.c | 2 +
10 files changed, 110 insertions(+), 83 deletions(-)
--
2.48.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 01/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 02/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c Cheng-Yang Chou
` (9 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_central.bpf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/sched_ext/scx_central.bpf.c b/tools/sched_ext/scx_central.bpf.c
index 50bc1737c167..55df8b798865 100644
--- a/tools/sched_ext/scx_central.bpf.c
+++ b/tools/sched_ext/scx_central.bpf.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
- * A central FIFO sched_ext scheduler which demonstrates the followings:
+ * A central FIFO sched_ext scheduler which demonstrates the following:
*
* a. Making all scheduling decisions from one CPU:
*
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 02/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 01/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 03/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c Cheng-Yang Chou
` (8 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_central.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/sched_ext/scx_central.c b/tools/sched_ext/scx_central.c
index 6ba6e610eeaa..55931a4cd71c 100644
--- a/tools/sched_ext/scx_central.c
+++ b/tools/sched_ext/scx_central.c
@@ -61,6 +61,7 @@ int main(int argc, char **argv)
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 > 0);
assert(skel->rodata->nr_cpu_ids <= INT32_MAX);
while ((opt = getopt(argc, argv, "s:c:pvh")) != -1) {
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 03/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 01/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 02/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 04/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c Cheng-Yang Chou
` (7 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_flatcg.bpf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/sched_ext/scx_flatcg.bpf.c b/tools/sched_ext/scx_flatcg.bpf.c
index fdc7170639e6..2c720e3ecad5 100644
--- a/tools/sched_ext/scx_flatcg.bpf.c
+++ b/tools/sched_ext/scx_flatcg.bpf.c
@@ -950,5 +950,5 @@ SCX_OPS_DEFINE(flatcg_ops,
.cgroup_move = (void *)fcg_cgroup_move,
.init = (void *)fcg_init,
.exit = (void *)fcg_exit,
- .flags = SCX_OPS_ENQ_EXITING,
+ .flags = SCX_OPS_HAS_CGROUP_WEIGHT | SCX_OPS_ENQ_EXITING,
.name = "flatcg");
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 04/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (2 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 03/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 05/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c Cheng-Yang Chou
` (6 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_flatcg.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/sched_ext/scx_flatcg.c b/tools/sched_ext/scx_flatcg.c
index 6dd423eeb4ff..cd85eb401179 100644
--- a/tools/sched_ext/scx_flatcg.c
+++ b/tools/sched_ext/scx_flatcg.c
@@ -6,6 +6,7 @@
*/
#include <stdio.h>
#include <signal.h>
+#include <assert.h>
#include <unistd.h>
#include <libgen.h>
#include <limits.h>
@@ -137,6 +138,7 @@ int main(int argc, char **argv)
skel = SCX_OPS_OPEN(flatcg_ops, scx_flatcg);
skel->rodata->nr_cpus = libbpf_num_possible_cpus();
+ assert(skel->rodata->nr_cpus > 0);
skel->rodata->cgrp_slice_ns = __COMPAT_ENUM_OR_ZERO("scx_public_consts", "SCX_SLICE_DFL");
while ((opt = getopt(argc, argv, "s:i:dfvh")) != -1) {
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 05/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (3 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 04/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 06/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c Cheng-Yang Chou
` (5 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_qmap.bpf.c | 23 -----------------------
1 file changed, 23 deletions(-)
diff --git a/tools/sched_ext/scx_qmap.bpf.c b/tools/sched_ext/scx_qmap.bpf.c
index 69d877501cb7..c3cd9a17d48e 100644
--- a/tools/sched_ext/scx_qmap.bpf.c
+++ b/tools/sched_ext/scx_qmap.bpf.c
@@ -615,26 +615,6 @@ void BPF_STRUCT_OPS(qmap_dump_task, struct scx_dump_ctx *dctx, struct task_struc
taskc->force_local, taskc->core_sched_seq);
}
-s32 BPF_STRUCT_OPS(qmap_cgroup_init, struct cgroup *cgrp, struct scx_cgroup_init_args *args)
-{
- bpf_printk("CGRP INIT %llu weight=%u period=%lu quota=%ld burst=%lu",
- cgrp->kn->id, args->weight, args->bw_period_us,
- args->bw_quota_us, args->bw_burst_us);
- return 0;
-}
-
-void BPF_STRUCT_OPS(qmap_cgroup_set_weight, struct cgroup *cgrp, u32 weight)
-{
- bpf_printk("CGRP SET %llu weight=%u", cgrp->kn->id, weight);
-}
-
-void BPF_STRUCT_OPS(qmap_cgroup_set_bandwidth, struct cgroup *cgrp,
- u64 period_us, u64 quota_us, u64 burst_us)
-{
- bpf_printk("CGRP SET %llu period=%lu quota=%ld burst=%lu", cgrp->kn->id,
- period_us, quota_us, burst_us);
-}
-
/*
* Print out the online and possible CPU map using bpf_printk() as a
* demonstration of using the cpumask kfuncs and ops.cpu_on/offline().
@@ -860,9 +840,6 @@ SCX_OPS_DEFINE(qmap_ops,
.dump = (void *)qmap_dump,
.dump_cpu = (void *)qmap_dump_cpu,
.dump_task = (void *)qmap_dump_task,
- .cgroup_init = (void *)qmap_cgroup_init,
- .cgroup_set_weight = (void *)qmap_cgroup_set_weight,
- .cgroup_set_bandwidth = (void *)qmap_cgroup_set_bandwidth,
.cpu_online = (void *)qmap_cpu_online,
.cpu_offline = (void *)qmap_cpu_offline,
.init = (void *)qmap_init,
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 06/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (4 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 05/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 07/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.bpf.h Cheng-Yang Chou
` (4 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/scx_simple.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/sched_ext/scx_simple.c b/tools/sched_ext/scx_simple.c
index 76d83199545c..06d4b13bf76b 100644
--- a/tools/sched_ext/scx_simple.c
+++ b/tools/sched_ext/scx_simple.c
@@ -7,6 +7,7 @@
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
+#include <assert.h>
#include <libgen.h>
#include <bpf/bpf.h>
#include <scx/common.h>
@@ -41,6 +42,7 @@ static void sigint_handler(int simple)
static void read_stats(struct scx_simple *skel, __u64 *stats)
{
int nr_cpus = libbpf_num_possible_cpus();
+ assert(nr_cpus > 0);
__u64 cnts[2][nr_cpus];
__u32 idx;
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 07/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.bpf.h
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (5 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 06/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 08/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.h Cheng-Yang Chou
` (3 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/include/scx/common.bpf.h | 102 +++++++++++++++++++++--
1 file changed, 93 insertions(+), 9 deletions(-)
diff --git a/tools/sched_ext/include/scx/common.bpf.h b/tools/sched_ext/include/scx/common.bpf.h
index d4e21558e982..86abdb3c3142 100644
--- a/tools/sched_ext/include/scx/common.bpf.h
+++ b/tools/sched_ext/include/scx/common.bpf.h
@@ -24,14 +24,26 @@
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include <asm-generic/errno.h>
-#include "user_exit_info.h"
+#include "user_exit_info.bpf.h"
#include "enum_defs.autogen.h"
+#define PF_IDLE 0x00000002 /* I am an IDLE thread */
+#define PF_IO_WORKER 0x00000010 /* Task is an IO worker */
#define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */
+#define PF_KCOMPACTD 0x00010000 /* I am kcompactd */
+#define PF_KSWAPD 0x00020000 /* I am kswapd */
#define PF_KTHREAD 0x00200000 /* I am a kernel thread */
#define PF_EXITING 0x00000004
#define CLOCK_MONOTONIC 1
+#ifndef NR_CPUS
+#define NR_CPUS 1024
+#endif
+
+#ifndef NUMA_NO_NODE
+#define NUMA_NO_NODE (-1)
+#endif
+
extern int LINUX_KERNEL_VERSION __kconfig;
extern const char CONFIG_CC_VERSION_TEXT[64] __kconfig __weak;
extern const char CONFIG_LOCALVERSION[64] __kconfig __weak;
@@ -107,6 +119,9 @@ void scx_bpf_events(struct scx_event_stats *events, size_t events__sz) __ksym __
static inline __attribute__((format(printf, 1, 2)))
void ___scx_bpf_bstr_format_checker(const char *fmt, ...) {}
+#define SCX_STRINGIFY(x) #x
+#define SCX_TOSTRING(x) SCX_STRINGIFY(x)
+
/*
* Helper macro for initializing the fmt and variadic argument inputs to both
* bstr exit kfuncs. Callers to this function should use ___fmt and ___param to
@@ -141,13 +156,15 @@ void ___scx_bpf_bstr_format_checker(const char *fmt, ...) {}
* scx_bpf_error() wraps the scx_bpf_error_bstr() kfunc with variadic arguments
* instead of an array of u64. Invoking this macro will cause the scheduler to
* exit in an erroneous state, with diagnostic information being passed to the
- * user.
+ * user. It appends the file and line number to aid debugging.
*/
#define scx_bpf_error(fmt, args...) \
({ \
- scx_bpf_bstr_preamble(fmt, args) \
+ scx_bpf_bstr_preamble( \
+ __FILE__ ":" SCX_TOSTRING(__LINE__) ": " fmt, ##args) \
scx_bpf_error_bstr(___fmt, ___param, sizeof(___param)); \
- ___scx_bpf_bstr_format_checker(fmt, ##args); \
+ ___scx_bpf_bstr_format_checker( \
+ __FILE__ ":" SCX_TOSTRING(__LINE__) ": " fmt, ##args); \
})
/*
@@ -229,6 +246,7 @@ BPF_PROG(name, ##args)
* be a pointer to the area. Use `MEMBER_VPTR(*ptr, .member)` instead of
* `MEMBER_VPTR(ptr, ->member)`.
*/
+#ifndef MEMBER_VPTR
#define MEMBER_VPTR(base, member) (typeof((base) member) *) \
({ \
u64 __base = (u64)&(base); \
@@ -245,6 +263,7 @@ BPF_PROG(name, ##args)
[max]"i"(sizeof(base) - sizeof((base) member))); \
__addr; \
})
+#endif /* MEMBER_VPTR */
/**
* ARRAY_ELEM_PTR - Obtain the verified pointer to an array element
@@ -260,6 +279,7 @@ BPF_PROG(name, ##args)
* size of the array to compute the max, which will result in rejection by
* the verifier.
*/
+#ifndef ARRAY_ELEM_PTR
#define ARRAY_ELEM_PTR(arr, i, n) (typeof(arr[i]) *) \
({ \
u64 __base = (u64)arr; \
@@ -274,7 +294,7 @@ BPF_PROG(name, ##args)
[max]"r"(sizeof(arr[0]) * ((n) - 1))); \
__addr; \
})
-
+#endif /* ARRAY_ELEM_PTR */
/*
* BPF declarations and helpers
@@ -438,8 +458,27 @@ static __always_inline const struct cpumask *cast_mask(struct bpf_cpumask *mask)
*/
static inline bool is_migration_disabled(const struct task_struct *p)
{
- if (bpf_core_field_exists(p->migration_disabled))
- return p->migration_disabled;
+ /*
+ * Testing p->migration_disabled in a BPF code is tricky because the
+ * migration is _always_ disabled while running the BPF code.
+ * The prolog (__bpf_prog_enter) and epilog (__bpf_prog_exit) for BPF
+ * code execution disable and re-enable the migration of the current
+ * task, respectively. So, the _current_ task of the sched_ext ops is
+ * always migration-disabled. Moreover, p->migration_disabled could be
+ * two or greater when a sched_ext ops BPF code (e.g., ops.tick) is
+ * executed in the middle of the other BPF code execution.
+ *
+ * Therefore, we should decide that the _current_ task is
+ * migration-disabled only when its migration_disabled count is greater
+ * than one. In other words, when p->migration_disabled == 1, there is
+ * an ambiguity, so we should check if @p is the current task or not.
+ */
+ if (bpf_core_field_exists(p->migration_disabled)) {
+ if (p->migration_disabled == 1)
+ return bpf_get_current_task_btf() != p;
+ else
+ return p->migration_disabled;
+ }
return false;
}
@@ -476,7 +515,7 @@ static inline s64 time_delta(u64 after, u64 before)
*/
static inline bool time_after(u64 a, u64 b)
{
- return (s64)(b - a) < 0;
+ return (s64)(b - a) < 0;
}
/**
@@ -500,7 +539,7 @@ static inline bool time_before(u64 a, u64 b)
*/
static inline bool time_after_eq(u64 a, u64 b)
{
- return (s64)(a - b) >= 0;
+ return (s64)(a - b) >= 0;
}
/**
@@ -547,9 +586,15 @@ static inline bool time_in_range_open(u64 a, u64 b, u64 c)
*/
/* useful compiler attributes */
+#ifndef likely
#define likely(x) __builtin_expect(!!(x), 1)
+#endif
+#ifndef unlikely
#define unlikely(x) __builtin_expect(!!(x), 0)
+#endif
+#ifndef __maybe_unused
#define __maybe_unused __attribute__((__unused__))
+#endif
/*
* READ/WRITE_ONCE() are from kernel (include/asm-generic/rwonce.h). They
@@ -632,6 +677,26 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
__u.__val; \
})
+/*
+ * __calc_avg - Calculate exponential weighted moving average (EWMA) with
+ * @old and @new values. @decay represents how large the @old value remains.
+ * With a larger @decay value, the moving average changes slowly, exhibiting
+ * fewer fluctuations.
+ */
+#define __calc_avg(old, new, decay) ({ \
+ typeof(decay) thr = 1 << (decay); \
+ typeof(old) ret; \
+ if (((old) < thr) || ((new) < thr)) { \
+ if (((old) == 1) && ((new) == 0)) \
+ ret = 0; \
+ else \
+ ret = ((old) - ((old) >> 1)) + ((new) >> 1); \
+ } else { \
+ ret = ((old) - ((old) >> (decay))) + ((new) >> (decay)); \
+ } \
+ ret; \
+})
+
/*
* 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.
@@ -662,6 +727,25 @@ static inline u32 log2_u64(u64 v)
return log2_u32(v) + 1;
}
+/*
+ * sqrt_u64 - Calculate the square root of value @x using Newton's method.
+ */
+static inline u64 __sqrt_u64(u64 x)
+{
+ if (x == 0 || x == 1)
+ return x;
+
+ u64 r = ((1ULL << 32) > x) ? x : (1ULL << 32);
+
+ for (int i = 0; i < 8; ++i) {
+ u64 q = x / r;
+ if (r <= q)
+ break;
+ r = (r + q) >> 1;
+ }
+ return r;
+}
+
/*
* Return a value proportionally scaled to the task's weight.
*/
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 08/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.h
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (6 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 07/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.bpf.h Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 09/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/compat.bpf.h Cheng-Yang Chou
` (2 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/include/scx/common.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/tools/sched_ext/include/scx/common.h b/tools/sched_ext/include/scx/common.h
index 1dc76bd84296..b3c6372bcf81 100644
--- a/tools/sched_ext/include/scx/common.h
+++ b/tools/sched_ext/include/scx/common.h
@@ -75,8 +75,9 @@ typedef int64_t s64;
#include "enums.h"
/* not available when building kernel tools/sched_ext */
-#if __has_include(<lib/sdt_task.h>)
-#include <lib/sdt_task.h>
+#if __has_include(<lib/sdt_task_defs.h>)
+#include "bpf_arena_common.h"
+#include <lib/sdt_task_defs.h>
#endif
#endif /* __SCHED_EXT_COMMON_H */
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 09/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/compat.bpf.h
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (7 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 08/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.h Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 10/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/user_exit_info.h Cheng-Yang Chou
2025-07-23 12:12 ` [PATCH 00/10] sched_ext: Sync with scx upstream Andrea Righi
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/include/scx/compat.bpf.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tools/sched_ext/include/scx/compat.bpf.h b/tools/sched_ext/include/scx/compat.bpf.h
index 9252e1a00556..36e0cd2fd4ed 100644
--- a/tools/sched_ext/include/scx/compat.bpf.h
+++ b/tools/sched_ext/include/scx/compat.bpf.h
@@ -38,6 +38,7 @@ void scx_bpf_dispatch_from_dsq_set_slice___compat(struct bpf_iter_scx_dsq *it__i
void scx_bpf_dispatch_from_dsq_set_vtime___compat(struct bpf_iter_scx_dsq *it__iter, u64 vtime) __ksym __weak;
bool scx_bpf_dispatch_from_dsq___compat(struct bpf_iter_scx_dsq *it__iter, struct task_struct *p, u64 dsq_id, u64 enq_flags) __ksym __weak;
bool scx_bpf_dispatch_vtime_from_dsq___compat(struct bpf_iter_scx_dsq *it__iter, struct task_struct *p, u64 dsq_id, u64 enq_flags) __ksym __weak;
+int bpf_cpumask_populate(struct cpumask *dst, void *src, size_t src__sz) __ksym __weak;
#define scx_bpf_dsq_insert(p, dsq_id, slice, enq_flags) \
(bpf_ksym_exists(scx_bpf_dsq_insert) ? \
@@ -82,6 +83,10 @@ bool scx_bpf_dispatch_vtime_from_dsq___compat(struct bpf_iter_scx_dsq *it__iter,
scx_bpf_dispatch_vtime_from_dsq___compat((it__iter), (p), (dsq_id), (enq_flags)) : \
false))
+#define __COMPAT_bpf_cpumask_populate(cpumask, src, size__sz) \
+ (bpf_ksym_exists(bpf_cpumask_populate) ? \
+ (bpf_cpumask_populate(cpumask, src, size__sz)) : -EOPNOTSUPP)
+
#define scx_bpf_dispatch(p, dsq_id, slice, enq_flags) \
_Static_assert(false, "scx_bpf_dispatch() renamed to scx_bpf_dsq_insert()")
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 10/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/user_exit_info.h
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (8 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 09/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/compat.bpf.h Cheng-Yang Chou
@ 2025-07-23 12:07 ` Cheng-Yang Chou
2025-07-23 12:12 ` [PATCH 00/10] sched_ext: Sync with scx upstream Andrea Righi
10 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:07 UTC (permalink / raw)
To: sched-ext; +Cc: tj, void, arighi, changwoo, jserv, yphbchou0911
Sync via ./sync-to-kernel.sh /path/to/kernel/tree, as suggested by
the upstream scx repository.
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
tools/sched_ext/include/scx/user_exit_info.h | 49 +-------------------
1 file changed, 2 insertions(+), 47 deletions(-)
diff --git a/tools/sched_ext/include/scx/user_exit_info.h b/tools/sched_ext/include/scx/user_exit_info.h
index 66f856640ee7..399697fa372f 100644
--- a/tools/sched_ext/include/scx/user_exit_info.h
+++ b/tools/sched_ext/include/scx/user_exit_info.h
@@ -10,55 +10,11 @@
#ifndef __USER_EXIT_INFO_H
#define __USER_EXIT_INFO_H
-#ifdef LSP
-#define __bpf__
-#include "../vmlinux.h"
-#endif
-
-enum uei_sizes {
- UEI_REASON_LEN = 128,
- UEI_MSG_LEN = 1024,
- UEI_DUMP_DFL_LEN = 32768,
-};
-
-struct user_exit_info {
- int kind;
- s64 exit_code;
- char reason[UEI_REASON_LEN];
- char msg[UEI_MSG_LEN];
-};
-
-#ifdef __bpf__
-
-#ifndef LSP
-#include "vmlinux.h"
-#endif
-#include <bpf/bpf_core_read.h>
-
-#define UEI_DEFINE(__name) \
- char RESIZABLE_ARRAY(data, __name##_dump); \
- const volatile u32 __name##_dump_len; \
- struct user_exit_info __name SEC(".data")
-
-#define UEI_RECORD(__uei_name, __ei) ({ \
- bpf_probe_read_kernel_str(__uei_name.reason, \
- sizeof(__uei_name.reason), (__ei)->reason); \
- bpf_probe_read_kernel_str(__uei_name.msg, \
- sizeof(__uei_name.msg), (__ei)->msg); \
- bpf_probe_read_kernel_str(__uei_name##_dump, \
- __uei_name##_dump_len, (__ei)->dump); \
- if (bpf_core_field_exists((__ei)->exit_code)) \
- __uei_name.exit_code = (__ei)->exit_code; \
- /* use __sync to force memory barrier */ \
- __sync_val_compare_and_swap(&__uei_name.kind, __uei_name.kind, \
- (__ei)->kind); \
-})
-
-#else /* !__bpf__ */
-
#include <stdio.h>
#include <stdbool.h>
+#include "user_exit_info_common.h"
+
/* no need to call the following explicitly if SCX_OPS_LOAD() is used */
#define UEI_SET_SIZE(__skel, __ops_name, __uei_name) ({ \
u32 __len = (__skel)->struct_ops.__ops_name->exit_dump_len ?: UEI_DUMP_DFL_LEN; \
@@ -114,5 +70,4 @@ enum uei_ecode_mask {
#define UEI_ECODE_RESTART(__ecode) (UEI_ECODE_SYS_ACT((__ecode)) == SCX_ECODE_ACT_RESTART)
-#endif /* __bpf__ */
#endif /* __USER_EXIT_INFO_H */
--
2.48.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 00/10] sched_ext: Sync with scx upstream
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
` (9 preceding siblings ...)
2025-07-23 12:07 ` [PATCH 10/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/user_exit_info.h Cheng-Yang Chou
@ 2025-07-23 12:12 ` Andrea Righi
2025-07-23 12:21 ` Cheng-Yang Chou
10 siblings, 1 reply; 13+ messages in thread
From: Andrea Righi @ 2025-07-23 12:12 UTC (permalink / raw)
To: Cheng-Yang Chou; +Cc: sched-ext, tj, void, changwoo, jserv
On Wed, Jul 23, 2025 at 08:07:36PM +0800, Cheng-Yang Chou wrote:
> This series syncs 10 sched_ext source/header files with the latest scx
> upstream via:
>
> ./sync-to-kernel.sh /path/to/kernel/tree
>
> The updates ensure alignment with upstream development. Build tested
> with `make -j`.
>
> Thanks.
>
> -chengyang
I don't think splitting the patch set into multiple per-file patches is
very helpful for review. Since this is a single logical change, I think
it's better to include all the changes in a single patch.
Thanks,
-Andrea
>
> ---
>
> Cheng-Yang Chou (10):
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c
> sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c
> sched_ext: Sync with scx upstream in
> tools/sched_ext/include/scx/common.bpf.h
> sched_ext: Sync with scx upstream in
> tools/sched_ext/include/scx/common.h
> sched_ext: Sync with scx upstream in
> tools/sched_ext/include/scx/compat.bpf.h
> sched_ext: Sync with scx upstream in
> tools/sched_ext/include/scx/user_exit_info.h
>
> tools/sched_ext/include/scx/common.bpf.h | 102 +++++++++++++++++--
> tools/sched_ext/include/scx/common.h | 5 +-
> tools/sched_ext/include/scx/compat.bpf.h | 5 +
> tools/sched_ext/include/scx/user_exit_info.h | 49 +--------
> tools/sched_ext/scx_central.bpf.c | 2 +-
> tools/sched_ext/scx_central.c | 1 +
> tools/sched_ext/scx_flatcg.bpf.c | 2 +-
> tools/sched_ext/scx_flatcg.c | 2 +
> tools/sched_ext/scx_qmap.bpf.c | 23 -----
> tools/sched_ext/scx_simple.c | 2 +
> 10 files changed, 110 insertions(+), 83 deletions(-)
>
> --
> 2.48.1
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 00/10] sched_ext: Sync with scx upstream
2025-07-23 12:12 ` [PATCH 00/10] sched_ext: Sync with scx upstream Andrea Righi
@ 2025-07-23 12:21 ` Cheng-Yang Chou
0 siblings, 0 replies; 13+ messages in thread
From: Cheng-Yang Chou @ 2025-07-23 12:21 UTC (permalink / raw)
To: Andrea Righi; +Cc: sched-ext, tj, void, changwoo, jserv
On Wed, Jul 23, 2025 at 02:12:20PM +0200, Andrea Righi wrote:
> On Wed, Jul 23, 2025 at 08:07:36PM +0800, Cheng-Yang Chou wrote:
>
> I don't think splitting the patch set into multiple per-file patches is
> very helpful for review. Since this is a single logical change, I think
> it's better to include all the changes in a single patch.
>
> Thanks,
> -Andrea
Thanks for the review and suggestion.
I agree that this change is logically one unit.
I'll squash the patches into a single commit and resend.
Thanks.
-chengyang
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-07-23 12:21 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-23 12:07 [PATCH 00/10] sched_ext: Sync with scx upstream Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 01/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.bpf.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 02/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_central.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 03/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.bpf.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 04/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_flatcg.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 05/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_qmap.bpf.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 06/10] sched_ext: Sync with scx upstream in tools/sched_ext/scx_simple.c Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 07/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.bpf.h Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 08/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/common.h Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 09/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/compat.bpf.h Cheng-Yang Chou
2025-07-23 12:07 ` [PATCH 10/10] sched_ext: Sync with scx upstream in tools/sched_ext/include/scx/user_exit_info.h Cheng-Yang Chou
2025-07-23 12:12 ` [PATCH 00/10] sched_ext: Sync with scx upstream Andrea Righi
2025-07-23 12:21 ` Cheng-Yang Chou
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.