mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] Convert sigaction to act like other unices
@ 2005-08-13  2:40 Steven Rostedt
  2005-08-13 12:39 ` Andi Kleen
  0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2005-08-13  2:40 UTC (permalink / raw)
  To: LKML
  Cc: rmk, ak, gerg, jdike, sammy, lethal, wli, davem, matthew, geert,
	paulus, davej, tony.luck, dev-etrax, rpurdie, spyro,
	Robert Wilkens, Bodo Stroesser, Jan Engelhardt, Chris Wright,
	Andrew Morton, Linus Torvalds

Here's a patch that converts all architectures to behave like other unix
boxes signal handling.  It's funny that I didn't need to change the m68k
architecture, since it was the only one that already behaves this way!
(the m68knommu does not!)

Also, I noticed that not all check the return value of setting up the
signal frame (not that the signal frame setup functions have return
values).  So this probably needs to be fixed in each architecture that
doesn't already do it.  Since that is a little more advanced change, I
don't feel comfortable with changing that without even having the
ability to compile it.

Also note, that these changes were done without compling (since I don't
happen to have a compiler for every arch that Linux supports).  So these
are all untested, but I did go over them three times to make sure it
looks good. I recommend those that support these archs to check these as
well. (I tried to CC all the arch maintainers, but I might have missed
some).

I did this against 2.6.13-rc6-git4, but it is best to throw this into
-mm or early 2.6.14-rc's.

-- Steve

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

diff -urp linux-2.6.13-rc6-git4.orig/arch/alpha/kernel/signal.c linux-2.6.13-rc6-git4/arch/alpha/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/alpha/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/alpha/kernel/signal.c	2005-08-12 21:49:55.000000000 -0400
@@ -566,13 +566,12 @@ handle_signal(int sig, struct k_sigactio
 	if (ka->sa.sa_flags & SA_RESETHAND)
 		ka->sa.sa_handler = SIG_DFL;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER)) 
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 static inline void
diff -urp linux-2.6.13-rc6-git4.orig/arch/arm/kernel/signal.c linux-2.6.13-rc6-git4/arch/arm/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/arm/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/arm/kernel/signal.c	2005-08-12 21:50:46.000000000 -0400
@@ -658,11 +658,12 @@ handle_signal(unsigned long sig, struct 
 	/*
 	 * Block the signal if we were unsuccessful.
 	 */
-	if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) {
+	if (ret != 0) {
 		spin_lock_irq(&tsk->sighand->siglock);
 		sigorsets(&tsk->blocked, &tsk->blocked,
 			  &ka->sa.sa_mask);
-		sigaddset(&tsk->blocked, sig);
+		if (!(ka->sa.sa_flags & SA_NODEFER))
+			sigaddset(&tsk->blocked, sig);
 		recalc_sigpending();
 		spin_unlock_irq(&tsk->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/arm26/kernel/signal.c linux-2.6.13-rc6-git4/arch/arm26/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/arm26/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/arm26/kernel/signal.c	2005-08-12 22:08:56.000000000 -0400
@@ -454,14 +454,13 @@ handle_signal(unsigned long sig, siginfo
 		if (ka->sa.sa_flags & SA_ONESHOT)
 			ka->sa.sa_handler = SIG_DFL;
 
-		if (!(ka->sa.sa_flags & SA_NODEFER)) {
-			spin_lock_irq(&tsk->sighand->siglock);
-			sigorsets(&tsk->blocked, &tsk->blocked,
-				  &ka->sa.sa_mask);
+		spin_lock_irq(&tsk->sighand->siglock);
+		sigorsets(&tsk->blocked, &tsk->blocked,
+			  &ka->sa.sa_mask);
+		if (!(ka->sa.sa_flags & SA_NODEFER))
 			sigaddset(&tsk->blocked, sig);
-			recalc_sigpending();
-			spin_unlock_irq(&tsk->sighand->siglock);
-		}
+		recalc_sigpending();
+		spin_unlock_irq(&tsk->sighand->siglock);
 		return;
 	}
 
diff -urp linux-2.6.13-rc6-git4.orig/arch/cris/arch-v10/kernel/signal.c linux-2.6.13-rc6-git4/arch/cris/arch-v10/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/cris/arch-v10/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/cris/arch-v10/kernel/signal.c	2005-08-12 21:51:53.000000000 -0400
@@ -517,13 +517,12 @@ handle_signal(int canrestart, unsigned l
 	if (ka->sa.sa_flags & SA_ONESHOT)
 		ka->sa.sa_handler = SIG_DFL;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/cris/arch-v32/kernel/signal.c linux-2.6.13-rc6-git4/arch/cris/arch-v32/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/cris/arch-v32/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/cris/arch-v32/kernel/signal.c	2005-08-12 21:53:01.000000000 -0400
@@ -568,13 +568,12 @@ handle_signal(int canrestart, unsigned l
 	if (ka->sa.sa_flags & SA_ONESHOT)
 		ka->sa.sa_handler = SIG_DFL;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/frv/kernel/signal.c linux-2.6.13-rc6-git4/arch/frv/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/frv/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/frv/kernel/signal.c	2005-08-12 21:53:19.000000000 -0400
@@ -506,13 +506,12 @@ static void handle_signal(unsigned long 
 	else
 		setup_frame(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked, sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 } /* end handle_signal() */
 
 /*****************************************************************************/
diff -urp linux-2.6.13-rc6-git4.orig/arch/h8300/kernel/signal.c linux-2.6.13-rc6-git4/arch/h8300/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/h8300/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/h8300/kernel/signal.c	2005-08-12 21:53:43.000000000 -0400
@@ -488,13 +488,12 @@ handle_signal(unsigned long sig, siginfo
 	else
 		setup_frame(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/i386/kernel/signal.c linux-2.6.13-rc6-git4/arch/i386/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/i386/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/i386/kernel/signal.c	2005-08-12 21:55:22.000000000 -0400
@@ -577,10 +577,11 @@ handle_signal(unsigned long sig, siginfo
 	else
 		ret = setup_frame(sig, ka, oldset, regs);
 
-	if (ret && !(ka->sa.sa_flags & SA_NODEFER)) {
+	if (ret) {
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
-		sigaddset(&current->blocked,sig);
+		if (!(ka->sa.sa_flags & SA_NODEFER))
+			sigaddset(&current->blocked,sig);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/ia64/kernel/signal.c linux-2.6.13-rc6-git4/arch/ia64/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/ia64/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/ia64/kernel/signal.c	2005-08-12 21:56:20.000000000 -0400
@@ -467,15 +467,12 @@ handle_signal (unsigned long sig, struct
 		if (!setup_frame(sig, ka, info, oldset, scr))
 			return 0;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		{
-			sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
-			sigaddset(&current->blocked, sig);
-			recalc_sigpending();
-		}
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
+		sigaddset(&current->blocked, sig);
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 	return 1;
 }
 
diff -urp linux-2.6.13-rc6-git4.orig/arch/m32r/kernel/signal.c linux-2.6.13-rc6-git4/arch/m32r/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/m32r/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/m32r/kernel/signal.c	2005-08-12 21:56:35.000000000 -0400
@@ -341,13 +341,12 @@ handle_signal(unsigned long sig, struct 
 	/* Set up the stack frame */
 	setup_rt_frame(sig, ka, info, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/m68knommu/kernel/signal.c linux-2.6.13-rc6-git4/arch/m68knommu/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/m68knommu/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/m68knommu/kernel/signal.c	2005-08-12 21:59:41.000000000 -0400
@@ -732,13 +732,12 @@ handle_signal(int sig, struct k_sigactio
 	if (ka->sa.sa_flags & SA_ONESHOT)
 		ka->sa.sa_handler = SIG_DFL;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/mips/kernel/irixsig.c linux-2.6.13-rc6-git4/arch/mips/kernel/irixsig.c
--- linux-2.6.13-rc6-git4.orig/arch/mips/kernel/irixsig.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/mips/kernel/irixsig.c	2005-08-12 22:00:09.000000000 -0400
@@ -155,13 +155,12 @@ static inline void handle_signal(unsigne
 	else
 		setup_irix_frame(ka, regs, sig, oldset);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 asmlinkage int do_irix_signal(sigset_t *oldset, struct pt_regs *regs)
diff -urp linux-2.6.13-rc6-git4.orig/arch/mips/kernel/signal32.c linux-2.6.13-rc6-git4/arch/mips/kernel/signal32.c
--- linux-2.6.13-rc6-git4.orig/arch/mips/kernel/signal32.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/mips/kernel/signal32.c	2005-08-12 22:00:40.000000000 -0400
@@ -751,13 +751,12 @@ static inline void handle_signal(unsigne
 	else
 		setup_frame(ka, regs, sig, oldset);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 int do_signal32(sigset_t *oldset, struct pt_regs *regs)
diff -urp linux-2.6.13-rc6-git4.orig/arch/mips/kernel/signal.c linux-2.6.13-rc6-git4/arch/mips/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/mips/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/mips/kernel/signal.c	2005-08-12 22:00:23.000000000 -0400
@@ -425,13 +425,12 @@ static inline void handle_signal(unsigne
 		setup_frame(ka, regs, sig, oldset);
 #endif
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
diff -urp linux-2.6.13-rc6-git4.orig/arch/parisc/kernel/signal.c linux-2.6.13-rc6-git4/arch/parisc/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/parisc/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/parisc/kernel/signal.c	2005-08-12 22:01:00.000000000 -0400
@@ -517,13 +517,12 @@ handle_signal(unsigned long sig, siginfo
 	if (!setup_rt_frame(sig, ka, info, oldset, regs, in_syscall))
 		return 0;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 	return 1;
 }
 
diff -urp linux-2.6.13-rc6-git4.orig/arch/ppc/kernel/signal.c linux-2.6.13-rc6-git4/arch/ppc/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/ppc/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/ppc/kernel/signal.c	2005-08-12 22:01:23.000000000 -0400
@@ -759,13 +759,12 @@ int do_signal(sigset_t *oldset, struct p
 	else
 		handle_signal(signr, &ka, &info, oldset, regs, newsp);
 
-	if (!(ka.sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka.sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka.sa.sa_mask);
+	if (!(ka.sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked, signr);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 
 	return 1;
 }
diff -urp linux-2.6.13-rc6-git4.orig/arch/ppc64/kernel/signal32.c linux-2.6.13-rc6-git4/arch/ppc64/kernel/signal32.c
--- linux-2.6.13-rc6-git4.orig/arch/ppc64/kernel/signal32.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/ppc64/kernel/signal32.c	2005-08-12 22:02:45.000000000 -0400
@@ -976,11 +976,12 @@ int do_signal32(sigset_t *oldset, struct
 	else
 		ret = handle_signal32(signr, &ka, &info, oldset, regs, newsp);
 
-	if (ret && !(ka.sa.sa_flags & SA_NODEFER)) {
+	if (ret) {
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked, &current->blocked,
 			  &ka.sa.sa_mask);
-		sigaddset(&current->blocked, signr);
+		if (!(ka.sa.sa_flags & SA_NODEFER))
+			sigaddset(&current->blocked, signr);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/ppc64/kernel/signal.c linux-2.6.13-rc6-git4/arch/ppc64/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/ppc64/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/ppc64/kernel/signal.c	2005-08-12 22:02:13.000000000 -0400
@@ -481,10 +481,11 @@ static int handle_signal(unsigned long s
 	/* Set up Signal Frame */
 	ret = setup_rt_frame(sig, ka, info, oldset, regs);
 
-	if (ret && !(ka->sa.sa_flags & SA_NODEFER)) {
+	if (ret) {
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
-		sigaddset(&current->blocked,sig);
+		if (!(ka->sa.sa_flags & SA_NODEFER))
+			sigaddset(&current->blocked,sig);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/s390/kernel/compat_signal.c linux-2.6.13-rc6-git4/arch/s390/kernel/compat_signal.c
--- linux-2.6.13-rc6-git4.orig/arch/s390/kernel/compat_signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/s390/kernel/compat_signal.c	2005-08-12 22:03:42.000000000 -0400
@@ -637,12 +637,11 @@ handle_signal32(unsigned long sig, struc
 	else
 		setup_frame32(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
diff -urp linux-2.6.13-rc6-git4.orig/arch/s390/kernel/signal.c linux-2.6.13-rc6-git4/arch/s390/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/s390/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/s390/kernel/signal.c	2005-08-12 22:03:59.000000000 -0400
@@ -429,13 +429,12 @@ handle_signal(unsigned long sig, struct 
 	else
 		setup_frame(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/sh/kernel/signal.c linux-2.6.13-rc6-git4/arch/sh/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/sh/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/sh/kernel/signal.c	2005-08-12 22:04:10.000000000 -0400
@@ -546,13 +546,12 @@ handle_signal(unsigned long sig, struct 
 	if (ka->sa.sa_flags & SA_ONESHOT)
 		ka->sa.sa_handler = SIG_DFL;
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/sh64/kernel/signal.c linux-2.6.13-rc6-git4/arch/sh64/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/sh64/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/sh64/kernel/signal.c	2005-08-12 22:04:47.000000000 -0400
@@ -664,13 +664,12 @@ handle_signal(unsigned long sig, siginfo
 	else
 		setup_frame(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/sparc/kernel/signal.c linux-2.6.13-rc6-git4/arch/sparc/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/sparc/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/sparc/kernel/signal.c	2005-08-12 22:04:59.000000000 -0400
@@ -1034,13 +1034,12 @@ handle_signal(unsigned long signr, struc
 		else
 			setup_frame(&ka->sa, regs, signr, oldset, info);
 	}
-	if (!(ka->sa.sa_flags & SA_NOMASK)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NOMASK))
 		sigaddset(&current->blocked, signr);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
diff -urp linux-2.6.13-rc6-git4.orig/arch/sparc64/kernel/signal32.c linux-2.6.13-rc6-git4/arch/sparc64/kernel/signal32.c
--- linux-2.6.13-rc6-git4.orig/arch/sparc64/kernel/signal32.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/sparc64/kernel/signal32.c	2005-08-12 22:05:28.000000000 -0400
@@ -1325,13 +1325,12 @@ static inline void handle_signal32(unsig
 		else
 			setup_frame32(&ka->sa, regs, signr, oldset, info);
 	}
-	if (!(ka->sa.sa_flags & SA_NOMASK)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NOMASK))
 		sigaddset(&current->blocked,signr);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 static inline void syscall_restart32(unsigned long orig_i0, struct pt_regs *regs,
diff -urp linux-2.6.13-rc6-git4.orig/arch/sparc64/kernel/signal.c linux-2.6.13-rc6-git4/arch/sparc64/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/sparc64/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/sparc64/kernel/signal.c	2005-08-12 22:05:10.000000000 -0400
@@ -574,13 +574,12 @@ static inline void handle_signal(unsigne
 {
 	setup_rt_frame(ka, regs, signr, oldset,
 		       (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL);
-	if (!(ka->sa.sa_flags & SA_NOMASK)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NOMASK))
 		sigaddset(&current->blocked,signr);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
diff -urp linux-2.6.13-rc6-git4.orig/arch/um/kernel/signal_kern.c linux-2.6.13-rc6-git4/arch/um/kernel/signal_kern.c
--- linux-2.6.13-rc6-git4.orig/arch/um/kernel/signal_kern.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/um/kernel/signal_kern.c	2005-08-12 22:06:31.000000000 -0400
@@ -87,12 +87,12 @@ static int handle_signal(struct pt_regs 
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 		force_sigsegv(signr, current);
-	}
-	else if(!(ka->sa.sa_flags & SA_NODEFER)){
+	} else {
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked, &current->blocked, 
 			  &ka->sa.sa_mask);
-		sigaddset(&current->blocked, signr);
+		 if(!(ka->sa.sa_flags & SA_NODEFER))
+			sigaddset(&current->blocked, signr);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/v850/kernel/signal.c linux-2.6.13-rc6-git4/arch/v850/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/v850/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/v850/kernel/signal.c	2005-08-12 22:06:47.000000000 -0400
@@ -462,13 +462,12 @@ handle_signal(unsigned long sig, siginfo
 	else
 		setup_frame(sig, ka, oldset, regs);
 
-	if (!(ka->sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
+	if (!(ka->sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked,sig);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 }
 
 /*
diff -urp linux-2.6.13-rc6-git4.orig/arch/x86_64/kernel/signal.c linux-2.6.13-rc6-git4/arch/x86_64/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/x86_64/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/x86_64/kernel/signal.c	2005-08-12 22:07:44.000000000 -0400
@@ -394,10 +394,11 @@ handle_signal(unsigned long sig, siginfo
 #endif
 	ret = setup_rt_frame(sig, ka, info, oldset, regs);
 
-	if (ret && !(ka->sa.sa_flags & SA_NODEFER)) {
+	if (ret) {
 		spin_lock_irq(&current->sighand->siglock);
 		sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
-		sigaddset(&current->blocked,sig);
+		if (!(ka->sa.sa_flags & SA_NODEFER))
+			sigaddset(&current->blocked,sig);
 		recalc_sigpending();
 		spin_unlock_irq(&current->sighand->siglock);
 	}
diff -urp linux-2.6.13-rc6-git4.orig/arch/xtensa/kernel/signal.c linux-2.6.13-rc6-git4/arch/xtensa/kernel/signal.c
--- linux-2.6.13-rc6-git4.orig/arch/xtensa/kernel/signal.c	2005-08-12 21:28:32.000000000 -0400
+++ linux-2.6.13-rc6-git4/arch/xtensa/kernel/signal.c	2005-08-12 22:08:02.000000000 -0400
@@ -702,12 +702,11 @@ int do_signal(struct pt_regs *regs, sigs
 	if (ka.sa.sa_flags & SA_ONESHOT)
 		ka.sa.sa_handler = SIG_DFL;
 
-	if (!(ka.sa.sa_flags & SA_NODEFER)) {
-		spin_lock_irq(&current->sighand->siglock);
-		sigorsets(&current->blocked, &current->blocked, &ka.sa.sa_mask);
+	spin_lock_irq(&current->sighand->siglock);
+	sigorsets(&current->blocked, &current->blocked, &ka.sa.sa_mask);
+	if (!(ka.sa.sa_flags & SA_NODEFER))
 		sigaddset(&current->blocked, signr);
-		recalc_sigpending();
-		spin_unlock_irq(&current->sighand->siglock);
-	}
+	recalc_sigpending();
+	spin_unlock_irq(&current->sighand->siglock);
 	return 1;
 }



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-13  2:40 [PATCH] Convert sigaction to act like other unices Steven Rostedt
@ 2005-08-13 12:39 ` Andi Kleen
  2005-08-13 14:00   ` Steven Rostedt
  2005-08-13 14:25   ` Steven Rostedt
  0 siblings, 2 replies; 8+ messages in thread
From: Andi Kleen @ 2005-08-13 12:39 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: LKML, rmk, ak, gerg, jdike, sammy, lethal, wli, davem, matthew,
	geert, paulus, davej, tony.luck, dev-etrax, rpurdie, spyro,
	Robert Wilkens, Bodo Stroesser, Jan Engelhardt, Chris Wright,
	Andrew Morton, Linus Torvalds

On Fri, Aug 12, 2005 at 10:40:02PM -0400, Steven Rostedt wroqte:
> Here's a patch that converts all architectures to behave like other unix
> boxes signal handling.  It's funny that I didn't need to change the m68k
> architecture, since it was the only one that already behaves this way!
> (the m68knommu does not!)

<rest snipped which also wasn't better>

This is not a description of what you changed. A patch entry has to 
start with a rationale and then a description of the change.

-Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-13 12:39 ` Andi Kleen
@ 2005-08-13 14:00   ` Steven Rostedt
  2005-08-13 21:29     ` Andi Kleen
  2005-08-13 14:25   ` Steven Rostedt
  1 sibling, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2005-08-13 14:00 UTC (permalink / raw)
  To: Andi Kleen
  Cc: LKML, rmk, gerg, jdike, sammy, lethal, wli, davem, matthew,
	geert, paulus, davej, tony.luck, dev-etrax, rpurdie, spyro,
	Robert Wilkens, Bodo Stroesser, Jan Engelhardt, Chris Wright,
	Andrew Morton, Linus Torvalds

On Sat, 2005-08-13 at 14:39 +0200, Andi Kleen wrote:
> On Fri, Aug 12, 2005 at 10:40:02PM -0400, Steven Rostedt wroqte:
> > Here's a patch that converts all architectures to behave like other unix
> > boxes signal handling.  It's funny that I didn't need to change the m68k
> > architecture, since it was the only one that already behaves this way!
> > (the m68knommu does not!)
> 
> <rest snipped which also wasn't better>
> 
> This is not a description of what you changed. A patch entry has to 
> start with a rationale and then a description of the change.

Sorry, I forgot that not all were in on the thread.  (duh, I added a
bunch of others, I guess I wasn't thinking clearly).

http://lkml.org/lkml/2005/8/9/190 "Singal handling possibly wrong".

Here's a summary:

Bodo Stroesser noticed a conflict between the man pages and what the
kernel was doing in regard to SA_NODEFER.  The man pages stated that
SA_NODEFER would only not defer the signal that is being processed,
where as the the kernel would not defer all signals (including those in
sa_mask).

The POSIX description of this was very confusing, where Linus thought it
explained what the kernel currently does, and I (and others) thought it
did what the man pages described.  Someone found an updated version that
supports my theory. In fact it seems that even the signal would be
defered if SA_NODEFER was set but the signal was in the sa_mask.

Finally, it was ask, what do other unix boxes do?  I wrote a simple
program that tested the behavior of this and posted it.  I had a couple
of responses that tested the following unices:

AIX, DU4, IRIX6, Solaris and OSF1, and all of these do it the way the
man pages described.  Since Linux happens to be the odd ball out, I
submitted the patch to make Linux act like other unix boxes with regard
to signals and SA_NODEFER.

Hope this explains things better.

-- Steve



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-13 12:39 ` Andi Kleen
  2005-08-13 14:00   ` Steven Rostedt
@ 2005-08-13 14:25   ` Steven Rostedt
  1 sibling, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2005-08-13 14:25 UTC (permalink / raw)
  To: Andi Kleen
  Cc: LKML, rmk, gerg, jdike, sammy, lethal, wli, davem, matthew,
	geert, paulus, davej, tony.luck, dev-etrax, rpurdie, spyro,
	Robert Wilkens, Bodo Stroesser, Jan Engelhardt, Chris Wright,
	Andrew Morton, Linus Torvalds

On Sat, 2005-08-13 at 14:39 +0200, Andi Kleen wrote:

> <rest snipped which also wasn't better>

Also, what you snipped was another issue, not addressed by the patch.
Some architectures test if the setting up of the signal handler stack
frame succeeded, and others don't.  I believe that this may be a
problem, since it was recently fixed on the x86, and probably should be
addressed on the architectures that don't check for failure.

-- Steve




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-13 14:00   ` Steven Rostedt
@ 2005-08-13 21:29     ` Andi Kleen
  2005-08-14 12:20       ` Jesper Juhl
  0 siblings, 1 reply; 8+ messages in thread
From: Andi Kleen @ 2005-08-13 21:29 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Andi Kleen, LKML, rmk, gerg, jdike, sammy, lethal, wli, davem,
	matthew, geert, paulus, davej, tony.luck, dev-etrax, rpurdie,
	spyro, Robert Wilkens, Bodo Stroesser, Jan Engelhardt,
	Chris Wright, Andrew Morton, Linus Torvalds

On Sat, Aug 13, 2005 at 10:00:14AM -0400, Steven Rostedt wrote:
> On Sat, 2005-08-13 at 14:39 +0200, Andi Kleen wrote:
> > On Fri, Aug 12, 2005 at 10:40:02PM -0400, Steven Rostedt wroqte:
> > > Here's a patch that converts all architectures to behave like other unix
> > > boxes signal handling.  It's funny that I didn't need to change the m68k
> > > architecture, since it was the only one that already behaves this way!
> > > (the m68knommu does not!)
> > 
> > <rest snipped which also wasn't better>
> > 
> > This is not a description of what you changed. A patch entry has to 
> > start with a rationale and then a description of the change.
> 
> Sorry, I forgot that not all were in on the thread.  (duh, I added a
> bunch of others, I guess I wasn't thinking clearly).

I actually read the thread, but patches with useless descriptions
like your previous one cannot be applied in general because you cannot expect
that people later looking at the <VCS system of the week> logs 
know about some obscure thread months or years before. Or rather
the person who applied it would need to write a better description
on his own, which is not their job.

My general feeling about the change is that it risks breaking programs
and doesn't seem to have any compelling advantages,
so unless there is a bug demonstrated I wouldn't apply it.

-Andi


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-13 21:29     ` Andi Kleen
@ 2005-08-14 12:20       ` Jesper Juhl
  2005-08-16 17:04         ` Steven Rostedt
  0 siblings, 1 reply; 8+ messages in thread
From: Jesper Juhl @ 2005-08-14 12:20 UTC (permalink / raw)
  To: Andi Kleen
  Cc: Steven Rostedt, LKML, rmk, gerg, jdike, sammy, lethal, wli,
	davem, matthew, geert, paulus, davej, tony.luck, dev-etrax,
	rpurdie, spyro, Robert Wilkens, Bodo Stroesser, Jan Engelhardt,
	Chris Wright, Andrew Morton, Linus Torvalds

On 8/13/05, Andi Kleen <ak@suse.de> wrote:
> On Sat, Aug 13, 2005 at 10:00:14AM -0400, Steven Rostedt wrote:
> > On Sat, 2005-08-13 at 14:39 +0200, Andi Kleen wrote:
> > > On Fri, Aug 12, 2005 at 10:40:02PM -0400, Steven Rostedt wroqte:
> > > > Here's a patch that converts all architectures to behave like other unix
> > > > boxes signal handling.  It's funny that I didn't need to change the m68k
> > > > architecture, since it was the only one that already behaves this way!
> > > > (the m68knommu does not!)
> > >
[snip]
> 
> My general feeling about the change is that it risks breaking programs
> and doesn't seem to have any compelling advantages,
> so unless there is a bug demonstrated I wouldn't apply it.
> 
> -Andi
> 

As I see it, the advantages are that we would  a) match the
documentation (man pages & posix/SUS) which makes things easier for
application writers who won't have to scratch their beards wondering
why Linux doesn't behave like the docs say. And  b) Linux behaviour
would match what most (all?) other Unices do, so there'll be less
hassle/bugs when porting apps from other systems to Linux.   To me,
those look like significant bennefits.
As for the "it may break programs" bit, that of course is a concern,
but one way around that would be to stick it in -mm and let it cook
for a few kernel releases. Say we stick it in -mm with a plan to merge
it into 2.6.16-rc1, that should give it quite a bit of time to
determine if it breaks apps (and if it does, to fix those apps).

Just my 0.02euro.


-- 
Jesper Juhl <jesper.juhl@gmail.com>
Don't top-post  http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please      http://www.expita.com/nomime.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-14 12:20       ` Jesper Juhl
@ 2005-08-16 17:04         ` Steven Rostedt
  2005-08-16 17:15           ` Linus Torvalds
  0 siblings, 1 reply; 8+ messages in thread
From: Steven Rostedt @ 2005-08-16 17:04 UTC (permalink / raw)
  To: Jesper Juhl
  Cc: Andi Kleen, LKML, rmk, gerg, jdike, sammy, lethal, wli, davem,
	matthew, geert, paulus, davej, tony.luck, dev-etrax, rpurdie,
	spyro, Robert Wilkens, Bodo Stroesser, Jan Engelhardt,
	Chris Wright, Andrew Morton, Linus Torvalds

On Sun, 2005-08-14 at 14:20 +0200, Jesper Juhl wrote:
> On 8/13/05, Andi Kleen <ak@suse.de> wrote:
> > On Sat, Aug 13, 2005 at 10:00:14AM -0400, Steven Rostedt wrote:
> > > On Sat, 2005-08-13 at 14:39 +0200, Andi Kleen wrote:
> > > > On Fri, Aug 12, 2005 at 10:40:02PM -0400, Steven Rostedt wroqte:
> > > > > Here's a patch that converts all architectures to behave like other unix
> > > > > boxes signal handling.  It's funny that I didn't need to change the m68k
> > > > > architecture, since it was the only one that already behaves this way!
> > > > > (the m68knommu does not!)
> > > >
> [snip]
> > 
> > My general feeling about the change is that it risks breaking programs
> > and doesn't seem to have any compelling advantages,
> > so unless there is a bug demonstrated I wouldn't apply it.
> > 
> > -Andi
> > 
> 
> As I see it, the advantages are that we would  a) match the
> documentation (man pages & posix/SUS) which makes things easier for
> application writers who won't have to scratch their beards wondering
> why Linux doesn't behave like the docs say. And  b) Linux behaviour
> would match what most (all?) other Unices do, so there'll be less
> hassle/bugs when porting apps from other systems to Linux.   To me,
> those look like significant bennefits.
> As for the "it may break programs" bit, that of course is a concern,
> but one way around that would be to stick it in -mm and let it cook
> for a few kernel releases. Say we stick it in -mm with a plan to merge
> it into 2.6.16-rc1, that should give it quite a bit of time to
> determine if it breaks apps (and if it does, to fix those apps).

Has there been a verdict on this.  Are we going to 

a) leave Linux "as-is" and be different than the man pages and POSIX as
well as pretty much every other Unix out there.  But..., we keep from
breaking any linux-only applications out there that actually depend on
this behaviour (if there were any).

b) add the patch (in -mm or early 14 or later), see if any applications
break, but we will finally match the man pages and etc.

Just curious.

-- Steve



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Convert sigaction to act like other unices
  2005-08-16 17:04         ` Steven Rostedt
@ 2005-08-16 17:15           ` Linus Torvalds
  0 siblings, 0 replies; 8+ messages in thread
From: Linus Torvalds @ 2005-08-16 17:15 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Jesper Juhl, Andi Kleen, LKML, rmk, gerg, jdike, sammy, lethal,
	wli, davem, matthew, geert, paulus, davej, tony.luck, dev-etrax,
	rpurdie, spyro, Robert Wilkens, Bodo Stroesser, Jan Engelhardt,
	Chris Wright, Andrew Morton



On Tue, 16 Aug 2005, Steven Rostedt wrote:
> 
> b) add the patch (in -mm or early 14 or later), see if any applications
> break, but we will finally match the man pages and etc.

We'll definitely test the patch. I doubt it breaks anything, and it's the 
right thing to do, but yes, we'll try it out very early in the 2.6.14 
cycle. Somebody make sure to send me the patch after I release 2.6.13 so 
that I don't forget.

		Linus

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-08-16 17:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-13  2:40 [PATCH] Convert sigaction to act like other unices Steven Rostedt
2005-08-13 12:39 ` Andi Kleen
2005-08-13 14:00   ` Steven Rostedt
2005-08-13 21:29     ` Andi Kleen
2005-08-14 12:20       ` Jesper Juhl
2005-08-16 17:04         ` Steven Rostedt
2005-08-16 17:15           ` Linus Torvalds
2005-08-13 14:25   ` Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome