Skip to content
  • Frederic Weisbecker's avatar
    context_tracking: Fix runtime CPU off-case · d65ec121
    Frederic Weisbecker authored
    
    
    As long as the context tracking is enabled on any CPU, even
    a single one, all other CPUs need to keep track of their
    user <-> kernel boundaries cross as well.
    
    This is because a task can sleep while servicing an exception
    that happened in the kernel or in userspace. Then when the task
    eventually wakes up and return from the exception, the CPU needs
    to know if we resume in userspace or in the kernel. exception_exit()
    get this information from exception_enter() that saved the previous
    state.
    
    If the CPU where the exception happened didn't keep track of
    these informations, exception_exit() doesn't know which state
    tracking to restore on the CPU where the task got migrated
    and we may return to userspace with the context tracking
    subsystem thinking that we are in kernel mode.
    
    This can be fixed in the long term if we move our context tracking
    probes on very low level arch fast path user <-> kernel boundary,
    although even that is worrisome as an exception can still happen
    in the few instructions between the probe and the actual iret.
    
    Also we are not yet ready to set these probes in the fast path given
    the potential overhead problem it induces.
    
    So let's fix this by always enable context tracking even on CPUs
    that are not in the full dynticks range. OTOH we can spare the
    rcu_user_*() and vtime_user_*() calls there because the tick runs
    on these CPUs and we can handle RCU state machine and cputime
    accounting through it.
    
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Li Zhong <zhong@linux.vnet.ibm.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Kevin Hilman <khilman@linaro.org>
    d65ec121