1. 02 12月, 2020 2 次提交
  2. 25 11月, 2020 1 次提交
  3. 19 11月, 2020 1 次提交
    • F
      context_tracking: Don't implement exception_enter/exit() on CONFIG_HAVE_CONTEXT_TRACKING_OFFSTACK · 179a9cf7
      Frederic Weisbecker 提交于
      The typical steps with context tracking are:
      
      1) Task runs in userspace
      2) Task enters the kernel (syscall/exception/IRQ)
      3) Task switches from context tracking state CONTEXT_USER to
         CONTEXT_KERNEL (user_exit())
      4) Task does stuff in kernel
      5) Task switches from context tracking state CONTEXT_KERNEL to
         CONTEXT_USER (user_enter())
      6) Task exits the kernel
      
      If an exception fires between 5) and 6), the pt_regs and the context
      tracking disagree on the context of the faulted/trapped instruction.
      CONTEXT_KERNEL must be set before the exception handler, that's
      unconditional for those handlers that want to be able to call into
      schedule(), but CONTEXT_USER must be restored when the exception exits
      whereas pt_regs tells that we are resuming to kernel space.
      
      This can't be fixed with storing the context tracking state in a per-cpu
      or per-task variable since another exception may fire onto the current
      one and overwrite the saved state. Also the task can schedule. So it
      has to be stored in a per task stack.
      
      This is how exception_enter()/exception_exit() paper over the problem:
      
      5) Task switches from context tracking state CONTEXT_KERNEL to
         CONTEXT_USER (user_enter())
      5.1) Exception fires
      5.2) prev_state = exception_enter() // save CONTEXT_USER to prev_state
                                          // and set CONTEXT_KERNEL
      5.3) Exception handler
      5.4) exception_enter(prev_state) // restore CONTEXT_USER
      5.5) Exception resumes
      6) Task exits the kernel
      
      The condition to live without exception_enter()/exception_exit() is to
      forbid exceptions and IRQs between 2) and 3) and between 5) and 6), or if
      any is allowed to trigger, it won't call into context tracking, eg: NMIs,
      and it won't schedule. These requirements are met by architectures
      supporting CONFIG_HAVE_CONTEXT_TRACKING_OFFSTACK and those can
      therefore afford not to implement this hack.
      Signed-off-by: NFrederic Weisbecker <frederic@kernel.org>
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Link: https://lkml.kernel.org/r/20201117151637.259084-3-frederic@kernel.org
      179a9cf7
  4. 17 11月, 2020 8 次提交
  5. 16 11月, 2020 1 次提交
  6. 05 11月, 2020 1 次提交
  7. 31 10月, 2020 1 次提交
  8. 30 10月, 2020 7 次提交
  9. 29 10月, 2020 8 次提交
  10. 28 10月, 2020 6 次提交
  11. 27 10月, 2020 4 次提交