• Peter Zijlstra's avatar
    sched/completions: Fix complete_all() semantics · da9647e0
    Peter Zijlstra authored
    Documentation/scheduler/completion.txt says this about complete_all():
    
      "calls complete_all() to signal all current and future waiters."
    
    Which doesn't strictly match the current semantics. Currently
    complete_all() is equivalent to UINT_MAX/2 complete() invocations,
    which is distinctly less than 'all current and future waiters'
    (enumerable vs innumerable), although it has worked in practice.
    
    However, Dmitry had a weird case where it might matter, so change
    completions to use saturation semantics for complete()/complete_all().
    Once done hits UINT_MAX (and complete_all() sets it there) it will
    never again be decremented.
    Requested-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: der.herr@hofr.at
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    da9647e0
completion.c 9.71 KB