* [PATCH 1/3] sched_ext: remove SCX_OPS_HAS_CGROUP_WEIGHT
2026-03-06 7:31 [PATCH 0/3] sched_ext cleanup and toolchain compatibility fixes Zhao Mengmeng
@ 2026-03-06 7:31 ` Zhao Mengmeng
2026-03-06 7:31 ` [PATCH 2/3] tools/sched_ext: Update scx enum autogens Zhao Mengmeng
2026-03-06 7:31 ` [PATCH 3/3] tools/sched_ext: scx_sdt: Fix BPF verifier rejection on older LLVMs Zhao Mengmeng
2 siblings, 0 replies; 6+ messages in thread
From: Zhao Mengmeng @ 2026-03-06 7:31 UTC (permalink / raw)
To: tj, void, arighi, changwoo, nathan, nick.desaulniers+lkml, morbo,
justinstitt, emil
Cc: sched-ext, linux-kernel, bpf, llvm, zhaomengmeng
From: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
While running scx_flatcg, dmesg prints "SCX_OPS_HAS_CGROUP_WEIGHT is
deprecated and a noop", in code, SCX_OPS_HAS_CGROUP_WEIGHT has been
marked as DEPRECATED, and will be removed on 6.18. Now it's time to do it.
Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
---
kernel/sched/ext.c | 3 ---
kernel/sched/ext_internal.h | 8 +-------
tools/sched_ext/scx_flatcg.bpf.c | 2 +-
3 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index b9247c9f0430..fd83af17d46d 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -5062,9 +5062,6 @@ static int validate_ops(struct scx_sched *sch, const struct sched_ext_ops *ops)
return -EINVAL;
}
- if (ops->flags & SCX_OPS_HAS_CGROUP_WEIGHT)
- pr_warn("SCX_OPS_HAS_CGROUP_WEIGHT is deprecated and a noop\n");
-
if (ops->cpu_acquire || ops->cpu_release)
pr_warn("ops->cpu_acquire/release() are deprecated, use sched_switch TP instead\n");
diff --git a/kernel/sched/ext_internal.h b/kernel/sched/ext_internal.h
index bd26811fea99..3c86c53e1975 100644
--- a/kernel/sched/ext_internal.h
+++ b/kernel/sched/ext_internal.h
@@ -174,19 +174,13 @@ enum scx_ops_flags {
*/
SCX_OPS_BUILTIN_IDLE_PER_NODE = 1LLU << 6,
- /*
- * CPU cgroup support flags
- */
- SCX_OPS_HAS_CGROUP_WEIGHT = 1LLU << 16, /* DEPRECATED, will be removed on 6.18 */
-
SCX_OPS_ALL_FLAGS = SCX_OPS_KEEP_BUILTIN_IDLE |
SCX_OPS_ENQ_LAST |
SCX_OPS_ENQ_EXITING |
SCX_OPS_ENQ_MIGRATION_DISABLED |
SCX_OPS_ALLOW_QUEUED_WAKEUP |
SCX_OPS_SWITCH_PARTIAL |
- SCX_OPS_BUILTIN_IDLE_PER_NODE |
- SCX_OPS_HAS_CGROUP_WEIGHT,
+ SCX_OPS_BUILTIN_IDLE_PER_NODE,
/* high 8 bits are internal, don't include in SCX_OPS_ALL_FLAGS */
__SCX_OPS_INTERNAL_MASK = 0xffLLU << 56,
diff --git a/tools/sched_ext/scx_flatcg.bpf.c b/tools/sched_ext/scx_flatcg.bpf.c
index 0e785cff0f24..a8a9234bb41e 100644
--- a/tools/sched_ext/scx_flatcg.bpf.c
+++ b/tools/sched_ext/scx_flatcg.bpf.c
@@ -960,5 +960,5 @@ SCX_OPS_DEFINE(flatcg_ops,
.cgroup_move = (void *)fcg_cgroup_move,
.init = (void *)fcg_init,
.exit = (void *)fcg_exit,
- .flags = SCX_OPS_HAS_CGROUP_WEIGHT | SCX_OPS_ENQ_EXITING,
+ .flags = SCX_OPS_ENQ_EXITING,
.name = "flatcg");
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/3] tools/sched_ext: Update scx enum autogens
2026-03-06 7:31 [PATCH 0/3] sched_ext cleanup and toolchain compatibility fixes Zhao Mengmeng
2026-03-06 7:31 ` [PATCH 1/3] sched_ext: remove SCX_OPS_HAS_CGROUP_WEIGHT Zhao Mengmeng
@ 2026-03-06 7:31 ` Zhao Mengmeng
2026-03-06 14:40 ` Andrea Righi
2026-03-06 7:31 ` [PATCH 3/3] tools/sched_ext: scx_sdt: Fix BPF verifier rejection on older LLVMs Zhao Mengmeng
2 siblings, 1 reply; 6+ messages in thread
From: Zhao Mengmeng @ 2026-03-06 7:31 UTC (permalink / raw)
To: tj, void, arighi, changwoo, nathan, nick.desaulniers+lkml, morbo,
justinstitt, emil
Cc: sched-ext, linux-kernel, bpf, llvm, zhaomengmeng
From: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Use scripts in scx repo to update these autogen files:
1. enum_defs.autogen.h: Remove SCX_OPS_HAS_CGROUP_WEIGHT, add other new
enums
2. enums.autogen.bpf.h and enums.autogen.h: Remove SCX_RQ_BAL_PENDING and
Use python scripts generation instead of manual edit style.
Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
---
.../sched_ext/include/scx/enum_defs.autogen.h | 26 ++++++++++++++-----
.../sched_ext/include/scx/enums.autogen.bpf.h | 4 +--
tools/sched_ext/include/scx/enums.autogen.h | 3 +--
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/tools/sched_ext/include/scx/enum_defs.autogen.h b/tools/sched_ext/include/scx/enum_defs.autogen.h
index dcc945304760..0f4ee052c0ef 100644
--- a/tools/sched_ext/include/scx/enum_defs.autogen.h
+++ b/tools/sched_ext/include/scx/enum_defs.autogen.h
@@ -14,7 +14,11 @@
#define HAVE_SCX_EXIT_MSG_LEN
#define HAVE_SCX_EXIT_DUMP_DFL_LEN
#define HAVE_SCX_CPUPERF_ONE
-#define HAVE_SCX_OPS_TASK_ITER_BATCH
+#define HAVE_SCX_TASK_ITER_BATCH
+#define HAVE_SCX_BYPASS_LB_DFL_INTV_US
+#define HAVE_SCX_BYPASS_LB_DONOR_PCT
+#define HAVE_SCX_BYPASS_LB_MIN_DELTA_DIV
+#define HAVE_SCX_BYPASS_LB_BATCH
#define HAVE_SCX_CPU_PREEMPT_RT
#define HAVE_SCX_CPU_PREEMPT_DL
#define HAVE_SCX_CPU_PREEMPT_STOP
@@ -27,6 +31,7 @@
#define HAVE_SCX_DSQ_INVALID
#define HAVE_SCX_DSQ_GLOBAL
#define HAVE_SCX_DSQ_LOCAL
+#define HAVE_SCX_DSQ_BYPASS
#define HAVE_SCX_DSQ_LOCAL_ON
#define HAVE_SCX_DSQ_LOCAL_CPU_MASK
#define HAVE_SCX_DSQ_ITER_REV
@@ -36,6 +41,10 @@
#define HAVE___SCX_DSQ_ITER_ALL_FLAGS
#define HAVE_SCX_DSQ_LNODE_ITER_CURSOR
#define HAVE___SCX_DSQ_LNODE_PRIV_SHIFT
+#define HAVE_SCX_ENABLING
+#define HAVE_SCX_ENABLED
+#define HAVE_SCX_DISABLING
+#define HAVE_SCX_DISABLED
#define HAVE_SCX_ENQ_WAKEUP
#define HAVE_SCX_ENQ_HEAD
#define HAVE_SCX_ENQ_CPU_SELECTED
@@ -45,8 +54,10 @@
#define HAVE___SCX_ENQ_INTERNAL_MASK
#define HAVE_SCX_ENQ_CLEAR_OPSS
#define HAVE_SCX_ENQ_DSQ_PRIQ
+#define HAVE_SCX_ENQ_NESTED
#define HAVE_SCX_TASK_DSQ_ON_PRIQ
#define HAVE_SCX_TASK_QUEUED
+#define HAVE_SCX_TASK_IN_CUSTODY
#define HAVE_SCX_TASK_RESET_RUNNABLE_AT
#define HAVE_SCX_TASK_DEQD_FOR_SLEEP
#define HAVE_SCX_TASK_STATE_SHIFT
@@ -55,6 +66,7 @@
#define HAVE_SCX_TASK_CURSOR
#define HAVE_SCX_ECODE_RSN_HOTPLUG
#define HAVE_SCX_ECODE_ACT_RESTART
+#define HAVE_SCX_EFLAG_INITIALIZED
#define HAVE_SCX_EXIT_NONE
#define HAVE_SCX_EXIT_DONE
#define HAVE_SCX_EXIT_UNREG
@@ -81,33 +93,33 @@
#define HAVE_SCX_OPI_CPU_HOTPLUG_BEGIN
#define HAVE_SCX_OPI_CPU_HOTPLUG_END
#define HAVE_SCX_OPI_END
-#define HAVE_SCX_OPS_ENABLING
-#define HAVE_SCX_OPS_ENABLED
-#define HAVE_SCX_OPS_DISABLING
-#define HAVE_SCX_OPS_DISABLED
#define HAVE_SCX_OPS_KEEP_BUILTIN_IDLE
#define HAVE_SCX_OPS_ENQ_LAST
#define HAVE_SCX_OPS_ENQ_EXITING
#define HAVE_SCX_OPS_SWITCH_PARTIAL
#define HAVE_SCX_OPS_ENQ_MIGRATION_DISABLED
#define HAVE_SCX_OPS_ALLOW_QUEUED_WAKEUP
-#define HAVE_SCX_OPS_HAS_CGROUP_WEIGHT
+#define HAVE_SCX_OPS_BUILTIN_IDLE_PER_NODE
#define HAVE_SCX_OPS_ALL_FLAGS
+#define HAVE___SCX_OPS_INTERNAL_MASK
+#define HAVE_SCX_OPS_HAS_CPU_PREEMPT
#define HAVE_SCX_OPSS_NONE
#define HAVE_SCX_OPSS_QUEUEING
#define HAVE_SCX_OPSS_QUEUED
#define HAVE_SCX_OPSS_DISPATCHING
#define HAVE_SCX_OPSS_QSEQ_SHIFT
#define HAVE_SCX_PICK_IDLE_CORE
+#define HAVE_SCX_PICK_IDLE_IN_NODE
#define HAVE_SCX_OPS_NAME_LEN
#define HAVE_SCX_SLICE_DFL
+#define HAVE_SCX_SLICE_BYPASS
#define HAVE_SCX_SLICE_INF
#define HAVE_SCX_RQ_ONLINE
#define HAVE_SCX_RQ_CAN_STOP_TICK
-#define HAVE_SCX_RQ_BAL_PENDING
#define HAVE_SCX_RQ_BAL_KEEP
#define HAVE_SCX_RQ_BYPASSING
#define HAVE_SCX_RQ_CLK_VALID
+#define HAVE_SCX_RQ_BAL_CB_PENDING
#define HAVE_SCX_RQ_IN_WAKEUP
#define HAVE_SCX_RQ_IN_BALANCE
#define HAVE_SCX_TASK_NONE
diff --git a/tools/sched_ext/include/scx/enums.autogen.bpf.h b/tools/sched_ext/include/scx/enums.autogen.bpf.h
index 5da50f937684..2b9540f0b3d5 100644
--- a/tools/sched_ext/include/scx/enums.autogen.bpf.h
+++ b/tools/sched_ext/include/scx/enums.autogen.bpf.h
@@ -19,9 +19,6 @@ const volatile u64 __SCX_RQ_ONLINE __weak;
const volatile u64 __SCX_RQ_CAN_STOP_TICK __weak;
#define SCX_RQ_CAN_STOP_TICK __SCX_RQ_CAN_STOP_TICK
-const volatile u64 __SCX_RQ_BAL_PENDING __weak;
-#define SCX_RQ_BAL_PENDING __SCX_RQ_BAL_PENDING
-
const volatile u64 __SCX_RQ_BAL_KEEP __weak;
#define SCX_RQ_BAL_KEEP __SCX_RQ_BAL_KEEP
@@ -129,3 +126,4 @@ const volatile u64 __SCX_ENQ_DSQ_PRIQ __weak;
const volatile u64 __SCX_DEQ_SCHED_CHANGE __weak;
#define SCX_DEQ_SCHED_CHANGE __SCX_DEQ_SCHED_CHANGE
+
diff --git a/tools/sched_ext/include/scx/enums.autogen.h b/tools/sched_ext/include/scx/enums.autogen.h
index fc9a7a4d9dea..c615cb323f8b 100644
--- a/tools/sched_ext/include/scx/enums.autogen.h
+++ b/tools/sched_ext/include/scx/enums.autogen.h
@@ -10,7 +10,6 @@
SCX_ENUM_SET(skel, scx_public_consts, SCX_SLICE_INF); \
SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_ONLINE); \
SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_CAN_STOP_TICK); \
- SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_BAL_PENDING); \
SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_BAL_KEEP); \
SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_BYPASSING); \
SCX_ENUM_SET(skel, scx_rq_flags, SCX_RQ_CLK_VALID); \
@@ -46,5 +45,5 @@
SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_LAST); \
SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_CLEAR_OPSS); \
SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_DSQ_PRIQ); \
- SCX_ENUM_SET(skel, scx_deq_flags, SCX_DEQ_SCHED_CHANGE); \
+ SCX_ENUM_SET(skel, scx_enq_flags, SCX_DEQ_SCHED_CHANGE); \
} while (0)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] tools/sched_ext: Update scx enum autogens
2026-03-06 7:31 ` [PATCH 2/3] tools/sched_ext: Update scx enum autogens Zhao Mengmeng
@ 2026-03-06 14:40 ` Andrea Righi
2026-03-07 1:54 ` Zhao mengmeng
0 siblings, 1 reply; 6+ messages in thread
From: Andrea Righi @ 2026-03-06 14:40 UTC (permalink / raw)
To: Zhao Mengmeng
Cc: tj, void, changwoo, nathan, nick.desaulniers+lkml, morbo,
justinstitt, emil, sched-ext, linux-kernel, bpf, llvm,
zhaomengmeng
On Fri, Mar 06, 2026 at 03:31:09PM +0800, Zhao Mengmeng wrote:
> From: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
...
> @@ -46,5 +45,5 @@
> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_LAST); \
> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_CLEAR_OPSS); \
> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_DSQ_PRIQ); \
> - SCX_ENUM_SET(skel, scx_deq_flags, SCX_DEQ_SCHED_CHANGE); \
> + SCX_ENUM_SET(skel, scx_enq_flags, SCX_DEQ_SCHED_CHANGE); \
This is wrong, SCX_DEQ_SCHED_CHANGE is moved from scx_deq_flags to
scx_enq_flags.
-Andrea
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] tools/sched_ext: Update scx enum autogens
2026-03-06 14:40 ` Andrea Righi
@ 2026-03-07 1:54 ` Zhao mengmeng
0 siblings, 0 replies; 6+ messages in thread
From: Zhao mengmeng @ 2026-03-07 1:54 UTC (permalink / raw)
To: Andrea Righi
Cc: tj, void, changwoo, nathan, nick.desaulniers+lkml, morbo,
justinstitt, emil, sched-ext, linux-kernel, bpf, llvm,
zhaomengmeng
On March 6, 2026 10:40:18 PM GMT+08:00, Andrea Righi <arighi@nvidia.com> wrote:
>On Fri, Mar 06, 2026 at 03:31:09PM +0800, Zhao Mengmeng wrote:
>> From: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
>...
>> @@ -46,5 +45,5 @@
>> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_LAST); \
>> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_CLEAR_OPSS); \
>> SCX_ENUM_SET(skel, scx_enq_flags, SCX_ENQ_DSQ_PRIQ); \
>> - SCX_ENUM_SET(skel, scx_deq_flags, SCX_DEQ_SCHED_CHANGE); \
>> + SCX_ENUM_SET(skel, scx_enq_flags, SCX_DEQ_SCHED_CHANGE); \
>
>This is wrong, SCX_DEQ_SCHED_CHANGE is moved from scx_deq_flags to
>scx_enq_flags.
>
>-Andrea
Thanks a lot. I will send a v2 fix.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] tools/sched_ext: scx_sdt: Fix BPF verifier rejection on older LLVMs
2026-03-06 7:31 [PATCH 0/3] sched_ext cleanup and toolchain compatibility fixes Zhao Mengmeng
2026-03-06 7:31 ` [PATCH 1/3] sched_ext: remove SCX_OPS_HAS_CGROUP_WEIGHT Zhao Mengmeng
2026-03-06 7:31 ` [PATCH 2/3] tools/sched_ext: Update scx enum autogens Zhao Mengmeng
@ 2026-03-06 7:31 ` Zhao Mengmeng
2 siblings, 0 replies; 6+ messages in thread
From: Zhao Mengmeng @ 2026-03-06 7:31 UTC (permalink / raw)
To: tj, void, arighi, changwoo, nathan, nick.desaulniers+lkml, morbo,
justinstitt, emil
Cc: sched-ext, linux-kernel, bpf, llvm, zhaomengmeng
From: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Under Clang 17/18, when running scx_sdt scheduler, it fails with:
libbpf: prog 'sdt_init_task': BPF program load failed: -EACCES
libbpf: prog 'sdt_init_task': -- BEGIN PROG LOAD LOG --
...
; desc = desc_find_empty(alloc->root, &idx); @ scx_sdt.bpf.c:479
43: (79) r8 = *(u64 *)(r6 +32) ; frame1: R6=map_value(map=scx_sdt.bss,ks=4,vs=200,off=120) R8=scalar()
; for (level = zero; level < SDT_TASK_LEVELS && can_loop; level++) { @ scx_sdt.bpf.c:407
44: (e5) may_goto pc+51
; idx |= pos; @ scx_sdt.bpf.c:418
96: (bf) r7 = r2 ; frame1: R2=0 R7=0
97: (bf) r1 = r10 ; frame1: R1=fp0 R10=fp0
; @ scx_sdt.bpf.c:0
98: (07) r1 += -56 ; frame1: R1=fp-56
; bpf_for(u, 0, SDT_TASK_LEVELS) { @ scx_sdt.bpf.c:447
99: (b4) w2 = 0 ; frame1: R2=0
100: (b4) w3 = 3 ; frame1: R3=3
101: (85) call bpf_iter_num_new#82234 ; frame1: R0=scalar() fp-56=iter_num(ref_id=2,state=active,depth=0)
102: (18) r9 = 0x1ffffffffffffff8 ; frame1: R9=0x1ffffffffffffff8
104: (bf) r1 = r10 ; frame1: R1=fp0 R10=fp0
; @ scx_sdt.bpf.c:0
105: (07) r1 += -56 ; frame1: R1=fp-56
; bpf_for(u, 0, SDT_TASK_LEVELS) { @ scx_sdt.bpf.c:447
106: (85) call bpf_iter_num_next#82235 ; frame1: R0=0 fp-56=iter_num(ref_id=2,state=drained,depth=0)
107: (15) if r0 == 0x0 goto pc+29 ; frame1: R0=0
; if (tmp->nr_free > 0) @ scx_sdt.bpf.c:456
137: (bf) r1 = r10 ; frame1: R1=fp0 R10=fp0
; bpf_for(u, 0, SDT_TASK_LEVELS) { @ scx_sdt.bpf.c:447
138: (07) r1 += -56 ; frame1: R1=fp-56
139: (85) call bpf_iter_num_destroy#82232 ; frame1:
140: (b7) r9 = 0 ; frame1: R9=0
; if (unlikely(desc == NULL)) { @ scx_sdt.bpf.c:480
141: (15) if r8 == 0x0 goto pc+15 ; frame1: R8=scalar(umin=1)
; chunk = desc->chunk; @ scx_sdt.bpf.c:485
142: (79) r4 = *(u64 *)(r8 +72)
R8 invalid mem access 'scalar'
The reason is these older compilers lacks native support for
__BPF_FEATURE_ADDR_SPACE_CAST, __arena macro is defined as empty.
Fix it by adding cast_kern when dereferencing variables with __arena tag.
Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
---
tools/sched_ext/scx_sdt.bpf.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/tools/sched_ext/scx_sdt.bpf.c b/tools/sched_ext/scx_sdt.bpf.c
index 31b09958e8d5..caacc55bd7a5 100644
--- a/tools/sched_ext/scx_sdt.bpf.c
+++ b/tools/sched_ext/scx_sdt.bpf.c
@@ -148,6 +148,7 @@ static sdt_desc_t *scx_alloc_chunk(void)
out = desc;
+ cast_kern(desc);
desc->nr_free = SDT_TASK_ENTS_PER_CHUNK;
desc->chunk = chunk;
@@ -244,6 +245,7 @@ int mark_nodes_avail(sdt_desc_t *lv_desc[SDT_TASK_LEVELS], __u64 lv_pos[SDT_TASK
/* Only propagate upwards if we are the parent's only free chunk. */
desc = lv_desc[level];
+ cast_kern(desc);
ret = set_idx_state(desc, lv_pos[level], false);
if (unlikely(ret != 0))
return ret;
@@ -298,20 +300,26 @@ int scx_alloc_free_idx(struct scx_allocator *alloc, __u64 idx)
if (level == SDT_TASK_LEVELS - 1)
break;
+ cast_kern(desc);
chunk = desc->chunk;
+ cast_kern(chunk);
desc_children = (sdt_desc_t * __arena *)chunk->descs;
+ cast_kern(desc_children);
desc = desc_children[pos];
if (unlikely(!desc))
return -EINVAL;
}
+ cast_kern(desc);
chunk = desc->chunk;
pos = idx & mask;
+ cast_kern(chunk);
data = chunk->data[pos];
if (likely(data)) {
+ cast_kern(data);
*data = (struct sdt_data) {
.tid.genn = data->tid.genn + 1,
};
@@ -378,6 +386,7 @@ __u64 chunk_find_empty(sdt_desc_t __arg_arena *desc)
__u64 freeslots;
__u64 i;
+ cast_kern(desc);
for (i = 0; i < SDT_TASK_CHUNK_BITMAP_U64S; i++) {
freeslots = ~desc->allocated[i];
if (freeslots == (__u64)0)
@@ -426,9 +435,12 @@ static sdt_desc_t * desc_find_empty(sdt_desc_t *desc, __u64 *idxp)
break;
/* Allocate an internal node if necessary. */
+ cast_kern(desc);
chunk = desc->chunk;
+ cast_kern(chunk);
desc_children = (sdt_desc_t * __arena *)chunk->descs;
+ cast_kern(desc_children);
desc = desc_children[pos];
if (!desc) {
desc = scx_alloc_chunk();
@@ -448,6 +460,7 @@ static sdt_desc_t * desc_find_empty(sdt_desc_t *desc, __u64 *idxp)
level = SDT_TASK_LEVELS - 1 - u;
tmp = lv_desc[level];
+ cast_kern(tmp);
ret = set_idx_state(tmp, lv_pos[level], true);
if (ret != 0)
break;
@@ -482,10 +495,12 @@ void __arena *scx_alloc(struct scx_allocator *alloc)
return NULL;
}
+ cast_kern(desc);
chunk = desc->chunk;
/* Populate the leaf node if necessary. */
pos = idx & (SDT_TASK_ENTS_PER_CHUNK - 1);
+ cast_kern(chunk);
data = chunk->data[pos];
if (!data) {
data = scx_alloc_from_pool(&alloc->pool);
@@ -503,10 +518,12 @@ void __arena *scx_alloc(struct scx_allocator *alloc)
alloc_stats.alloc_ops += 1;
alloc_stats.active_allocs += 1;
+ cast_kern(data);
data->tid.idx = idx;
bpf_spin_unlock(&alloc_lock);
+ cast_user(data);
return data;
}
@@ -544,9 +561,10 @@ void __arena *scx_task_alloc(struct task_struct *p)
if (unlikely(!data))
return NULL;
+ mval->data = data;
+ cast_kern(data);
mval->tid = data->tid;
mval->tptr = (__u64) p;
- mval->data = data;
return (void __arena *)data->payload;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread