Skip to content

fix(PrioritizedRRScheduler): solve intra-scheduler priority inversion#637

Merged
ytakano merged 2 commits intomainfrom
fix_priority_inversion_prioritized_rr
Aug 21, 2025
Merged

fix(PrioritizedRRScheduler): solve intra-scheduler priority inversion#637
ytakano merged 2 commits intomainfrom
fix_priority_inversion_prioritized_rr

Conversation

@atsushi421
Copy link
Contributor

@atsushi421 atsushi421 commented Aug 21, 2025

Description

This solves the intra-PrioritizedRRScheduler priority inversion same as PrioritizedFIFOScheduler.

I added the execution_ensured flag into get_next_task() to call it from invoke_preemption_tick(). Without execution_ensured flag, the set_current_task() would be called on primary CPU.

Related links

Design Document

How was this PR tested?

test_prioritized_rr

[         3678 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:11: test_prioritized_rr
[         3742 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=0, priority=0
[         3774 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=1, priority=1
[         3789 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=2, priority=0
[         3790 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=3, priority=1
[         3822 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=6, priority=0
[         3838 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=5, priority=1
[         3966 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=6, priority=0
[         4014 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=7, priority=1
[         4222 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=4, priority=0
[         4510 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=7, priority=1
[         4685 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=4, priority=0
[         4749 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=3, priority=1
[         4749 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=0, priority=0
[         4893 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=3, priority=1
[         4973 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=6, priority=0
[         5229 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=6, priority=0
[         5309 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=3, priority=1
[         5421 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=2, priority=0
[         5517 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=8, priority=0
[         5517 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=5, priority=1
[         5581 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=4, priority=0
[         5629 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=6, priority=0
[         5661 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=1, priority=1
[         5789 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=1, priority=1
[         5789 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=4, priority=0
[         5789 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=2, priority=0
[         5853 DEBUG] /home/atsushi/awkernel/applications/tests/test_prioritized_rr/src/lib.rs:19: infinite loop task, no=3, priority=1
...

Notes for reviewers

The model checking for PrioritizedRRScheduler is future work: https://star4.slack.com/archives/C054R6DL5KL/p1755674859080839?thread_ts=1755671470.801559&cid=C054R6DL5KL

Signed-off-by: atsushi421 <atsushi.yano.2@tier4.jp>
@ytakano ytakano merged commit 22599d4 into main Aug 21, 2025
1 check passed
@ytakano ytakano deleted the fix_priority_inversion_prioritized_rr branch August 21, 2025 05:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants