• Andy Lutomirski's avatar
    x86, traps: Track entry into and exit from IST context · 95927475
    Andy Lutomirski authored
    We currently pretend that IST context is like standard exception
    context, but this is incorrect.  IST entries from userspace are like
    standard exceptions except that they use per-cpu stacks, so they are
    atomic.  IST entries from kernel space are like NMIs from RCU's
    perspective -- they are not quiescent states even if they
    interrupted the kernel during a quiescent state.
    
    Add and use ist_enter and ist_exit to track IST context.  Even
    though x86_32 has no IST stacks, we track these interrupts the same
    way.
    
    This fixes two issues:
    
     - Scheduling from an IST interrupt handler will now warn.  It would
       previously appear to work as long as we got lucky and nothing
       overwrote the stack frame.  (I don't know of any bugs in this
       that would trigger the warning, but it's good to be on the safe
       side.)
    
     - RCU handling in IST context was dangerous.  As far as I know,
       only machine checks were likely to trigger this, but it's good to
       be on the safe side.
    
    Note that the machine check handlers appears to have been missing
    any context tracking at all before this patch.
    
    Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Frédéric Weisbecker <fweisbec@gmail.com>
    Signed-off-by: default avatarAndy Lutomirski <luto@amacapital.net>
    95927475
traps.c 25.5 KB