• Paul E. McKenney's avatar
    rcu-tasks: Add trc_inspect_reader() checks for exiting critical section · 18f08e75
    Paul E. McKenney authored
    Currently, trc_inspect_reader() treats a task exiting its RCU Tasks
    Trace read-side critical section the same as being within that critical
    section.  However, this can fail because that task might have already
    checked its .need_qs field, which means that it might never decrement
    the all-important trc_n_readers_need_end counter.  Of course, for that
    to happen, the task would need to never again execute an RCU Tasks Trace
    read-side critical section, but this really could happen if the system's
    last trampoline was removed.  Note that exit from such a critical section
    cannot be treated as a quiescent state due to the possibility of nested
    critical sections.  This means that if trc_inspect_reader() sees a
    negative nesting value, it must set up to try again later.
    
    This commit therefore ignores tasks that are exiting their RCU Tasks
    Trace read-side critical sections so that they will be rechecked later.
    
    [ paulmck: Apply feedback from Neeraj Upadhyay and Boqun Feng. ]
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    18f08e75
tasks.h 47.4 KB