• Tejun Heo's avatar
    sched_ext: Initialize in bypass mode · 8c2090c5
    Tejun Heo authored
    scx_ops_enable() used preempt_disable() around the task iteration loop to
    switch tasks into SCX to guarantee forward progress of the task which is
    running scx_ops_enable(). However, in the gap between setting
    __scx_ops_enabled and preeempt_disable(), an external entity can put tasks
    including the enabling one into SCX prematurely, which can lead to
    malfunctions including stalls.
    
    The bypass mode can wrap the entire enabling operation and guarantee forward
    progress no matter what the BPF scheduler does. Use the bypass mode instead
    to guarantee forward progress while enabling.
    
    While at it, release and regrab scx_tasks_lock between the two task
    iteration locks in scx_ops_enable() for clarity as there is no reason to
    keep holding the lock between them.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    8c2090c5
ext.c 204 KB