linux/arch/arm
Mikael Pettersson 369842658a ARM: 5677/1: ARM support for TIF_RESTORE_SIGMASK/pselect6/ppoll/epoll_pwait
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: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-08-15 15:10:31 +01:00
..
boot [ARM] Add old Feroceon support to compressed/head.S 2009-06-19 13:38:53 -04:00
common [ARM] 5556/1: Fix the irq_desc.cpu references 2009-06-19 15:11:16 +01:00
configs [ARM] 5576/1: Update kb9202_defconfig 2009-07-02 21:23:05 +01:00
include/asm ARM: 5677/1: ARM support for TIF_RESTORE_SIGMASK/pselect6/ppoll/epoll_pwait 2009-08-15 15:10:31 +01:00
kernel ARM: 5677/1: ARM support for TIF_RESTORE_SIGMASK/pselect6/ppoll/epoll_pwait 2009-08-15 15:10:31 +01:00
lib Merge branch 'copy_user' of git://git.marvell.com/orion into devel 2009-06-14 10:59:32 +01:00
mach-aaec2000 [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-at91 [ARM] 5562/2: at91: add gpio button support for at91sam9g20ek 2009-06-29 11:19:27 +01:00
mach-clps711x [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-davinci Merge git://git.infradead.org/mtd-2.6 2009-06-22 16:56:22 -07:00
mach-ebsa110 [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-ep93xx Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-06-20 10:17:02 -07:00
mach-footbridge [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-gemini Gemini: Fix SRAM/ROM location after memory swap 2009-05-28 16:42:25 +03:00
mach-h720x [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-integrator [ARM] 5517/1: integrator: don't put clock lookups in __initdata 2009-05-18 17:43:16 +01:00
mach-iop13xx dma-mapping: replace all DMA_64BIT_MASK macro with DMA_BIT_MASK(64) 2009-04-07 08:31:10 -07:00
mach-iop32x [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-iop33x [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-ixp4xx IXP4xx: Change QMgr function names to qmgr_stat_*_watermark and clean the comments. 2009-05-25 13:25:34 +02:00
mach-ixp23xx [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-ixp2000 [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-kirkwood [ARM] Kirkwood: platform device registration for the crypto engine 2009-06-08 13:05:03 -04:00
mach-ks8695 Merge branch 'highmem' into devel 2009-03-24 22:47:45 +00:00
mach-l7200 [ARM] mach-l7200: fix spelling of SYS_CLOCK_OFF 2009-05-18 11:25:08 +01:00
mach-lh7a40x [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-loki [ARM] add coherent DMA mask for mv643xx_eth 2009-05-22 17:05:53 -04:00
mach-mmp [ARM] pxa: add PWM devices support for pxa168/910 2009-06-05 10:32:06 +08:00
mach-msm clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-mv78xx0 [ARM] orion: convert gpio to use gpiolib 2009-06-08 13:04:57 -04:00
mach-mx1 mx1ads: rename mxc_map_io to mx1_map_io 2009-05-07 16:20:22 +02:00
mach-mx2 Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-06-14 13:42:43 -07:00
mach-mx3 [ARM] remove duplicated #include 2009-07-11 16:55:52 +01:00
mach-netx [ARM] VIC: Add power management device 2009-05-07 11:04:57 +01:00
mach-ns9xxx clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-omap1 [ARM] remove duplicated #include 2009-07-11 16:55:52 +01:00
mach-omap2 [ARM] remove duplicated #include 2009-07-11 16:55:52 +01:00
mach-orion5x [ARM] orion5x: register the crypto device on SOCs that support it 2009-06-15 00:37:08 -04:00
mach-pnx4008 [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-pxa Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel 2009-06-18 23:09:52 +01:00
mach-realview [ARM] 5555/1: RealView: Include asm/smp_twd.h in realview-pbx.c 2009-06-19 15:10:58 +01:00
mach-rpc [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-s3c24a0/include/mach
mach-s3c2400 [ARM] S3C24XX: GPIO: Fix error returns from gpio functions 2009-05-18 19:40:18 +01:00
mach-s3c2410 [ARM] S3C24XX: remove duplicated #include 2009-06-16 23:30:12 +01:00
mach-s3c2412 Merge branch for-rmk-devel of git://aeryn.fluff.org.uk/bjdooks/linux into devel 2009-06-10 22:41:06 +01:00
mach-s3c2440 [ARM] MINI2440: Add missing flash_bbt flat to NAND 2009-06-23 18:23:27 +01:00
mach-s3c2442 [ARM] GTA02: build fixes (s3c2410_nand_set usage) 2009-06-24 00:10:46 +01:00
mach-s3c2443 [ARM] S3C24XX: DMA: Split hardware regs out of <mach/dma.h> 2009-05-01 11:39:06 +01:00
mach-s3c6400 Merge branch for-rmk-devel of git://aeryn.fluff.org.uk/bjdooks/linux into devel 2009-06-10 22:41:06 +01:00
mach-s3c6410 [ARM] SMDK6410: Add USB high-speed/OtG gadget device 2009-05-16 22:14:09 +01:00
mach-sa1100 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-06-14 13:46:25 -07:00
mach-shark [ARM] pass reboot command line to arch_reset() 2009-03-19 16:20:24 +00:00
mach-stmp37xx [ARM] 5539/1: Freescale STMP: onboard devices declaration 2009-06-04 14:16:45 +01:00
mach-stmp378x [ARM] 5539/1: Freescale STMP: onboard devices declaration 2009-06-04 14:16:45 +01:00
mach-u300 [ARM] 5581/1: U300 clock updates 2009-07-02 17:24:39 +01:00
mach-versatile Merge branch for-rmk-devel of git://aeryn.fluff.org.uk/bjdooks/linux into devel 2009-06-10 22:41:06 +01:00
mach-w90x900 [ARM] 5549/1: Add clock api for w90p910 platform. 2009-06-11 14:45:18 +01:00
mm [ARM] remove L_PTE_BUFFERABLE and L_PTE_CACHEABLE 2009-07-11 16:55:52 +01:00
nwfpe [ARM] nwfpe: fix 'floatx80_is_nan' sparse warning 2009-05-15 12:49:14 +01:00
oprofile RealView: Move the IRQ_* definitions out of the board-*.h files 2009-05-30 14:00:17 +01:00
plat-iop dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
plat-mxc Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-06-14 13:42:43 -07:00
plat-omap OMAP: Fix IOMEM macro for assembly 2009-06-23 16:56:05 +03:00
plat-orion [ARM] Orion/Kirkwood: rename orion5x_wdt to orion_wdt 2009-06-08 13:05:00 -04:00
plat-pxa [ARM] pxa: add PWM devices support for pxa168/910 2009-06-05 10:32:06 +08:00
plat-s3c [ARM] S3C: Fix S3C24XX build to not include s3c64xx IIS devices 2009-06-23 16:34:35 +01:00
plat-s3c24xx [ARM] S3C24XX: Fix spi-bus configuration build errors 2009-06-23 16:16:01 +01:00
plat-s3c64xx [ARM] S3C64XX: add to_irq() support for EINT() GPIO 2009-06-22 14:11:56 +01:00
plat-stmp3xxx [ARM] remove duplicated #include 2009-07-11 16:55:52 +01:00
tools [ARM] Update mach-types 2009-06-20 22:28:41 +01:00
vfp Fix the VFP handling on the Feroceon CPU 2009-05-30 14:00:18 +01:00
Kconfig [ARM] S3C64XX: Initial support for DVFS 2009-06-16 23:36:24 +01:00
Kconfig-nommu
Kconfig.debug [ARM] S3C: Remove unused CONFIG_DEBUG_S3C_PORT 2009-06-23 12:24:07 +01:00
Makefile Merge branch 'u300' into devel 2009-06-14 11:01:44 +01:00