1. 02 9月, 2010 3 次提交
  2. 11 8月, 2010 2 次提交
  3. 11 12月, 2009 1 次提交
  4. 03 10月, 2009 1 次提交
  5. 01 10月, 2009 1 次提交
  6. 02 9月, 2009 1 次提交
  7. 15 8月, 2009 1 次提交
    • M
      ARM: 5677/1: ARM support for TIF_RESTORE_SIGMASK/pselect6/ppoll/epoll_pwait · 36984265
      Mikael Pettersson 提交于
      This patch adds support for TIF_RESTORE_SIGMASK to ARM's
      signal handling, which allows to hook up the pselect6, ppoll,
      and epoll_pwait syscalls on ARM.
      
      Tested here with eabi userspace and a test program with a
      deliberate race between a child's exit and the parent's
      sigprocmask/select sequence. Using sys_pselect6() instead
      of sigprocmask/select reliably prevents the race.
      
      The other arch's support for TIF_RESTORE_SIGMASK has evolved
      over time:
      
      In 2.6.16:
      - add TIF_RESTORE_SIGMASK which parallels TIF_SIGPENDING
      - test both when checking for pending signal [changed later]
      - reimplement sys_sigsuspend() to use current->saved_sigmask,
        TIF_RESTORE_SIGMASK [changed later], and -ERESTARTNOHAND;
        ditto for sys_rt_sigsuspend(), but drop private code and
        use common code via __ARCH_WANT_SYS_RT_SIGSUSPEND;
      - there are now no "extra" calls to do_signal() so its oldset
        parameter is always &current->blocked so need not be passed,
        also its return value is changed to void
      - change handle_signal() to return 0/-errno
      - change do_signal() to honor TIF_RESTORE_SIGMASK:
        + get oldset from current->saved_sigmask if TIF_RESTORE_SIGMASK
          is set
        + if handle_signal() was successful then clear TIF_RESTORE_SIGMASK
        + if no signal was delivered and TIF_RESTORE_SIGMASK is set then
          clear it and restore the sigmask
      - hook up sys_pselect6() and sys_ppoll()
      
      In 2.6.19:
      - hook up sys_epoll_pwait()
      
      In 2.6.26:
      - allow archs to override how TIF_RESTORE_SIGMASK is implemented;
        default set_restore_sigmask() sets both TIF_RESTORE_SIGMASK and
        TIF_SIGPENDING; archs need now just test TIF_SIGPENDING again
        when checking for pending signal work; some archs now implement
        TIF_RESTORE_SIGMASK as a secondary/non-atomic thread flag bit
      - call set_restore_sigmask() in sys_sigsuspend() instead of setting
        TIF_RESTORE_SIGMASK
      
      In 2.6.29-rc:
      - kill sys_pselect7() which no arch wanted
      
      So for 2.6.31-rc6/ARM this patch does the following:
      - Add TIF_RESTORE_SIGMASK. Use the generic set_restore_sigmask()
        which sets both TIF_SIGPENDING and TIF_RESTORE_SIGMASK, so
        TIF_RESTORE_SIGMASK need not claim one of the scarce low thread
        flags, and existing TIF_SIGPENDING and _TIF_WORK_MASK tests need
        not be extended for TIF_RESTORE_SIGMASK.
      - sys_sigsuspend() is reimplemented to use current->saved_sigmask
        and set_restore_sigmask(), making it identical to most other archs
      - The private code for sys_rt_sigsuspend() is removed, instead
        generic code supplies it via __ARCH_WANT_SYS_RT_SIGSUSPEND.
      - sys_sigsuspend() and sys_rt_sigsuspend() no longer need a pt_regs
        parameter, so their assembly code wrappers are removed.
      - handle_signal() is changed to return 0 on success or -errno.
      - The oldset parameter to do_signal() is now redundant and removed,
        and the return value is now also redundant and changed to void.
      - do_signal() is changed to honor TIF_RESTORE_SIGMASK:
        + get oldset from current->saved_sigmask if TIF_RESTORE_SIGMASK
          is set
        + if handle_signal() was successful then clear TIF_RESTORE_SIGMASK
        + if no signal was delivered and TIF_RESTORE_SIGMASK is set then
          clear it and restore the sigmask
      - Hook up sys_pselect6, sys_ppoll, and sys_epoll_pwait.
      Signed-off-by: NMikael Pettersson <mikpe@it.uu.se>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      36984265
  8. 14 8月, 2009 1 次提交
  9. 30 7月, 2009 1 次提交
  10. 24 7月, 2009 1 次提交
  11. 30 5月, 2009 1 次提交
    • C
      Add core support for ARMv6/v7 big-endian · 26584853
      Catalin Marinas 提交于
      Starting with ARMv6, the CPUs support the BE-8 variant of big-endian
      (byte-invariant). This patch adds the core support:
      
      - setting of the BE-8 mode via the CPSR.E register for both kernel and
        user threads
      - big-endian page table walking
      - REV used to rotate instructions read from memory during fault
        processing as they are still little-endian format
      - Kconfig and Makefile support for BE-8. The --be8 option must be passed
        to the final linking stage to convert the instructions to
        little-endian
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      26584853
  12. 05 3月, 2009 1 次提交
    • U
      [ARM] 5418/1: restore lr before leaving mcount · d4cc510c
      Uwe Kleine-König 提交于
      gcc seems to expect that lr isn't clobbered by mcount, because for a
      function starting with:
      
      	static int func(void)
      	{
      		void *ra = __builtin_return_address(0);
      
      		printk(KERN_EMERG "__builtin_return_address(0) = %pS\n", ra)
      
      		...
      
      the following assembler is generated by gcc 4.3.2:
      
      	   0:   e1a0c00d        mov     ip, sp
      	   4:   e92dd810        push    {r4, fp, ip, lr, pc}
      	   8:   e24cb004        sub     fp, ip, #4      ; 0x4
      	   c:   ebfffffe        bl      0 <mcount>
      	  10:   e59f0034        ldr     r0, [pc, #52]
      	  14:   e1a0100e        mov     r1, lr
      	  18:   ebfffffe        bl      0 <printk>
      
      Without this patch obviously __builtin_return_address(0) yields
      func+0x10 instead of the return address of the caller.
      
      Note this patch fixes a similar issue for the routines used with dynamic
      ftrace even though this isn't currently selectable for ARM.
      
      Cc: Abhishek Sagar <sagar.abhishek@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      d4cc510c
  13. 19 2月, 2009 1 次提交
  14. 31 1月, 2009 1 次提交
  15. 21 10月, 2008 1 次提交
  16. 01 9月, 2008 1 次提交
  17. 07 8月, 2008 1 次提交
  18. 24 6月, 2008 1 次提交
  19. 02 6月, 2008 1 次提交
  20. 19 4月, 2008 1 次提交
  21. 26 1月, 2008 1 次提交
  22. 01 8月, 2007 1 次提交
  23. 17 2月, 2007 1 次提交
  24. 01 7月, 2006 1 次提交
  25. 25 6月, 2006 1 次提交
  26. 18 6月, 2006 1 次提交
    • P
      [ARM] 3335/1: Old-abi Thumb sys_syscall broken · 5247593c
      Paul Brook 提交于
      Patch from Paul Brook
      
      The old-abi sys_syscall syscall is broken when called from Thumb mode. It
      assumes the syscall number is an Arm syscall number (ie. starts from
      __NR_OABI_SYSCALL_BASE).  In thumb mode syscall numbers start from zero.
      
      The patch below fixes this by clearing the nigh bits of the syscall number
      instead of inverting them. Technically this means we accept some invalid
      syscall numbers, but I can't see how that could be a problem. The two sets of
      numbers far apart that unimplemented syscalls should still be rejected.
      Signed-off-by: NPaul Brook <paul@codesourcery.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      5247593c
  27. 19 1月, 2006 1 次提交
    • A
      [ARM] safer handling of syscall table padding · fa1b4f91
      Al Viro 提交于
      ARM entry-common.S needs to know syscall table size; in itself that would
      not be a problem, but there's an additional constraint - some of the
      instructions using it want a constant that would be a multiple of 4.
      So we have to pad syscall table with sys_ni_syscall and that's where
      the trouble begins.  .rept pseudo-op wants a constant expression for
      number of repetitions and subtraction of two labels (before and after
      syscall table) doesn't always get simplified to constant early enough
      for .rept.  If labels end up in different frags, we lose.  And while
      the frag size is large enough (slightly below 4Kb), the syscall table
      is about 1/3 of that.  We used to get away with that, but the recent
      changes had been enough to trigger the breakage.
      
      Proper fix is simple: have a macro (CALL(x)) to populate the table
      instead of using explicit .long x and the first time we include calls.S
      have it defined to .equ NR_syscalls,NR_syscalls+1.  Then we can find
      the proper amount of padding on the first inclusion simply by looking
      at NR_syscalls at that time.  And that will be constant, no matter what.
      
      Moreover, the same trick kills the need of having an estimate of padded
      NR_syscalls - it will be calculated for free at the same time.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      fa1b4f91
  28. 15 1月, 2006 5 次提交
  29. 17 12月, 2005 1 次提交
  30. 19 11月, 2005 1 次提交
    • D
      [ARM] 3168/1: Update ARM signal delivery and masking · a6c61e9d
      Daniel Jacobowitz 提交于
      Patch from Daniel Jacobowitz
      
      After delivering a signal (creating its stack frame) we must check for
      additional pending unblocked signals before returning to userspace.
      Otherwise signals may be delayed past the next syscall or reschedule.
      
      Once that was fixed it became obvious that the ARM signal mask manipulation
      was broken.  It was a little bit broken before the recent SA_NODEFER
      changes, and then very broken after them.  We must block the requested
      signals before starting the handler or the same signal can be delivered
      again before the handler even gets a chance to run.
      Signed-off-by: NDaniel Jacobowitz <dan@codesourcery.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      a6c61e9d
  31. 13 10月, 2005 1 次提交
  32. 14 9月, 2005 1 次提交
  33. 10 9月, 2005 1 次提交