alistair23-linux/arch/cris
Rabin Vincent 9a7449d3e9 CRISv32: handle multiple signals
Al Viro noted that CRIS fails to handle multiple signals.

This fixes the problem for CRISv32 by making it use a C work_pending
handling loop similar to the ARM implementation in 0a267fa6a1
("ARM: 7472/1: pull all work_pending logics into C function").

This also happens to fixes the warnings which currently trigger on
CRISv32 due to do_signal() being called with interrupts disabled.

Test case (should die of the SIGSEGV which gets raised when setting up
the stack for SIGALRM, but instead reaches and executes the _exit(1)):

  #include <unistd.h>
  #include <signal.h>
  #include <sys/time.h>
  #include <err.h>

  static void handler(int sig) { }

  int main(int argc, char *argv[])
  {
  	int ret;
  	struct itimerval t1 = { .it_value = {1} };
  	stack_t ss = {
  		.ss_sp = NULL,
  		.ss_size = SIGSTKSZ,
  	};
  	struct sigaction action = {
  		.sa_handler = handler,
  		.sa_flags = SA_ONSTACK,
  	};

  	ret = sigaltstack(&ss, NULL);
  	if (ret < 0)
  		err(1, "sigaltstack");

  	sigaction(SIGALRM, &action, NULL);
   	setitimer(ITIMER_REAL, &t1, NULL);

  	pause();

  	_exit(1);

  	return 0;
  }

Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Link: http://lkml.kernel.org/r/20121208074429.GC4939@ZenIV.linux.org.uk
Signed-off-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Jesper Nilsson <jespern@axis.com>
2015-03-25 10:53:54 +01:00
..
arch-v10 all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
arch-v32 CRISv32: handle multiple signals 2015-03-25 10:53:54 +01:00
boot CRIS: add Axis 88 board device tree 2015-03-25 09:50:46 +01:00
configs
include CRIS changes for 3.20 2015-02-15 18:02:02 -08:00
kernel CRISv32: handle multiple signals 2015-03-25 10:53:54 +01:00
mm CRIS changes for 3.20 2015-02-15 18:02:02 -08:00
Kconfig CRISv32: add device tree support 2015-03-25 09:49:48 +01:00
Kconfig.debug
Makefile CRISv32: add device tree support 2015-03-25 09:49:48 +01:00