1. 09 7月, 2016 1 次提交
  2. 29 7月, 2015 2 次提交
    • M
      powerpc/kernel: Change the do_syscall_trace_enter() API · d3837414
      Michael Ellerman 提交于
      The API for calling do_syscall_trace_enter() is currently sensible
      enough, it just returns the (modified) syscall number.
      
      However once we enable seccomp filter it will get more complicated. When
      seccomp filter runs, the seccomp kernel code (via SECCOMP_RET_ERRNO), or
      a ptracer (via SECCOMP_RET_TRACE), may reject the syscall and *may* or may
      *not* set a return value in r3.
      
      That means the assembler that calls do_syscall_trace_enter() can not
      blindly return ENOSYS, it needs to only return ENOSYS if a return value
      has not already been set.
      
      There is no way to implement that logic with the current API. So change
      the do_syscall_trace_enter() API to make it deal with the return code
      juggling, and the assembler can then just return whatever return code it
      is given.
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      d3837414
    • M
      powerpc/kernel: Switch to using MAX_ERRNO · c3525940
      Michael Ellerman 提交于
      Currently on powerpc we have our own #define for the highest (negative)
      errno value, called _LAST_ERRNO. This is defined to be 516, for reasons
      which are not clear.
      
      The generic code, and x86, use MAX_ERRNO, which is defined to be 4095.
      
      In particular seccomp uses MAX_ERRNO to restrict the value that a
      seccomp filter can return.
      
      Currently with the mismatch between _LAST_ERRNO and MAX_ERRNO, a seccomp
      tracer wanting to return 600, expecting it to be seen as an error, would
      instead find on powerpc that userspace sees a successful syscall with a
      return value of 600.
      
      To avoid this inconsistency, switch powerpc to use MAX_ERRNO.
      
      We are somewhat confident that generic syscalls that can return a
      non-error value above negative MAX_ERRNO have already been updated to
      use force_successful_syscall_return().
      
      I have also checked all the powerpc specific syscalls, and believe that
      none of them expect to return a non-error value between -MAX_ERRNO and
      -516. So this change should be safe ...
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      c3525940
  3. 02 2月, 2015 1 次提交
    • M
      powerpc: Remove old compile time disabled syscall tracing code · a4bcbe6a
      Michael Ellerman 提交于
      We have code to do syscall tracing which is disabled at compile time by
      default. It's not been touched since the dawn of time (ie. v2.6.12).
      
      There are now better ways to do syscall tracing, ie. using the
      raw_syscall, or syscall tracepoints.
      
      For the specific case of tracing syscalls at boot on a system that
      doesn't get to userspace, you can boot with:
      
        trace_event=syscalls tp_printk=on
      
      Which will trace syscalls from boot, and echo all output to the console.
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      a4bcbe6a
  4. 23 1月, 2015 1 次提交
  5. 10 11月, 2014 2 次提交
  6. 01 6月, 2013 1 次提交
    • P
      powerpc/32bit:Store temporary result in r0 instead of r8 · f7b33677
      Priyanka Jain 提交于
      Commit a9c4e541
      "powerpc/kprobe: Complete kprobe and migrate exception frame"
      introduced a regression:
      
      While returning from exception handling in case of PREEMPT enabled,
      _TIF_NEED_RESCHED bit is checked in TI_FLAGS (thread_info flag) of current
      task. Only if this bit is set, it should continue with the process of
      calling preempt_schedule_irq() to schedule highest priority task if
      available.
      
      Current code assumes that r8 contains TI_FLAGS and check this for
      _TIF_NEED_RESCHED, but as r8 is modified in the code which executes before
      this check, r8 no longer contains the expected TI_FLAGS information.
      
      As a result check for comparison with _TIF_NEED_RESCHED was failing even if
      NEED_RESCHED bit is set in the current thread_info flag. Due to this,
      preempt_schedule_irq() and in turn scheduler was not getting called even if
      highest priority task is ready for execution.
      
      So, store temporary results in r0 instead of r8 to prevent r8 from getting
      modified as subsequent code is dependent on its value.
      Signed-off-by: NPriyanka Jain <Priyanka.Jain@freescale.com>
      CC: <stable@vger.kernel.org> [v3.7+]
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      f7b33677
  7. 14 5月, 2013 1 次提交
  8. 29 1月, 2013 1 次提交
  9. 10 1月, 2013 1 次提交
  10. 15 10月, 2012 1 次提交
  11. 01 10月, 2012 2 次提交
  12. 18 9月, 2012 1 次提交
  13. 27 7月, 2012 1 次提交
  14. 11 7月, 2012 2 次提交
  15. 10 4月, 2012 1 次提交
    • B
      powerpc: Fix page fault with lockdep regression · 08f1ec8a
      Benjamin Herrenschmidt 提交于
      commit a546498f
      introduced a regression on 32-bit when irq tracing
      is enabled by exposing an old bug in our irq tracing
      code for exception entry.
      
      The code would save and restore some GPRs around the
      calls to the C lockdep code, however, it tries to be
      too smart for its own good and restores some of the
      GPRs from the exception frame (as saved there on
      exception entry).
      
      However, for page faults, we do replace those GPRs with
      arguments to do_page_fault before we call transfer_to_handler
      and so restoring from the exception frame is plain wrong in
      this case.
      
      This was fine as long as we didn't touch the interrupt state
      when taking page fault, but when I started doing it, it would
      trigger the lockdep calls and the bug.
      
      This fixes it by cleaning up that code a bit. It did create
      a small stack frame for the sake of backtraces, so let's
      make it a bit bigger and use it to save and restore the
      stuff we care about.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      08f1ec8a
  16. 22 2月, 2012 1 次提交
    • B
      powerpc: Fix various issues with return to userspace · 18b246fa
      Benjamin Herrenschmidt 提交于
      We have a few problems when returning to userspace. This is a
      quick set of fixes for 3.3, I'll look into a more comprehensive
      rework for 3.4. This fixes:
      
       - We kept interrupts soft-disabled when schedule'ing or calling
      do_signal when returning to userspace as a result of a hardware
      interrupt.
      
       - Rename do_signal to do_notify_resume like all other archs (and
      do_signal_pending back to do_signal, which it was before Roland
      changed it).
      
       - Add the missing call to key_replace_session_keyring() to
      do_notify_resume().
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ---
      18b246fa
  17. 16 11月, 2011 1 次提交
    • K
      powerpc/trace: Add a dummy stack frame for trace_hardirqs_off · 2cd76629
      Kevin Hao 提交于
      The trace_hardirqs_off will use CALLER_ADDR0 and CALLER_ADDR1.
      If an exception occurs in user mode, there is only one stack frame
      on the stack and accessing the CALLER_ADDR1 will causes the following
      call trace. So we create a dummy stack frame to make
      trace_hardirqs_off happy.
      
      WARNING: at kernel/smp.c:459
      Modules linked in:
      NIP: c0093280 LR: c00930a0 CTR: c0010780
      REGS: edb87ae0 TRAP: 0700   Not tainted  (3.1.0)
      MSR: 00021002 <ME,CE>  CR: 28002888  XER: 00000000
      TASK = edce2ac0[17658] 'mthread-lock-on' THREAD: edb86000 CPU: 5
      GPR00: 00000001 edb87b90 edce2ac0 00000005 c0019594 edb87bd8 00000001 00000fe3
      GPR08: 00041000 c084138c 4e20120d edb87b90 48002888 1001aa7c 00000000 00000000
      GPR16: 48830000 10012a8c 00000000 10000af4 00000001 c0810000 00000000 00000000
      GPR24: ee9aa920 c0816a18 00000000 00000005 c0019594 edb87bd8 ee20178c edb87b90
      NIP [c0093280] smp_call_function_many+0x214/0x2b4
      LR [c00930a0] smp_call_function_many+0x34/0x2b4
      Call Trace:
      [edb87b90] [c00930a0] smp_call_function_many+0x34/0x2b4 (unreliable)
      [edb87bd0] [c00194ec] __flush_tlb_page+0xac/0x100
      [edb87c00] [c001957c] flush_tlb_page+0x3c/0x54
      [edb87c10] [c00180ac] ptep_set_access_flags+0x74/0x12c
      [edb87c40] [c0128068] handle_pte_fault+0x2f0/0x9ac
      [edb87cb0] [c0128c3c] handle_mm_fault+0x104/0x1dc
      [edb87ce0] [c05f40f4] do_page_fault+0x2dc/0x630
      [edb87e50] [c001078c] handle_page_fault+0xc/0x80
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2cd76629
  18. 21 1月, 2011 1 次提交
  19. 29 11月, 2010 1 次提交
  20. 05 5月, 2010 1 次提交
  21. 20 8月, 2009 1 次提交
    • B
      powerpc: Use names rather than numbers for SPRGs (v2) · ee43eb78
      Benjamin Herrenschmidt 提交于
      The kernel uses SPRG registers for various purposes, typically in
      low level assembly code as scratch registers or to hold per-cpu
      global infos such as the PACA or the current thread_info pointer.
      
      We want to be able to easily shuffle the usage of those registers
      as some implementations have specific constraints realted to some
      of them, for example, some have userspace readable aliases, etc..
      and the current choice isn't always the best.
      
      This patch should not change any code generation, and replaces the
      usage of SPRN_SPRGn everywhere in the kernel with a named replacement
      and adds documentation next to the definition of the names as to
      what those are used for on each processor family.
      
      The only parts that still use the original numbers are bits of KVM
      or suspend/resume code that just blindly needs to save/restore all
      the SPRGs.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ee43eb78
  22. 26 6月, 2009 1 次提交
    • B
      powerpc: Add irqtrace support for 32-bit powerpc · 5d38902c
      Benjamin Herrenschmidt 提交于
      Based on initial work from: Dale Farnsworth <dale@farnsworth.org>
      
      Add the low level irq tracing hooks for 32-bit powerpc needed
      to enable full lockdep functionality.
      
      The approach taken to deal with the code in entry_32.S is that
      we don't trace all the transitions of MSR:EE when we just turn
      it off to peek at TI_FLAGS without races. Only when we are
      calling into C code or returning from exceptions with a state
      that have changed from what lockdep thinks.
      
      There's a little bugger though: If we take an exception that
      keeps interrupts enabled (such as an alignment exception) while
      interrupts are enabled, we will call trace_hardirqs_on() on the
      way back spurriously. Not a big deal, but to get rid of it would
      require remembering in pt_regs that the exception was one of the
      type that kept interrupts enabled which we don't know at this
      stage. (Well, we could test all cases for regs->trap but that
      sucks too much).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Tested-by: NKumar Gala <galak@kernel.crashing.org>
      5d38902c
  23. 23 2月, 2009 4 次提交
  24. 13 2月, 2009 1 次提交
  25. 28 11月, 2008 1 次提交
    • S
      powerpc: ftrace, do nothing in mcount call for dyn ftrace · c7b0d173
      Steven Rostedt 提交于
      Impact: quicken mcount calls that are not replaced by dyn ftrace
      
      Dynamic ftrace no longer does on the fly recording of mcount locations.
      The mcount locations are now found at compile time. The mcount
      function no longer needs to store registers and call a stub function.
      It can now just simply return.
      
      Since there are some functions that do not get converted to a nop
      (.init sections and other code that may disappear), this patch should
      help speed up that code.
      
      Also, the stub for mcount on PowerPC 32 can not be a simple branch
      link register like it is on PowerPC 64. According to the ABI specification:
      
      "The _mcount routine is required to restore the link register from
       the stack so that the profiling code can be inserted transparently,
       whether or not the profiled function saves the link register itself."
      
      This means that we must restore the link register that was used
      to make the call to mcount.  The minimal mcount function for PPC32
      ends up being:
      
       mcount:
              mflr    r0
              mtctr   r0
              lwz     r0, 4(r1)
              mtlr    r0
              bctr
      
      Where we move the link register used to call mcount into the
      ctr register, and then restore the link register from the stack.
      Then we use the ctr register to jump back to the mcount caller.
      The r0 register is free for us to use.
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      c7b0d173
  26. 21 10月, 2008 1 次提交
  27. 28 7月, 2008 3 次提交
  28. 26 7月, 2008 1 次提交
  29. 25 7月, 2008 1 次提交
  30. 26 6月, 2008 1 次提交
  31. 24 6月, 2008 1 次提交