From: Zhao Mengmeng <[email protected]>

When compiling sched_ext selftests using clang 17.0.6, it raised
compiler crash and build error:

Error at line 68: Unsupport signed division for DAG: 0x55b2f9a60240:
i64 = sdiv 0x55b2f9a609b0, Constant:i64<100>, peek_dsq.bpf.c:68:25 @[
peek_dsq.bpf.c:95:4 @[ peek_dsq.bpf.c:169:8 @[ peek
_dsq.bpf.c:140:6 ] ] ]Please convert to unsigned div/mod

After digging, it's not a compiler error, clang supported Signed division
only when using -mcpu=v4, while we use -mcpu=v3 currently, the better way
is to use unsigned div, see [1] for details.

[1] https://github.com/llvm/llvm-project/issues/70433

Signed-off-by: Zhao Mengmeng <[email protected]>
---
 tools/testing/selftests/sched_ext/peek_dsq.bpf.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/sched_ext/peek_dsq.bpf.c 
b/tools/testing/selftests/sched_ext/peek_dsq.bpf.c
index a3faf5bb49d6..784f2f6c1af9 100644
--- a/tools/testing/selftests/sched_ext/peek_dsq.bpf.c
+++ b/tools/testing/selftests/sched_ext/peek_dsq.bpf.c
@@ -58,14 +58,14 @@ static void record_peek_result(long pid)
 {
        u32 slot_key;
        long *slot_pid_ptr;
-       int ix;
+       u32 ix;
 
        if (pid <= 0)
                return;
 
        /* Find an empty slot or one with the same PID */
        bpf_for(ix, 0, 10) {
-               slot_key = (pid + ix) % MAX_SAMPLES;
+               slot_key = ((u64)pid + ix) % MAX_SAMPLES;
                slot_pid_ptr = bpf_map_lookup_elem(&peek_results, &slot_key);
                if (!slot_pid_ptr)
                        continue;
-- 
2.43.0


Reply via email to