• Paul E. McKenney's avatar
    rcu: Abstract out rcu_irq_enter_check_tick() from rcu_nmi_enter() · aaf2bc50
    Paul E. McKenney authored
    There will likely be exception handlers that can sleep, which rules
    out the usual approach of invoking rcu_nmi_enter() on entry and also
    rcu_nmi_exit() on all exit paths.  However, the alternative approach of
    just not calling anything can prevent RCU from coaxing quiescent states
    from nohz_full CPUs that are looping in the kernel:  RCU must instead
    IPI them explicitly.  It would be better to enable the scheduler tick
    on such CPUs to interact with RCU in a lighter-weight manner, and this
    enabling is one of the things that rcu_nmi_enter() currently does.
    
    What is needed is something that helps RCU coax quiescent states while
    not preventing subsequent sleeps.  This commit therefore splits out the
    nohz_full scheduler-tick enabling from the rest of the rcu_nmi_enter()
    logic into a new function named rcu_irq_enter_check_tick().
    
    [ tglx: Renamed the function and made it a nop when context tracking is off ]
    [ mingo: Fixed a CONFIG_NO_HZ_FULL assumption, harmonized and fixed all the
             comment blocks and cleaned up rcu_nmi_enter()/exit() definitions. ]
    Suggested-by: default avatarAndy Lutomirski <luto@kernel.org>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20200521202116.996113173@linutronix.de
    aaf2bc50
tree.c 136 KB