• Peter Zijlstra's avatar
    sched: fix regression with sched yield · 79b3feff
    Peter Zijlstra authored
    Balbir Singh reported:
    
    > 1:mon> t
    > [c0000000e7677da0] c000000000067de0 .sys_sched_yield+0x6c/0xbc
    > [c0000000e7677e30] c000000000008748 syscall_exit+0x0/0x40
    > --- Exception: c01 (System Call) at 00000400001d09e4
    > SP (4000664cb10) is in userspace
    > 1:mon> r
    > cpu 0x1: Vector: 300 (Data Access) at [c0000000e7677aa0]
    >     pc: c000000000068e50: .yield_task_fair+0x94/0xc4
    >     lr: c000000000067de0: .sys_sched_yield+0x6c/0xbc
    
    the check that should have avoided that is:
    
            /*
             * Are we the only task in the tree?
             */
            if (unlikely(rq->load.weight == curr->se.load.weight))
                    return;
    
    But I guess that overlooks rt tasks, they also increase the load.
    So I guess something like this ought to fix it..
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    79b3feff
sched_fair.c 34.8 KB