lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 091/132] Documentation/locking/locktypes: Update migrate_disable() bits.
    Date
    From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

    commit 6a631c0432dcccbcf45839016a07c015e335e9ae upstream.

    The initial implementation of migrate_disable() for mainline was a
    wrapper around preempt_disable(). RT kernels substituted this with
    a real migrate disable implementation.

    Later on mainline gained true migrate disable support, but the
    documentation was not updated.

    Update the documentation, remove the claims about migrate_disable()
    mapping to preempt_disable() on non-PREEMPT_RT kernels.

    Fixes: 74d862b682f51 ("sched: Make migrate_disable/enable() independent of RT")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20211127163200.10466-2-bigeasy@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    Documentation/locking/locktypes.rst | 9 +++------
    1 file changed, 3 insertions(+), 6 deletions(-)

    --- a/Documentation/locking/locktypes.rst
    +++ b/Documentation/locking/locktypes.rst
    @@ -439,11 +439,9 @@ preemption. The following substitution w
    spin_lock(&p->lock);
    p->count += this_cpu_read(var2);

    -On a non-PREEMPT_RT kernel migrate_disable() maps to preempt_disable()
    -which makes the above code fully equivalent. On a PREEMPT_RT kernel
    migrate_disable() ensures that the task is pinned on the current CPU which
    in turn guarantees that the per-CPU access to var1 and var2 are staying on
    -the same CPU.
    +the same CPU while the task remains preemptible.

    The migrate_disable() substitution is not valid for the following
    scenario::
    @@ -456,9 +454,8 @@ scenario::
    p = this_cpu_ptr(&var1);
    p->val = func2();

    -While correct on a non-PREEMPT_RT kernel, this breaks on PREEMPT_RT because
    -here migrate_disable() does not protect against reentrancy from a
    -preempting task. A correct substitution for this case is::
    +This breaks because migrate_disable() does not protect against reentrancy from
    +a preempting task. A correct substitution for this case is::

    func()
    {

    \
     
     \ /
      Last update: 2021-12-13 11:14    [W:4.231 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site