summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/ext.c14
-rw-r--r--kernel/sched/ext_arena.c5
2 files changed, 16 insertions, 3 deletions
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 83272acf1763..32ebbc351564 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -622,8 +622,12 @@ static inline void scx_call_op_set_cpumask(struct scx_sched *sch, struct rq *rq,
if (scx_is_cid_type()) {
struct scx_cmask *kern_va = *this_cpu_ptr(sch->set_cmask_scratch);
- unsigned long uaddr = (unsigned long)kern_va -
- bpf_arena_map_kern_vm_start(sch->arena_map);
+ unsigned long uaddr = (unsigned long)kern_va;
+
+ /* arena.o, which defines these, is built only on MMU && 64BIT */
+#if defined(CONFIG_MMU) && defined(CONFIG_64BIT)
+ uaddr -= bpf_arena_map_kern_vm_start(sch->arena_map);
+#endif
/*
* Build the per-CPU arena cmask and hand BPF the uaddr. Caller
* holds the rq lock with IRQs disabled, which makes us the sole
@@ -7992,8 +7996,12 @@ struct scx_arena_scan {
static int scx_arena_scan_prog(struct bpf_prog *prog, void *data)
{
struct scx_arena_scan *s = data;
- struct bpf_map *arena = bpf_prog_arena(prog);
+ struct bpf_map *arena = NULL;
+ /* arena.o, which defines these, is built only on MMU && 64BIT */
+#if defined(CONFIG_MMU) && defined(CONFIG_64BIT)
+ arena = bpf_prog_arena(prog);
+#endif
if (!arena)
return 0;
if (s->arena && s->arena != arena) {
diff --git a/kernel/sched/ext_arena.c b/kernel/sched/ext_arena.c
index b413e155ba6b..493c2424f842 100644
--- a/kernel/sched/ext_arena.c
+++ b/kernel/sched/ext_arena.c
@@ -80,7 +80,12 @@ static int scx_arena_grow(struct scx_sched *sch, u32 page_cnt)
return -ENOMEM;
uaddr32 = (u32)(unsigned long)p;
+ /* arena.o, which defines these, is built only on MMU && 64BIT */
+#if defined(CONFIG_MMU) && defined(CONFIG_64BIT)
kern_vm_start = bpf_arena_map_kern_vm_start(sch->arena_map);
+#else
+ kern_vm_start = 0;
+#endif
ret = gen_pool_add(sch->arena_pool, kern_vm_start + uaddr32,
page_cnt * PAGE_SIZE, NUMA_NO_NODE);