public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Signal handling possibly wrong
@ 2005-08-09 17:44 Bodo Stroesser
  2005-08-09 18:26 ` Robert Wilkens
  2005-08-09 18:50 ` smbus driver for ati xpress 200m yhlu
  0 siblings, 2 replies; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-09 17:44 UTC (permalink / raw)
  To: linux-kernel

Hi,

reading man pages for sigaction and comparing it to what kernel does
when starting a signal handler (i386, s390, ppc and others), I think
one of both might be wrong.

 From man pages:

  sa_mask gives a mask of signals which should be blocked during
  execu­tion of the signal handler. In addition, the signal which
  triggered the handler will be blocked, unless the SA_NODEFER or
  SA_NOMASK flags are used.

 From arch/i386/kernel/signal.c:

         if (ret && !(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);
         }


If I understand man pages correctly, the handled signal should be blocked
depending on SA_NODEFER, while sa_mask should be used unconditionally to
block additional signals.
Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
isn't set.

Which is the right behavior?

Regards
		Bodo

P.S.:
Please CC me, I'm not on the list.

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

* Re: Signal handling possibly wrong
  2005-08-09 17:44 Signal handling possibly wrong Bodo Stroesser
@ 2005-08-09 18:26 ` Robert Wilkens
  2005-08-09 18:32   ` Bodo Stroesser
  2005-08-09 18:50 ` smbus driver for ati xpress 200m yhlu
  1 sibling, 1 reply; 37+ messages in thread
From: Robert Wilkens @ 2005-08-09 18:26 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: linux-kernel

> Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
> isn't set.
> 
> Which is the right behavior?

Perhaps both?

I'm novice here, but if i'm reading the man page correctly, it says:

SA_NODEFER
   Do not prevent the signal from being received from within
   its  own  signal handler. 
	(they also imply that SA_NOMASK is the old name for this,
	which might make it clear what it's use is).

In which case blocking (masking) when it's not set is exactly what it's
supposed to do.

-Rob


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

* Re: Signal handling possibly wrong
  2005-08-09 18:26 ` Robert Wilkens
@ 2005-08-09 18:32   ` Bodo Stroesser
  2005-08-09 18:39     ` Robert Wilkens
  0 siblings, 1 reply; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-09 18:32 UTC (permalink / raw)
  To: Robert Wilkens; +Cc: linux-kernel

Robert Wilkens wrote:
>>Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
>>isn't set.
>>
>>Which is the right behavior?
> 
> 
> Perhaps both?
> 
> I'm novice here, but if i'm reading the man page correctly, it says:
> 
> SA_NODEFER
>    Do not prevent the signal from being received from within
>    its  own  signal handler. 
> 	(they also imply that SA_NOMASK is the old name for this,
> 	which might make it clear what it's use is).
> 
> In which case blocking (masking) when it's not set is exactly what it's
> supposed to do.
> 
> -Rob

Yes. That's true.

But what about sa_mask? Description of SA_NODEFER and sa_mask both do not
say, that usage of sa_mask depends on SA_NODEFER.
But kernel only uses sa_mask, if SA_NODEFER isn't set.

So, I think man page and kernel are not consistent.

	Bodo

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

* Re: Signal handling possibly wrong
  2005-08-09 18:32   ` Bodo Stroesser
@ 2005-08-09 18:39     ` Robert Wilkens
  2005-08-09 18:44       ` Bodo Stroesser
  0 siblings, 1 reply; 37+ messages in thread
From: Robert Wilkens @ 2005-08-09 18:39 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: linux-kernel

Bodo,

SA_MASK is a flag... Which you use to tell it what to do with the data
you've given it and/or it gets.  You gave it sa_mask (lower-case).
SA_NOMASK means don't use the mask -- the pseudonym (new-word) for
SA_NOMASK is SA_NODEFER (renamed, perhaps, because it may defer some or
all signals rather than throwing them away, you probably can receive the
waiting signals by clearing the SA_NODEFER flag on a subsequent call).

If you want to take this off-list, I'm OK with that..

Please describe what you would expect SA_NODEFER to do in your own
language if you don't understand what I seem to understand.

-Rob
On Tue, 2005-08-09 at 20:32 +0200, Bodo Stroesser wrote:
> Robert Wilkens wrote:
> >>Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
> >>isn't set.
> >>
> >>Which is the right behavior?
> > 
> > 
> > Perhaps both?
> > 
> > I'm novice here, but if i'm reading the man page correctly, it says:
> > 
> > SA_NODEFER
> >    Do not prevent the signal from being received from within
> >    its  own  signal handler. 
> > 	(they also imply that SA_NOMASK is the old name for this,
> > 	which might make it clear what it's use is).
> > 
> > In which case blocking (masking) when it's not set is exactly what it's
> > supposed to do.
> > 
> > -Rob
> 
> Yes. That's true.
> 
> But what about sa_mask? Description of SA_NODEFER and sa_mask both do not
> say, that usage of sa_mask depends on SA_NODEFER.
> But kernel only uses sa_mask, if SA_NODEFER isn't set.
> 
> So, I think man page and kernel are not consistent.
> 
> 	Bodo
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


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

* Re: Signal handling possibly wrong
  2005-08-09 18:39     ` Robert Wilkens
@ 2005-08-09 18:44       ` Bodo Stroesser
  2005-08-09 19:04         ` Robert Wilkens
  0 siblings, 1 reply; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-09 18:44 UTC (permalink / raw)
  To: Robert Wilkens; +Cc: linux-kernel

Robert Wilkens wrote:
> Bodo,
> 
> SA_MASK is a flag... Which you use to tell it what to do with the data
> you've given it and/or it gets.  You gave it sa_mask (lower-case).
> SA_NOMASK means don't use the mask -- the pseudonym (new-word) for
> SA_NOMASK is SA_NODEFER (renamed, perhaps, because it may defer some or
> all signals rather than throwing them away, you probably can receive the
> waiting signals by clearing the SA_NODEFER flag on a subsequent call).
> 
> If you want to take this off-list, I'm OK with that..
> 
> Please describe what you would expect SA_NODEFER to do in your own
> language if you don't understand what I seem to understand.
> 
> -Rob
> On Tue, 2005-08-09 at 20:32 +0200, Bodo Stroesser wrote:
> 

Sorry, unfortunately you are not right. See this (from man page for sigaction):

struct sigaction {
                   void (*sa_handler)(int);
                   void (*sa_sigaction)(int, siginfo_t *, void *);
                   sigset_t sa_mask;
                   int sa_flags;
                   void (*sa_restorer)(void);
               }

Please read the text about element sa_mask of struct sigaction to
understand what I'm talking about.

Regards
	Bodo


>>Robert Wilkens wrote:
>>
>>>>Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
>>>>isn't set.
>>>>
>>>>Which is the right behavior?
>>>
>>>
>>>Perhaps both?
>>>
>>>I'm novice here, but if i'm reading the man page correctly, it says:
>>>
>>>SA_NODEFER
>>>   Do not prevent the signal from being received from within
>>>   its  own  signal handler. 
>>>	(they also imply that SA_NOMASK is the old name for this,
>>>	which might make it clear what it's use is).
>>>
>>>In which case blocking (masking) when it's not set is exactly what it's
>>>supposed to do.
>>>
>>>-Rob
>>
>>Yes. That's true.
>>
>>But what about sa_mask? Description of SA_NODEFER and sa_mask both do not
>>say, that usage of sa_mask depends on SA_NODEFER.
>>But kernel only uses sa_mask, if SA_NODEFER isn't set.
>>
>>So, I think man page and kernel are not consistent.
>>
>>	Bodo
>>-
>>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>the body of a message to majordomo@vger.kernel.org
>>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>Please read the FAQ at  http://www.tux.org/lkml/

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

* smbus driver for ati xpress 200m
  2005-08-09 17:44 Signal handling possibly wrong Bodo Stroesser
  2005-08-09 18:26 ` Robert Wilkens
@ 2005-08-09 18:50 ` yhlu
  2005-08-09 22:57   ` Andi Kleen
  1 sibling, 1 reply; 37+ messages in thread
From: yhlu @ 2005-08-09 18:50 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

anyone is working on add driver for ati xpress 200m?

without that My turion notebook, can not work read the battery status.

I guess sbs-cm need that driver in kernel.

YH

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

* Re: Signal handling possibly wrong
  2005-08-09 18:44       ` Bodo Stroesser
@ 2005-08-09 19:04         ` Robert Wilkens
  2005-08-09 19:33           ` Steven Rostedt
  2005-08-09 19:33           ` Jeremy Maitin-Shepard
  0 siblings, 2 replies; 37+ messages in thread
From: Robert Wilkens @ 2005-08-09 19:04 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: linux-kernel

[resent - previous message not properly addressed]

It says "signal is blocked, UNLESS SA_NODEFER is used.."

Which means if NODEFER is used, it's not masked (SA_NOMASK)..

I don't understand how i'm wrong (maybe I have mental problems that are
worse than I thought).  If you want to explain off-list or on-list
(depending on whether others are getting annoyed at me) you can.  Or
just ignore me and i'll go away and someone else who wants to look at it
can.

-Rob
On Tue, 2005-08-09 at 20:44 +0200, Bodo Stroesser wrote:
> Robert Wilkens wrote:
> > Bodo,
> > 
> > SA_MASK is a flag... Which you use to tell it what to do with the data
> > you've given it and/or it gets.  You gave it sa_mask (lower-case).
> > SA_NOMASK means don't use the mask -- the pseudonym (new-word) for
> > SA_NOMASK is SA_NODEFER (renamed, perhaps, because it may defer some or
> > all signals rather than throwing them away, you probably can receive the
> > waiting signals by clearing the SA_NODEFER flag on a subsequent call).
> > 
> > If you want to take this off-list, I'm OK with that..
> > 
> > Please describe what you would expect SA_NODEFER to do in your own
> > language if you don't understand what I seem to understand.
> > 
> > -Rob
> > On Tue, 2005-08-09 at 20:32 +0200, Bodo Stroesser wrote:
> > 
> 
> Sorry, unfortunately you are not right. See this (from man page for sigaction):
> 
> struct sigaction {
>                    void (*sa_handler)(int);
>                    void (*sa_sigaction)(int, siginfo_t *, void *);
>                    sigset_t sa_mask;
>                    int sa_flags;
>                    void (*sa_restorer)(void);
>                }
> 
> Please read the text about element sa_mask of struct sigaction to
> understand what I'm talking about.
> 
> Regards
> 	Bodo
> 
> 
> >>Robert Wilkens wrote:
> >>
> >>>>Kernel code blocks both "handled signal" _and_ sa_mask only if SA_NODEFER
> >>>>isn't set.
> >>>>
> >>>>Which is the right behavior?
> >>>
> >>>
> >>>Perhaps both?
> >>>
> >>>I'm novice here, but if i'm reading the man page correctly, it says:
> >>>
> >>>SA_NODEFER
> >>>   Do not prevent the signal from being received from within
> >>>   its  own  signal handler. 
> >>>	(they also imply that SA_NOMASK is the old name for this,
> >>>	which might make it clear what it's use is).
> >>>
> >>>In which case blocking (masking) when it's not set is exactly what it's
> >>>supposed to do.
> >>>
> >>>-Rob
> >>
> >>Yes. That's true.
> >>
> >>But what about sa_mask? Description of SA_NODEFER and sa_mask both do not
> >>say, that usage of sa_mask depends on SA_NODEFER.
> >>But kernel only uses sa_mask, if SA_NODEFER isn't set.
> >>
> >>So, I think man page and kernel are not consistent.
> >>
> >>	Bodo
> >>-
> >>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> >>the body of a message to majordomo@vger.kernel.org
> >>More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >>Please read the FAQ at  http://www.tux.org/lkml/
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


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

* Re: Signal handling possibly wrong
  2005-08-09 19:04         ` Robert Wilkens
@ 2005-08-09 19:33           ` Steven Rostedt
  2005-08-09 19:41             ` Bodo Stroesser
  2005-08-09 19:33           ` Jeremy Maitin-Shepard
  1 sibling, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-09 19:33 UTC (permalink / raw)
  To: Robert Wilkens; +Cc: linux-kernel, Bodo Stroesser

On Tue, 2005-08-09 at 15:04 -0400, Robert Wilkens wrote:
> [resent - previous message not properly addressed]
> 
> It says "signal is blocked, UNLESS SA_NODEFER is used.."
> 
> Which means if NODEFER is used, it's not masked (SA_NOMASK)..
> 

I believe I understand what Bodo is saying.  The man pages seem to imply
that the NODEFER only affects the signal being sent. Where as, in the
kernel, the NODEFER flag affects all signals in the sa_mask.

Let's look at the man pages again:

       sa_mask gives a mask of signals which should be blocked  during  execu-
       tion  of  the  signal handler.  In addition, the signal which triggered
       the handler will be blocked, unless the SA_NODEFER flag is used.

The "In addition" is what makes this look like the kernel is wrong. So
the man pages says that the sa_mask is the mask of signals that should
be blocked during exection of the signal handle (regardless) of the
SA_NODEFER.  It doesn't imply that the sa_mask would only work if the
SA_NODEFER was not set.  The SA_NODEFER seems to imply here that, if
set, the signal that is running could be called again.

It also seems to imply the other way around. That is, that the signal
that is running would be blocked regardless of the sa_mask, and only
would not be blocked if the SA_NODEFER is set.

To me, the man pages make more sense, and I think the kernel is wrong.

> I don't understand how i'm wrong (maybe I have mental problems that are
> worse than I thought).  If you want to explain off-list or on-list
> (depending on whether others are getting annoyed at me) you can.  Or
> just ignore me and i'll go away and someone else who wants to look at it
> can.

Don't take this off list, since I'm sure there are others here that can
add valid input.

-- Steve


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

* Re: Signal handling possibly wrong
  2005-08-09 19:04         ` Robert Wilkens
  2005-08-09 19:33           ` Steven Rostedt
@ 2005-08-09 19:33           ` Jeremy Maitin-Shepard
  1 sibling, 0 replies; 37+ messages in thread
From: Jeremy Maitin-Shepard @ 2005-08-09 19:33 UTC (permalink / raw)
  To: linux-kernel

It appears to me that Bodo Stroesser is correct.  The description of
sa_mask given in the man page is:

"sa_mask gives a mask of signals which should be blocked during
execution of the signal handler.  In addition, the signal which
triggered the handler will be blocked, unless the SA_NODEFER flag is
used."

Note that the "unless the SA_NODEFER flag is used" clause applies only
to "In addition, the signal which triggered the handler will be
blocked."  The first sentence of the description, which is unaffected by
this clause, states that the signals specified in sa_mask will be
blocked while the signal handler being installed executes.  The
description of sa_mask in no way suggests that if SA_NODEFER is
specified, the signals specified in sa_mask will not be blocked.

The description of SA_NODEFER given in the man page is:

"SA_NODEFER

Do not prevent the signal from being received from within its own signal
handler.  SA_NOMASK is an obsolete, non-standard synonym for this flag."

Clearly, the first sentence of this description is the only one which
specifies any behavior at all, so the second sentence can be ignored.
This description only states that SA_NODEFER will block the signal for
which a signal handler is being installed while the signal handler being
installed executes.  It does not indicate that SA_NODEFER has any effect
on the blocking of signals other than the one for which a handler is
being installed, and thus it should be assumed that it has no such
effect.

The source code indicates, though, that SA_NODEFER has precisely this
effect; specifying SA_NODEFER prevents the signals specified in sa_mask
from being blocked (an exception to the normal behavior of sa_mask,
described by the first sentence of the sa_mask man page description
included above), when neither the description of sa_mask nor the
description of SA_NODEFER specifies such an exception.

-- 
Jeremy Maitin-Shepard

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

* Re: Signal handling possibly wrong
  2005-08-09 19:33           ` Steven Rostedt
@ 2005-08-09 19:41             ` Bodo Stroesser
  2005-08-09 20:03               ` Steven Rostedt
  0 siblings, 1 reply; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-09 19:41 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Robert Wilkens, linux-kernel

Steven Rostedt wrote:
> On Tue, 2005-08-09 at 15:04 -0400, Robert Wilkens wrote:
> 
>>[resent - previous message not properly addressed]
>>
>>It says "signal is blocked, UNLESS SA_NODEFER is used.."
>>
>>Which means if NODEFER is used, it's not masked (SA_NOMASK)..
>>
> 
> 
> I believe I understand what Bodo is saying.  The man pages seem to imply
> that the NODEFER only affects the signal being sent. Where as, in the
> kernel, the NODEFER flag affects all signals in the sa_mask.
> 
> Let's look at the man pages again:
> 
>        sa_mask gives a mask of signals which should be blocked  during  execu-
>        tion  of  the  signal handler.  In addition, the signal which triggered
>        the handler will be blocked, unless the SA_NODEFER flag is used.
> 
> The "In addition" is what makes this look like the kernel is wrong. So
> the man pages says that the sa_mask is the mask of signals that should
> be blocked during exection of the signal handle (regardless) of the
> SA_NODEFER.  It doesn't imply that the sa_mask would only work if the
> SA_NODEFER was not set.  The SA_NODEFER seems to imply here that, if
> set, the signal that is running could be called again.
> 
> It also seems to imply the other way around. That is, that the signal
> that is running would be blocked regardless of the sa_mask, and only
> would not be blocked if the SA_NODEFER is set.
> 
> To me, the man pages make more sense, and I think the kernel is wrong.

Yes, that's what I think, too. If someone doesn't want additional signals
to be masked, he can set sa_mask to be empty.
OTOH, I have no idea, what POSIX specifies. Maybe kernel is right and man
page is wrong?

	Bodo
> 
> 
>>I don't understand how i'm wrong (maybe I have mental problems that are
>>worse than I thought).  If you want to explain off-list or on-list
>>(depending on whether others are getting annoyed at me) you can.  Or
>>just ignore me and i'll go away and someone else who wants to look at it
>>can.
> 
> 
> Don't take this off list, since I'm sure there are others here that can
> add valid input.
> 
> -- Steve

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

* Re: Signal handling possibly wrong
  2005-08-09 19:41             ` Bodo Stroesser
@ 2005-08-09 20:03               ` Steven Rostedt
  2005-08-09 20:19                 ` Steven Rostedt
  0 siblings, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-09 20:03 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: Robert Wilkens, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 699 bytes --]

On Tue, 2005-08-09 at 21:41 +0200, Bodo Stroesser wrote:
> S
> > To me, the man pages make more sense, and I think the kernel is wrong.
> 
> Yes, that's what I think, too. If someone doesn't want additional signals
> to be masked, he can set sa_mask to be empty.
> OTOH, I have no idea, what POSIX specifies. Maybe kernel is right and man
> page is wrong?
> 
> 	Bodo
> > 

Man pages and kernel are right.  I just tested this out on 2.6.13-rc3
with the attached program and it seems to follow what is stated in the
man pages. So the assumption of what the code did by looking at it
proves to be the mistake. :-)

Conclusion:  sa_mask defers the signals. SA_NODEFER defers the sent
signal.

-- Steve


[-- Attachment #2: signal.c --]
[-- Type: text/x-csrc, Size: 2423 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>

void user1(int x)
{
	int pid = getpid();
	printf("pid[%d]: user1 start\n",pid);
	sleep(5);
	printf("pid[%d]: user1 stopped\n",pid);
}

void user2(int x)
{
	int pid = getpid();
	printf("pid[%d]:in user2\n",pid);
}

void intr(int x)
{
	int pid = getpid();
	printf("pid[%d]: received SIGINT\n",pid);
	exit(0);
}

void start1(void)
{
	struct sigaction act;

	memset(&act,0,sizeof(act));

	act.sa_handler = intr;
	if ((sigaction(SIGINT,&act,NULL)) < 0) {
		perror("child1: sigaction");
		exit(-1);
	}
		
	act.sa_handler = user1;
	sigaddset(&act.sa_mask,SIGUSR2);
	if ((sigaction(SIGUSR1,&act,NULL)) < 0) {
		perror("child1: sigaction");
		exit(-1);
	}

	act.sa_handler = user2;
	if ((sigaction(SIGUSR2,&act,NULL)) < 0) {
		perror("child1: sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}

void start2(void)
{
	struct sigaction act;

	memset(&act,0,sizeof(act));
	
	act.sa_handler = intr;
	if ((sigaction(SIGINT,&act,NULL)) < 0) {
		perror("child2: sigaction");
		exit(-1);
	}
		
	act.sa_handler = user1;
	act.sa_flags |= SA_NODEFER;
	if ((sigaction(SIGUSR1,&act,NULL)) < 0) {
		perror("child2: sigaction");
		exit(-1);
	}
		
	act.sa_handler = user2;
	if ((sigaction(SIGUSR2,&act,NULL)) < 0) {
		perror("child1: sigaction");
		exit(-1);
	}
		
	for (;;)
		;

}

int main(int argc, char **argv)
{
	int pid[2];

	if ((pid[0] = fork()) < 0) {
		perror("fork");
	} else if (!pid[0]) {
		start1();
		exit(0);
	}
	
	if ((pid[1] = fork()) < 0) {
		perror("fork");
	} else if (!pid[1]) {
		start2();
		exit(0);
	}

	printf("parent sending %d SIGUSR1\n",pid[0]);
	kill(pid[0],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGUSR2\n",pid[0]);
	kill(pid[0],SIGUSR2);
	sleep(5);
	printf("parent sending %d SIGUSR1\n",pid[0]);
	kill(pid[0],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGUSR1\n",pid[0]);
	kill(pid[0],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGINT\n",pid[0]);
	kill(pid[0],SIGINT);

	printf("parent sending %d SIGUSR1\n",pid[1]);
	kill(pid[1],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGUSR2\n",pid[1]);
	kill(pid[1],SIGUSR2);
	sleep(5);
	printf("parent sending %d SIGUSR1\n",pid[1]);
	kill(pid[1],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGUSR1\n",pid[1]);
	kill(pid[1],SIGUSR1);
	sleep(1);
	printf("parent sending %d SIGINT\n",pid[1]);
	kill(pid[1],SIGINT);

	exit(0);
}

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

* Re: Signal handling possibly wrong
  2005-08-09 20:03               ` Steven Rostedt
@ 2005-08-09 20:19                 ` Steven Rostedt
  2005-08-09 20:49                   ` Chris Wright
  0 siblings, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-09 20:19 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: linux-kernel, Robert Wilkens

[-- Attachment #1: Type: text/plain, Size: 1144 bytes --]

On Tue, 2005-08-09 at 16:03 -0400, Steven Rostedt wrote:

> Man pages and kernel are right.  I just tested this out on 2.6.13-rc3
> with the attached program and it seems to follow what is stated in the
> man pages. So the assumption of what the code did by looking at it
> proves to be the mistake. :-)
> 
> Conclusion:  sa_mask defers the signals. SA_NODEFER defers the sent
> signal.

I'm the one that's wrong here ;-)   OK the kernel _does_ have a bug.
Looking at the code, I now see it, and my last program didn't show it.
The code in question was (as Bodo showed earlier):

        if (ret && !(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);
        }

Where, sa_mask is _ignored_ if NODEFER is set. (I now have woken up!).
The attached program shows that the sa_mask is indeed ignored when
SA_NODEFER is set.

Now the real question is... Is this a bug?

-- Steve


[-- Attachment #2: signal2 --]
[-- Type: application/x-executable, Size: 9189 bytes --]

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

* Re: Signal handling possibly wrong
  2005-08-09 20:19                 ` Steven Rostedt
@ 2005-08-09 20:49                   ` Chris Wright
  2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
                                       ` (2 more replies)
  0 siblings, 3 replies; 37+ messages in thread
From: Chris Wright @ 2005-08-09 20:49 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Bodo Stroesser, linux-kernel, Robert Wilkens

* Steven Rostedt (rostedt@goodmis.org) wrote:
> Where, sa_mask is _ignored_ if NODEFER is set. (I now have woken up!).
> The attached program shows that the sa_mask is indeed ignored when
> SA_NODEFER is set.
> 
> Now the real question is... Is this a bug?

That's not correct w.r.t. SUSv3.  sa_mask should be always used and
SA_NODEFER is just whether or not to add that signal in.

SA_NODEFER
    [XSI] If set and sig is caught, sig shall not be added to the thread's
    signal mask on entry to the signal handler unless it is included in
    sa_mask. Otherwise, sig shall always be added to the thread's signal
    mask on entry to the signal handler.

Brodo, is this what you mean?

thanks,
-chris
--

Subject: [PATCH] fix SA_NODEFER signals to honor sa_mask

When receiving SA_NODEFER signal, kernel was inapproriately not applying
the sa_mask.  As pointed out by Brodo Stroesser.

Signed-off-by: Chris Wright <chrisw@osdl.org>
---

diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
--- a/arch/i386/kernel/signal.c
+++ b/arch/i386/kernel/signal.c
@@ -577,13 +577,12 @@ handle_signal(unsigned long sig, siginfo
 	else
 		ret = setup_frame(sig, ka, oldset, regs);
 
-	if (ret && !(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 (ret && !(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 ret;
 }

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

* [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong)
  2005-08-09 20:49                   ` Chris Wright
@ 2005-08-09 21:00                     ` Steven Rostedt
  2005-08-09 21:06                       ` Chris Wright
  2005-08-09 21:07                       ` [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask Steven Rostedt
  2005-08-09 21:04                     ` Signal handling possibly wrong Chris Wright
  2005-08-10  9:11                     ` Bodo Stroesser
  2 siblings, 2 replies; 37+ messages in thread
From: Steven Rostedt @ 2005-08-09 21:00 UTC (permalink / raw)
  To: Chris Wright
  Cc: Linus Torvalds, Andrew Morton, Bodo Stroesser, linux-kernel,
	Robert Wilkens

On Tue, 2005-08-09 at 13:49 -0700, Chris Wright wrote:

> 
> SA_NODEFER
>     [XSI] If set and sig is caught, sig shall not be added to the thread's
>     signal mask on entry to the signal handler unless it is included in
>     sa_mask. Otherwise, sig shall always be added to the thread's signal
>     mask on entry to the signal handler.
> 
> Brodo, is this what you mean?
> 
> thanks,
> -chris
> --
> 
> Subject: [PATCH] fix SA_NODEFER signals to honor sa_mask
> 
> When receiving SA_NODEFER signal, kernel was inapproriately not applying
> the sa_mask.  As pointed out by Brodo Stroesser.
> 
> Signed-off-by: Chris Wright <chrisw@osdl.org>
> ---
> 
> diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
> --- a/arch/i386/kernel/signal.c
> +++ b/arch/i386/kernel/signal.c
> @@ -577,13 +577,12 @@ handle_signal(unsigned long sig, siginfo
>  	else
>  		ret = setup_frame(sig, ka, oldset, regs);
>  
> -	if (ret && !(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 (ret && !(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 ret;
>  }


Hmm, I think you want this patch. You still need to check the return of
setting up the frames.

-- Steve

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

--- linux-2.6.13-rc6-git1/arch/i386/kernel/signal.c.orig	2005-08-09 16:54:36.000000000 -0400
+++ linux-2.6.13-rc6-git1/arch/i386/kernel/signal.c	2005-08-09 16:55:24.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);
 	}



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

* Re: Signal handling possibly wrong
  2005-08-09 20:49                   ` Chris Wright
  2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
@ 2005-08-09 21:04                     ` Chris Wright
  2005-08-10  9:11                     ` Bodo Stroesser
  2 siblings, 0 replies; 37+ messages in thread
From: Chris Wright @ 2005-08-09 21:04 UTC (permalink / raw)
  To: Chris Wright; +Cc: Steven Rostedt, Bodo Stroesser, linux-kernel, Robert Wilkens

* Chris Wright (chrisw@osdl.org) wrote:

Actually that one broke a fix that I think Brodo discovered in the first
place with bogus stack frames.

Should be this one.

thanks,
-chris
---


Subject: [PATCH] fix SA_NODEFER signals to honor sa_mask

When receiving SA_NODEFER signal, kernel was inapproriately not applying
the sa_mask.  As pointed out by Brodo Stroesser.

Signed-off-by: Chris Wright <chrisw@osdl.org>

diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
--- a/arch/i386/kernel/signal.c
+++ b/arch/i386/kernel/signal.c
@@ -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);
 	}

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

* Re: [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong)
  2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
@ 2005-08-09 21:06                       ` Chris Wright
  2005-08-09 21:07                       ` [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask Steven Rostedt
  1 sibling, 0 replies; 37+ messages in thread
From: Chris Wright @ 2005-08-09 21:06 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Chris Wright, Linus Torvalds, Andrew Morton, Bodo Stroesser,
	linux-kernel, Robert Wilkens

* Steven Rostedt (rostedt@goodmis.org) wrote:
> Hmm, I think you want this patch. You still need to check the return of
> setting up the frames.

Indeed, I noticecd just after I sent, and sent an updated patch.
Thanks Steve!

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
  2005-08-09 21:06                       ` Chris Wright
@ 2005-08-09 21:07                       ` Steven Rostedt
  2005-08-09 21:27                         ` Linus Torvalds
  1 sibling, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-09 21:07 UTC (permalink / raw)
  To: Chris Wright
  Cc: gdt, Linus Torvalds, Andrew Morton, Bodo Stroesser, linux-kernel,
	Robert Wilkens

If this is indeed the way things should work. I'll go ahead and fix all
the other architectures.

-- Steve

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

--- linux-2.6.13-rc6-git1/arch/ppc/kernel/signal.c.orig	2005-08-09 17:00:43.000000000 -0400
+++ linux-2.6.13-rc6-git1/arch/ppc/kernel/signal.c	2005-08-09 17:01:37.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;
 }



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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-09 21:07                       ` [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask Steven Rostedt
@ 2005-08-09 21:27                         ` Linus Torvalds
  2005-08-10  3:10                           ` Steven Rostedt
  2005-08-10  9:44                           ` Bodo Stroesser
  0 siblings, 2 replies; 37+ messages in thread
From: Linus Torvalds @ 2005-08-09 21:27 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Chris Wright, gdt, Andrew Morton, Bodo Stroesser, linux-kernel,
	Robert Wilkens



On Tue, 9 Aug 2005, Steven Rostedt wrote:
>
> If this is indeed the way things should work. I'll go ahead and fix all
> the other architectures.

It does appear that this is what the standards describe in the section 
quoted by Chris.

On the other hand, the standard seems to be a bit confused according to 
google:

  "This mask is formed by taking the union of the current signal mask and
   the value of the sa_mask for the signal being delivered unless
   SA_NODEFER or SA_RESETHAND is set, and then including the signal being
   delivered. If and when the user's signal handler returns normally, the
   original signal mask is restored."

Quite frankly, the way I read it is actually the old Linux behaviour: the 
"unless SA_NODEFER or SA_RESETHAND is set" seems to be talking about the 
whole union of the sa_mask thing, _not_ just the "and the signal being 
delivered" part. Exactly the way the kernel currently does (except we 
should apparently _also_ do it for SA_RESETHAND).

So if we decide to change the kernel behaviour, I'd like this to be in -mm
for a while before merging (or merge _very_ early after 2.6.13). I could
imagine this confusing some existing binaries that had only been tested
with the old Linux behaviour, regardless of what a standard says. 
Especially since the standard itself is so confusing and badly worded.

Maybe somebody can tell what other systems do, since I assume the standard 
is trying to describe behaviour that actually exists in the wild..

		Linus

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

* Re: smbus driver for ati xpress 200m
  2005-08-09 18:50 ` smbus driver for ati xpress 200m yhlu
@ 2005-08-09 22:57   ` Andi Kleen
  2005-08-10  2:51     ` yhlu
  0 siblings, 1 reply; 37+ messages in thread
From: Andi Kleen @ 2005-08-09 22:57 UTC (permalink / raw)
  To: yhlu; +Cc: Andi Kleen, linux-kernel

On Tue, Aug 09, 2005 at 11:50:53AM -0700, yhlu wrote:
> anyone is working on add driver for ati xpress 200m?
> 
> without that My turion notebook, can not work read the battery status.

Normally this should be done in ACPI battery.c

-Andi

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

* Re: smbus driver for ati xpress 200m
  2005-08-09 22:57   ` Andi Kleen
@ 2005-08-10  2:51     ` yhlu
  2005-08-10  7:27       ` Andi Kleen
  0 siblings, 1 reply; 37+ messages in thread
From: yhlu @ 2005-08-10  2:51 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

yhlunb:/proc/acpi/battery/BAT1 # cat info
present:                 yes
design capacity:         4800 mAh
last full capacity:      4435 mAh
battery technology:      rechargeable
design voltage:          14800 mV
design capacity warning: 300 mAh
design capacity low:     132 mAh
capacity granularity 1:  32 mAh
capacity granularity 2:  32 mAh
model number:            ZF02
serial number:           836
battery type:            LION
OEM info:                SIMPLO
yhlunb:/proc/acpi/battery/BAT1 # cat state
present:                 yes
ERROR: Unable to read battery status



On 8/9/05, Andi Kleen <ak@suse.de> wrote:
> On Tue, Aug 09, 2005 at 11:50:53AM -0700, yhlu wrote:
> > anyone is working on add driver for ati xpress 200m?
> >
> > without that My turion notebook, can not work read the battery status.
> 
> Normally this should be done in ACPI battery.c
> 
> -Andi
>

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-09 21:27                         ` Linus Torvalds
@ 2005-08-10  3:10                           ` Steven Rostedt
  2005-08-10  3:33                             ` Steven Rostedt
  2005-08-12 18:37                             ` Jan Engelhardt
  2005-08-10  9:44                           ` Bodo Stroesser
  1 sibling, 2 replies; 37+ messages in thread
From: Steven Rostedt @ 2005-08-10  3:10 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Chris Wright, gdt, Andrew Morton, Bodo Stroesser, linux-kernel,
	Robert Wilkens

[-- Attachment #1: Type: text/plain, Size: 3978 bytes --]

On Tue, 2005-08-09 at 14:27 -0700, Linus Torvalds wrote:
> On the other hand, the standard seems to be a bit confused according to 
> google:
> 
>   "This mask is formed by taking the union of the current signal mask and
>    the value of the sa_mask for the signal being delivered unless
>    SA_NODEFER or SA_RESETHAND is set, and then including the signal being
>    delivered. If and when the user's signal handler returns normally, the
>    original signal mask is restored."
> 
> Quite frankly, the way I read it is actually the old Linux behaviour: the 
> "unless SA_NODEFER or SA_RESETHAND is set" seems to be talking about the 
> whole union of the sa_mask thing, _not_ just the "and the signal being 
> delivered" part. Exactly the way the kernel currently does (except we 
> should apparently _also_ do it for SA_RESETHAND).

Actually I take it the other way.  The wording is awful. But the "unless
SA_NODEFER or SA_RESETHAND is set, and then including the signal being
delivered".  This looks to me that it adds the signal being delivered to
the blocked mask unless the SA_NODEFER or SA_RESETHAND is set. I kind of
wonder if English is the native language of those that wrote this.  
> 
> So if we decide to change the kernel behaviour, I'd like this to be in -mm
> for a while before merging (or merge _very_ early after 2.6.13). I could
> imagine this confusing some existing binaries that had only been tested
> with the old Linux behaviour, regardless of what a standard says. 
> Especially since the standard itself is so confusing and badly worded.
> 
> Maybe somebody can tell what other systems do, since I assume the standard 
> is trying to describe behaviour that actually exists in the wild..

Well, I wrote this (attached) test program to see how signals are
affected by different settings.  It's best run under an idle system, so
if someone has another unix out there that can run this and return the
results, we can see how they work.  This test program has possible race
conditions but should work fine on an idle system. But that's just the
nature of testing signals and other asynchronous activities, as well as
just writing something up in a couple of minutes ;-)

A non-modified Linux returns this:

   sa_mask blocks other signals
   SA_NODEFER does not block other signals
   SA_NODEFER affects sa_mask
   SA_NODEFER and sa_mask does not block sig
   !SA_NODEFER blocks sig
   SA_NODEFER does not block sig
   sa_mask blocks sig

This shows the following:

1. That signals in sa_mask are blocked while the signal handler is
running. 
2. SA_NODEFER does not by itself block other signals (this should never
be anything else).
3. SA_NODEFER does affect the sa_mask (which is the topic of this
discussion). 
4. When SA_NODEFER is set and sa_mask has the signal itself set, then
the signal is blocked (I believe that this is wrong too. If the signal
is itself in sa_mask then SA_NODEFER should still not let it run. This
should be interresting to see what other unices do).
5. When SA_NODEFER is not set, the signal is blocked (this is correct).
6. When SA_NODEFER is set (with nothing in sa_mask) the signal is not
blocked (also correct).
7. When the signal itself is set in sa_mask, then the signal is blocked
(correct).

With a patched kernel we get the following output:

   sa_mask blocks other signals
   SA_NODEFER does not block other signals
   SA_NODEFER does not affect sa_mask
   SA_NODEFER and sa_mask blocks sig
   !SA_NODEFER blocks sig
   SA_NODEFER does not block sig
   sa_mask blocks sig

Here the differences are that SA_NODEFER does _not_ affect the sa_mask,
and that when both the sig is in sa_mask and the SA_NODEFER is set, then
the signal is still blocked.  I can see this being useful if the sa_mask
is generated, and the NODEFER is expected to be the default. This allows
for overriding the default.

So, if someone can run this test on another unix system, then we can
have an idea of how others handle this.

-- Steve


[-- Attachment #2: test_signal.c --]
[-- Type: text/x-csrc, Size: 3573 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int u1;
static int u2;

static void user1(int x)
{
	/* for testing against itself */
	if (u1)
		u2 = 1;
	u1 = 1;
	sleep(5);
	u1 = 0;
}

static void user2(int x)
{
	if (u1)
		u2 = 1;
}

static void intr(int x)
{
	exit(u2);
}

static void start(struct sigaction *act)
{
	struct sigaction a;

	memset(&a,0,sizeof(a));

	a.sa_handler = intr;
	if ((sigaction(SIGINT,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
	
	/*
	 * This is the testing handler
	 */
	act->sa_handler = user1;
	if ((sigaction(SIGUSR1,act,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}

	a.sa_handler = user2;
	if ((sigaction(SIGUSR2,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}
int testsig(struct sigaction *act, int sig1, int sig2)
{
	int pid;
	int status;

	if ((pid = fork()) < 0) {
		perror("fork");
	} else if (!pid) {
		/*
		 * Test1 sa_mask includes SIGUSR2
		 */
		start(act);
		exit(0);
	}
	/*
	 * Send first signal to start the test.
	 */
	kill(pid,sig1);
	/*
	 * SIGUSR1 sleeps for 5, just sleep for on here
	 * to make sure the system got it.
	 */
	sleep(1);
	/*
	 * Send the second signal to the child, to see if 
	 * this wakes it up.
	 */
	kill(pid,sig2);
	sleep(1);
	/*
	 * End the test.
	 */
	kill(pid,SIGINT);
	waitpid(pid,&status,0);
	return WEXITSTATUS(status);
}

int main(int argc, char **argv)
{
	struct sigaction act;
	int ret;
	
	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	if (ret == 1) {
		printf("sa_mask does not block other signals\n");
	} else if (ret == 0) {
		printf("sa_mask blocks other signals\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	if (ret == 1) {
		printf("SA_NODEFER does not block other signals\n");
	} else if (ret == 0) {
		printf("SA_NODEFER blocks other signals\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	if (ret == 1) {
		printf("SA_NODEFER affects sa_mask\n");
	} else if (ret == 0) {
		printf("SA_NODEFER does not affect sa_mask\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	if (ret == 1) {
		printf("SA_NODEFER and sa_mask does not block sig\n");
	} else if (ret == 0) {
		printf("SA_NODEFER and sa_mask blocks sig\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	if (ret == 1) {
		printf("!SA_NODEFER does not block sig\n");
	} else if (ret == 0) {
		printf("!SA_NODEFER blocks sig\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	if (ret == 1) {
		printf("SA_NODEFER does not block sig\n");
	} else if (ret == 0) {
		printf("SA_NODEFER blocks sig\n");
	} else {
		printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	if (ret == 1) {
		printf("sa_mask does not block sig\n");
	} else if (ret == 0) {
		printf("sa_mask blocks sig\n");
	} else {
		printf("Unknown return code!!\n");
	}

	exit(0);
	exit(0);
}

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-10  3:10                           ` Steven Rostedt
@ 2005-08-10  3:33                             ` Steven Rostedt
  2005-08-12 18:37                             ` Jan Engelhardt
  1 sibling, 0 replies; 37+ messages in thread
From: Steven Rostedt @ 2005-08-10  3:33 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Robert Wilkens, linux-kernel, Bodo Stroesser, Andrew Morton, gdt,
	Chris Wright

[-- Attachment #1: Type: text/plain, Size: 790 bytes --]

On Tue, 2005-08-09 at 23:10 -0400, Steven Rostedt wrote:
>         memset(&act,0,sizeof(act));
>         sigaddset(&act.sa_mask,SIGUSR1);
>         ret = testsig(&act,SIGUSR1,SIGUSR1);
>         if (ret == 1) {
>                 printf("sa_mask does not block sig\n");
>         } else if (ret == 0) {
>                 printf("sa_mask blocks sig\n");
>         } else {
>                 printf("Unknown return code!!\n");
>         }
> 
>         exit(0);
>         exit(0);

Yuck! OK I was into the cut and paste here. This probably would look
much better as 

ret = testsig(&act,SIGUSR1,SIGUSR1);
switch (ret) {
case 0:
	printf("...");
	break;
case 1:
	printf("...");
	break;
default:
	printf("Unknown...");
}

And what was I doing with the double exits??

OK, time for bed.

-- Steve


[-- Attachment #2: test_signal.c --]
[-- Type: text/x-csrc, Size: 3696 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int u1;
static int u2;

static void user1(int x)
{
	/* for testing against itself */
	if (u1)
		u2 = 1;
	u1 = 1;
	sleep(5);
	u1 = 0;
}

static void user2(int x)
{
	if (u1)
		u2 = 1;
}

static void intr(int x)
{
	exit(u2);
}

static void start(struct sigaction *act)
{
	struct sigaction a;

	memset(&a,0,sizeof(a));

	a.sa_handler = intr;
	if ((sigaction(SIGINT,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
	
	/*
	 * This is the testing handler
	 */
	act->sa_handler = user1;
	if ((sigaction(SIGUSR1,act,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}

	a.sa_handler = user2;
	if ((sigaction(SIGUSR2,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}
int testsig(struct sigaction *act, int sig1, int sig2)
{
	int pid;
	int status;

	if ((pid = fork()) < 0) {
		perror("fork");
	} else if (!pid) {
		/*
		 * Test1 sa_mask includes SIGUSR2
		 */
		start(act);
		exit(0);
	}
	/*
	 * Send first signal to start the test.
	 */
	kill(pid,sig1);
	/*
	 * SIGUSR1 sleeps for 5, just sleep for on here
	 * to make sure the system got it.
	 */
	sleep(1);
	/*
	 * Send the second signal to the child, to see if 
	 * this wakes it up.
	 */
	kill(pid,sig2);
	sleep(1);
	/*
	 * End the test.
	 */
	kill(pid,SIGINT);
	waitpid(pid,&status,0);
	return WEXITSTATUS(status);
}

int main(int argc, char **argv)
{
	struct sigaction act;
	int ret;
	
	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("sa_mask blocks other signals\n");
			break;
		case 1:
			printf("sa_mask does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks other signals\n");
			break;
		case 1:
			printf("SA_NODEFER does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER does not affect sa_mask\n");
			break;
		case 1:
			printf("SA_NODEFER affects sa_mask\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER and sa_mask blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER and sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("!SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("!SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("sa_mask blocks sig\n");
			break;
		case 1:
			printf("sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	exit(0);
}

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

* Re: smbus driver for ati xpress 200m
  2005-08-10  2:51     ` yhlu
@ 2005-08-10  7:27       ` Andi Kleen
  0 siblings, 0 replies; 37+ messages in thread
From: Andi Kleen @ 2005-08-10  7:27 UTC (permalink / raw)
  To: yhlu; +Cc: Andi Kleen, linux-kernel

On Tue, Aug 09, 2005 at 07:51:53PM -0700, yhlu wrote:
> yhlunb:/proc/acpi/battery/BAT1 # cat info
> present:                 yes
> design capacity:         4800 mAh
> last full capacity:      4435 mAh
> battery technology:      rechargeable
> design voltage:          14800 mV
> design capacity warning: 300 mAh
> design capacity low:     132 mAh
> capacity granularity 1:  32 mAh
> capacity granularity 2:  32 mAh
> model number:            ZF02
> serial number:           836
> battery type:            LION
> OEM info:                SIMPLO
> yhlunb:/proc/acpi/battery/BAT1 # cat state
> present:                 yes
> ERROR: Unable to read battery status

Contact the ACPI people then. They like getting their reports 
in http://bugzilla.kernel.org

-Andi

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

* Re: Signal handling possibly wrong
  2005-08-09 20:49                   ` Chris Wright
  2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
  2005-08-09 21:04                     ` Signal handling possibly wrong Chris Wright
@ 2005-08-10  9:11                     ` Bodo Stroesser
  2005-08-10 16:20                       ` Chris Wright
  2 siblings, 1 reply; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-10  9:11 UTC (permalink / raw)
  To: Chris Wright; +Cc: Steven Rostedt, linux-kernel, Robert Wilkens

Chris Wright wrote:
> * Steven Rostedt (rostedt@goodmis.org) wrote:
> 
>>Where, sa_mask is _ignored_ if NODEFER is set. (I now have woken up!).
>>The attached program shows that the sa_mask is indeed ignored when
>>SA_NODEFER is set.
>>
>>Now the real question is... Is this a bug?
> 
> 
> That's not correct w.r.t. SUSv3.  sa_mask should be always used and
> SA_NODEFER is just whether or not to add that signal in.
> 
> SA_NODEFER
>     [XSI] If set and sig is caught, sig shall not be added to the thread's
>     signal mask on entry to the signal handler unless it is included in
>     sa_mask. Otherwise, sig shall always be added to the thread's signal
>     mask on entry to the signal handler.
> 
> Brodo, is this what you mean?
> 
> thanks,
> -chris
> --
Yes. That's the difference between kernel and man page, that I've found.
I like the patch, at least the version Steven has sent. But at the end,
others have to decide if kernel or man page should be changed.

BTW: would you please call me Bodo? :-)

Regards
	Bodo

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-09 21:27                         ` Linus Torvalds
  2005-08-10  3:10                           ` Steven Rostedt
@ 2005-08-10  9:44                           ` Bodo Stroesser
  1 sibling, 0 replies; 37+ messages in thread
From: Bodo Stroesser @ 2005-08-10  9:44 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Steven Rostedt, Chris Wright, gdt, Andrew Morton, linux-kernel,
	Robert Wilkens

Linus Torvalds wrote:
> 
> On Tue, 9 Aug 2005, Steven Rostedt wrote:
> 
>>If this is indeed the way things should work. I'll go ahead and fix all
>>the other architectures.
> 
> 
> It does appear that this is what the standards describe in the section 
> quoted by Chris.
> 
> On the other hand, the standard seems to be a bit confused according to 
> google:
> 
>   "This mask is formed by taking the union of the current signal mask and
>    the value of the sa_mask for the signal being delivered unless
>    SA_NODEFER or SA_RESETHAND is set, and then including the signal being
>    delivered. If and when the user's signal handler returns normally, the
>    original signal mask is restored."

I've googled a bit, too. Unfortunately, I don't have much knowledge about
standards and who defines or changes them. Nevertheless it might help
what I've found in "http://www.opengroup.org/austin/docs/austin_251.txt":

   XSH ERN 84 sigaction Accept as marked below

   Change from:
    This mask is formed by taking the union of the current signal mask and
    the value of the sa_mask for the signal being delivered [XSI] [Option
    Start]  unless SA_NODEFER or SA_RESETHAND is set, [Option End] and
    then including the signal being delivered.
   to:
    This mask is formed by taking the union of the current signal mask and
    the value of the sa_mask for the signal being delivered, and [XSI] [Option
    Start]  unless SA_NODEFER or SA_RESETHAND is set, [Option End]
    then including the signal being delivered.

Maybe, the standard already is fixed?

	Bodo

> 
> Quite frankly, the way I read it is actually the old Linux behaviour: the 
> "unless SA_NODEFER or SA_RESETHAND is set" seems to be talking about the 
> whole union of the sa_mask thing, _not_ just the "and the signal being 
> delivered" part. Exactly the way the kernel currently does (except we 
> should apparently _also_ do it for SA_RESETHAND).
> 
> So if we decide to change the kernel behaviour, I'd like this to be in -mm
> for a while before merging (or merge _very_ early after 2.6.13). I could
> imagine this confusing some existing binaries that had only been tested
> with the old Linux behaviour, regardless of what a standard says. 
> Especially since the standard itself is so confusing and badly worded.
> 
> Maybe somebody can tell what other systems do, since I assume the standard 
> is trying to describe behaviour that actually exists in the wild..
> 
> 		Linus

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

* Re: Signal handling possibly wrong
  2005-08-10  9:11                     ` Bodo Stroesser
@ 2005-08-10 16:20                       ` Chris Wright
  0 siblings, 0 replies; 37+ messages in thread
From: Chris Wright @ 2005-08-10 16:20 UTC (permalink / raw)
  To: Bodo Stroesser; +Cc: Chris Wright, Steven Rostedt, linux-kernel, Robert Wilkens

* Bodo Stroesser (bstroesser@fujitsu-siemens.com) wrote:
> BTW: would you please call me Bodo? :-)

Oops, I can't read!  Sorry.
-chris

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

* Re: Signal handling possibly wrong
       [not found] <11855.1123690475@www37.gmx.net>
@ 2005-08-10 16:22 ` Michael Kerrisk
  0 siblings, 0 replies; 37+ messages in thread
From: Michael Kerrisk @ 2005-08-10 16:22 UTC (permalink / raw)
  To: Chris Wright; +Cc: Steven Rostedt, Bodo Stroesser, linux-kernel, Robert Wilkens

> * Steven Rostedt (rostedt@goodmis.org) wrote:
> > Where, sa_mask is _ignored_ if NODEFER is set. (I now have woken up!).
> > The attached program shows that the sa_mask is indeed ignored when
> > SA_NODEFER is set.
> > 
> > Now the real question is... Is this a bug?
> 
> That's not correct w.r.t. SUSv3.  sa_mask should be always used and
> SA_NODEFER is just whether or not to add that signal in.

Yes.

> SA_NODEFER
>     [XSI] If set and sig is caught, sig shall not be added to the 
>     thread's
>     signal mask on entry to the signal handler unless it is included in
>     sa_mask. Otherwise, sig shall always be added to the thread's signal
>     mask on entry to the signal handler.

It's amazing that this non-conformance was never spotted before.
It seems to go all the way back to kernel 1.0 (when the flag
was known as SA_NOMASK).

I'll get something into the manual pages under BUGS.

Cheers,

Michael

-- 
Michael Kerrisk
maintainer of Linux man pages Sections 2, 3, 4, 5, and 7 

Want to help with man page maintenance?  Grab the latest
tarball at ftp://ftp.win.tue.nl/pub/linux-local/manpages/
and grep the source files for 'FIXME'.

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-10  3:10                           ` Steven Rostedt
  2005-08-10  3:33                             ` Steven Rostedt
@ 2005-08-12 18:37                             ` Jan Engelhardt
  2005-08-12 18:45                               ` Chris Wright
  1 sibling, 1 reply; 37+ messages in thread
From: Jan Engelhardt @ 2005-08-12 18:37 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Linus Torvalds, Chris Wright, gdt, Andrew Morton, Bodo Stroesser,
	linux-kernel, Robert Wilkens


>Actually I take it the other way.  The wording is awful. But the "unless
>SA_NODEFER or SA_RESETHAND is set, and then including the signal being
>delivered".  This looks to me that it adds the signal being delivered to
>the blocked mask unless the SA_NODEFER or SA_RESETHAND is set. I kind of
>wonder if English is the native language of those that wrote this.  

So, if in doubt what is really meant - check which of the two/three/+ 
different behaviors the users out there favor most.



Jan Engelhardt
-- 

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 18:37                             ` Jan Engelhardt
@ 2005-08-12 18:45                               ` Chris Wright
  2005-08-12 18:59                                 ` Steven Rostedt
  0 siblings, 1 reply; 37+ messages in thread
From: Chris Wright @ 2005-08-12 18:45 UTC (permalink / raw)
  To: Jan Engelhardt
  Cc: Steven Rostedt, Linus Torvalds, Chris Wright, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

* Jan Engelhardt (jengelh@linux01.gwdg.de) wrote:
> >Actually I take it the other way.  The wording is awful. But the "unless
> >SA_NODEFER or SA_RESETHAND is set, and then including the signal being
> >delivered".  This looks to me that it adds the signal being delivered to
> >the blocked mask unless the SA_NODEFER or SA_RESETHAND is set. I kind of
> >wonder if English is the native language of those that wrote this.  
> 
> So, if in doubt what is really meant - check which of the two/three/+ 
> different behaviors the users out there favor most.

Rather, check what happens in practice on other implementations.  I don't
have Solaris, HP-UX, Irix, AIX, etc. boxen at hand, but some folks must.

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 18:45                               ` Chris Wright
@ 2005-08-12 18:59                                 ` Steven Rostedt
  2005-08-12 19:27                                   ` Steven Rostedt
                                                     ` (2 more replies)
  0 siblings, 3 replies; 37+ messages in thread
From: Steven Rostedt @ 2005-08-12 18:59 UTC (permalink / raw)
  To: Chris Wright
  Cc: Jan Engelhardt, Linus Torvalds, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

[-- Attachment #1: Type: TEXT/PLAIN, Size: 615 bytes --]

On Fri, 12 Aug 2005, Chris Wright wrote:
> * Jan Engelhardt (jengelh@linux01.gwdg.de) wrote:
> > So, if in doubt what is really meant - check which of the two/three/+
> > different behaviors the users out there favor most.
>
> Rather, check what happens in practice on other implementations.  I don't
> have Solaris, HP-UX, Irix, AIX, etc. boxen at hand, but some folks must.
>

I've supplied this before, but I'll send it again.  Attached is a program
that should show the behavior of the sigaction.  If someone has one of the
above mentioned boxes, please run this on the box and send back the
results.

-- Steve

[-- Attachment #2: Type: TEXT/x-csrc, Size: 3904 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int u1;
static int u2;

static void user1(int x)
{
	/* for testing against itself */
	if (u1)
		u2 = 1;
	u1 = 1;
	sleep(5);
	u1 = 0;
}

static void user2(int x)
{
	if (u1)
		u2 = 1;
}

static void intr(int x)
{
	exit(u2);
}

static void start(struct sigaction *act)
{
	struct sigaction a;

	memset(&a,0,sizeof(a));

	a.sa_handler = intr;
	if ((sigaction(SIGINT,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
	
	/*
	 * This is the testing handler
	 */
	act->sa_handler = user1;
	if ((sigaction(SIGUSR1,act,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}

	a.sa_handler = user2;
	if ((sigaction(SIGUSR2,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}
int testsig(struct sigaction *act, int sig1, int sig2)
{
	int pid;
	int status;

	if ((pid = fork()) < 0) {
		perror("fork");
	} else if (!pid) {
		/*
		 * Test1 sa_mask includes SIGUSR2
		 */
		start(act);
		exit(0);
	}
	/*
	 * Send first signal to start the test.
	 */
	kill(pid,sig1);
	/*
	 * SIGUSR1 sleeps for 5, just sleep for on here
	 * to make sure the system got it.
	 */
	sleep(1);
	/*
	 * Send the second signal to the child, to see if 
	 * this wakes it up.
	 */
	kill(pid,sig2);
	sleep(1);
	/*
	 * End the test.
	 */
	kill(pid,SIGINT);
	waitpid(pid,&status,0);
	return WEXITSTATUS(status);
}

int main(int argc, char **argv)
{
	struct sigaction act;
	int ret;
	
	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("sa_mask blocks other signals\n");
			break;
		case 1:
			printf("sa_mask does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks other signals\n");
			break;
		case 1:
			printf("SA_NODEFER does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER does not affect sa_mask\n");
			break;
		case 1:
			printf("SA_NODEFER affects sa_mask\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER and sa_mask blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER and sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("!SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("!SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("sa_mask blocks sig\n");
			break;
		case 1:
			printf("sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	exit(0);
}

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 18:59                                 ` Steven Rostedt
@ 2005-08-12 19:27                                   ` Steven Rostedt
  2005-08-12 19:31                                   ` Jesper Juhl
  2005-08-13 18:47                                   ` Marc Ballarin
  2 siblings, 0 replies; 37+ messages in thread
From: Steven Rostedt @ 2005-08-12 19:27 UTC (permalink / raw)
  To: Chris Wright
  Cc: Jan Engelhardt, Linus Torvalds, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

[-- Attachment #1: Type: TEXT/PLAIN, Size: 573 bytes --]


On Fri, 12 Aug 2005, Steven Rostedt wrote:
>
> I've supplied this before, but I'll send it again.  Attached is a program
> that should show the behavior of the sigaction.  If someone has one of the
> above mentioned boxes, please run this on the box and send back the
> results.

Here it is again. I tried it on another Linux box and realize that the
parent was running before the child was able to initialize the signal
handlers.  So I added another sleep.  I know sleeps don't guarentee
anything, but this is just a simple test.

Attached is the fixed program.

-- Steve

[-- Attachment #2: Type: TEXT/x-csrc, Size: 3916 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int u1;
static int u2;

static void user1(int x)
{
	/* for testing against itself */
	if (u1)
		u2 = 1;
	u1 = 1;
	sleep(5);
	u1 = 0;
}

static void user2(int x)
{
	if (u1)
		u2 = 1;
}

static void intr(int x)
{
	exit(u2);
}

static void start(struct sigaction *act)
{
	struct sigaction a;

	memset(&a,0,sizeof(a));

	a.sa_handler = intr;
	if ((sigaction(SIGINT,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
	
	/*
	 * This is the testing handler
	 */
	act->sa_handler = user1;
	if ((sigaction(SIGUSR1,act,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}

	a.sa_handler = user2;
	if ((sigaction(SIGUSR2,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}
int testsig(struct sigaction *act, int sig1, int sig2)
{
	int pid;
	int status;

	if ((pid = fork()) < 0) {
		perror("fork");
	} else if (!pid) {
		/*
		 * Test1 sa_mask includes SIGUSR2
		 */
		start(act);
		exit(0);
	}
	sleep(1);
	/*
	 * Send first signal to start the test.
	 */
	kill(pid,sig1);
	/*
	 * SIGUSR1 sleeps for 5, just sleep for on here
	 * to make sure the system got it.
	 */
	sleep(1);
	/*
	 * Send the second signal to the child, to see if 
	 * this wakes it up.
	 */
	kill(pid,sig2);
	sleep(1);
	/*
	 * End the test.
	 */
	kill(pid,SIGINT);
	waitpid(pid,&status,0);
	return WEXITSTATUS(status);
}

int main(int argc, char **argv)
{
	struct sigaction act;
	int ret;
	
	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("sa_mask blocks other signals\n");
			break;
		case 1:
			printf("sa_mask does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks other signals\n");
			break;
		case 1:
			printf("SA_NODEFER does not block other signals\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER does not affect sa_mask\n");
			break;
		case 1:
			printf("SA_NODEFER affects sa_mask\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER and sa_mask blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER and sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("!SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("!SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("sa_mask blocks sig\n");
			break;
		case 1:
			printf("sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code!!\n");
	}

	exit(0);
}

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 18:59                                 ` Steven Rostedt
  2005-08-12 19:27                                   ` Steven Rostedt
@ 2005-08-12 19:31                                   ` Jesper Juhl
  2005-08-12 21:08                                     ` Steven Rostedt
  2005-08-12 21:53                                     ` Steven Rostedt
  2005-08-13 18:47                                   ` Marc Ballarin
  2 siblings, 2 replies; 37+ messages in thread
From: Jesper Juhl @ 2005-08-12 19:31 UTC (permalink / raw)
  To: rostedt
  Cc: Chris Wright, Jan Engelhardt, Linus Torvalds, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

On 8/12/05, Steven Rostedt <rostedt@goodmis.org> wrote:
> On Fri, 12 Aug 2005, Chris Wright wrote:
> > * Jan Engelhardt (jengelh@linux01.gwdg.de) wrote:
> > > So, if in doubt what is really meant - check which of the two/three/+
> > > different behaviors the users out there favor most.
> >
> > Rather, check what happens in practice on other implementations.  I don't
> > have Solaris, HP-UX, Irix, AIX, etc. boxen at hand, but some folks must.
> >
> 
> I've supplied this before, but I'll send it again.  Attached is a program
> that should show the behavior of the sigaction.  If someone has one of the
> above mentioned boxes, please run this on the box and send back the
> results.
> 
I've got a 4-way pSeries p550 running AIX 5.3 here : 

$ uname -s -M -p -v -r
AIX 3 5 powerpc IBM,9113-550

Output from your program :

$ ./a.out
Unknown return code!!
Unknown return code!!
Unknown return code!!
Unknown return code!!
Unknown return code!!
Unknown return code!!
sa_mask blocks sig


-- 
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] 37+ messages in thread

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 19:31                                   ` Jesper Juhl
@ 2005-08-12 21:08                                     ` Steven Rostedt
  2005-08-14 11:24                                       ` Jesper Juhl
  2005-08-12 21:53                                     ` Steven Rostedt
  1 sibling, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-12 21:08 UTC (permalink / raw)
  To: Jesper Juhl
  Cc: Chris Wright, Jan Engelhardt, Linus Torvalds, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

On Fri, 2005-08-12 at 21:31 +0200, Jesper Juhl wrote:

> > 
> I've got a 4-way pSeries p550 running AIX 5.3 here : 
> 
> $ uname -s -M -p -v -r
> AIX 3 5 powerpc IBM,9113-550
> 
> Output from your program :
> 
> $ ./a.out
> Unknown return code!!
> Unknown return code!!
> Unknown return code!!
> Unknown return code!!
> Unknown return code!!
> Unknown return code!!
> sa_mask blocks sig
> 

Did you try my updated code (the one with the extra sleep?). Here's
another version where I output the unknown return code.  Funny that this
didn't print any other error message. Since the return codes should show
something else.

Please try the attached.

Thanks,

-- Steve


[-- Attachment #2: test_signal.c --]
[-- Type: text/x-csrc, Size: 3770 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int u1;
static int u2;

static void user1(int x)
{
	/* for testing against itself */
	if (u1)
		u2 = 1;
	u1 = 1;
	sleep(5);
	u1 = 0;
}

static void user2(int x)
{
	if (u1)
		u2 = 1;
}

static void intr(int x)
{
	exit(u2);
}

static void start(struct sigaction *act)
{
	struct sigaction a;

	memset(&a,0,sizeof(a));

	a.sa_handler = intr;
	if ((sigaction(SIGINT,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
	
	/*
	 * This is the testing handler
	 */
	act->sa_handler = user1;
	if ((sigaction(SIGUSR1,act,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}

	a.sa_handler = user2;
	if ((sigaction(SIGUSR2,&a,NULL)) < 0) {
		perror("sigaction");
		exit(-1);
	}
		
		
	for (;;)
		;

}
int testsig(struct sigaction *act, int sig1, int sig2)
{
	int pid;
	int status;

	if ((pid = fork()) < 0) {
		perror("fork");
	} else if (!pid) {
		/*
		 * Test1 sa_mask includes SIGUSR2
		 */
		start(act);
		exit(0);
	}
	sleep(1);
	/*
	 * Send first signal to start the test.
	 */
	kill(pid,sig1);
	/*
	 * SIGUSR1 sleeps for 5, just sleep for on here
	 * to make sure the system got it.
	 */
	sleep(1);
	/*
	 * Send the second signal to the child, to see if 
	 * this wakes it up.
	 */
	kill(pid,sig2);
	sleep(1);
	/*
	 * End the test.
	 */
	kill(pid,SIGINT);
	waitpid(pid,&status,0);
	return WEXITSTATUS(status);
}

int main(int argc, char **argv)
{
	struct sigaction act;
	int ret;
	
	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("sa_mask blocks other signals\n");
			break;
		case 1:
			printf("sa_mask does not block other signals\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks other signals\n");
			break;
		case 1:
			printf("SA_NODEFER does not block other signals\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR2);
	ret = testsig(&act,SIGUSR1,SIGUSR2);
	switch (ret) {
		case 0:
			printf("SA_NODEFER does not affect sa_mask\n");
			break;
		case 1:
			printf("SA_NODEFER affects sa_mask\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER and sa_mask blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER and sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("!SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("!SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	memset(&act,0,sizeof(act));
	act.sa_flags |= SA_NODEFER;
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("SA_NODEFER blocks sig\n");
			break;
		case 1:
			printf("SA_NODEFER does not block sig\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	memset(&act,0,sizeof(act));
	sigaddset(&act.sa_mask,SIGUSR1);
	ret = testsig(&act,SIGUSR1,SIGUSR1);
	switch (ret) {
		case 0:
			printf("sa_mask blocks sig\n");
			break;
		case 1:
			printf("sa_mask does not block sig\n");
			break;
		default:
			printf("Unknown return code (%d)!!\n",ret);
	}

	exit(0);
}

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 19:31                                   ` Jesper Juhl
  2005-08-12 21:08                                     ` Steven Rostedt
@ 2005-08-12 21:53                                     ` Steven Rostedt
  2005-08-14 22:04                                       ` Kyle Moffett
  1 sibling, 1 reply; 37+ messages in thread
From: Steven Rostedt @ 2005-08-12 21:53 UTC (permalink / raw)
  To: Jesper Juhl
  Cc: Chris Wright, Jan Engelhardt, Linus Torvalds, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

Two more systems that are different from Linux.

So far, Linux is the odd ball out.

-- Steve


On Fri, 2005-08-12 at 22:28 +0100, someone else wrote: 
> 
> SunOS hostname 5.10 Generic sun4u sparc SUNW,Sun-Blade-1000
> 
> sa_mask blocks other signals
> SA_NODEFER does not block other signals
> SA_NODEFER does not affect sa_mask
> SA_NODEFER and sa_mask blocks sig
> !SA_NODEFER blocks sig
> SA_NODEFER does not block sig
> sa_mask blocks sig
> 
> 
> OSF1 hostname V5.1 2650 alpha
> 
> sa_mask blocks other signals
> SA_NODEFER does not block other signals
> SA_NODEFER does not affect sa_mask
> SA_NODEFER and sa_mask blocks sig
> !SA_NODEFER blocks sig
> SA_NODEFER does not block sig
> sa_mask blocks sig
> 
> 


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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 18:59                                 ` Steven Rostedt
  2005-08-12 19:27                                   ` Steven Rostedt
  2005-08-12 19:31                                   ` Jesper Juhl
@ 2005-08-13 18:47                                   ` Marc Ballarin
  2 siblings, 0 replies; 37+ messages in thread
From: Marc Ballarin @ 2005-08-13 18:47 UTC (permalink / raw)
  To: rostedt
  Cc: chrisw, jengelh, torvalds, gdt, akpm, bstroesser, linux-kernel,
	robw

On Fri, 12 Aug 2005 14:59:49 -0400 (EDT)
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Fri, 12 Aug 2005, Chris Wright wrote:
> > * Jan Engelhardt (jengelh@linux01.gwdg.de) wrote:
> > > So, if in doubt what is really meant - check which of the two/three/+
> > > different behaviors the users out there favor most.
> >
> > Rather, check what happens in practice on other implementations.  I don't
> > have Solaris, HP-UX, Irix, AIX, etc. boxen at hand, but some folks must.
> >
> 
> I've supplied this before, but I'll send it again.  Attached is a program
> that should show the behavior of the sigaction.  If someone has one of the
> above mentioned boxes, please run this on the box and send back the
> results.

This is from NetBSD 2.0:

sa_mask blocks other signals
SA_NODEFER does not block other signals
SA_NODEFER does not affect sa_mask
SA_NODEFER and sa_mask does not block sig
!SA_NODEFER blocks sig
SA_NODEFER does not block sig
sa_mask blocks sig


This is from SFU 3.5 on WinXP (*):

sa_mask blocks other signals
SA_NODEFER does not block other signals
SA_NODEFER does not affect sa_mask
SA_NODEFER and sa_mask blocks sig
!SA_NODEFER blocks sig
SA_NODEFER blocks sig
sa_mask blocks sig

(*) original signal.h did not define SA_NODEFER, so take this with a
grain of salt

Marc

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

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 21:08                                     ` Steven Rostedt
@ 2005-08-14 11:24                                       ` Jesper Juhl
  0 siblings, 0 replies; 37+ messages in thread
From: Jesper Juhl @ 2005-08-14 11:24 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Chris Wright, Jan Engelhardt, Linus Torvalds, gdt, Andrew Morton,
	Bodo Stroesser, linux-kernel, Robert Wilkens

On 8/12/05, Steven Rostedt <rostedt@goodmis.org> wrote:
> On Fri, 2005-08-12 at 21:31 +0200, Jesper Juhl wrote:
> 
> > >
> > I've got a 4-way pSeries p550 running AIX 5.3 here :
> >
> > $ uname -s -M -p -v -r
> > AIX 3 5 powerpc IBM,9113-550
> >
> > Output from your program :
> >
> > $ ./a.out
> > Unknown return code!!
> > Unknown return code!!
> > Unknown return code!!
> > Unknown return code!!
> > Unknown return code!!
> > Unknown return code!!
> > sa_mask blocks sig
> >
> 
> Did you try my updated code (the one with the extra sleep?). Here's
> another version where I output the unknown return code.  Funny that this
> didn't print any other error message. Since the return codes should show
> something else.
> 
> Please try the attached.
> 
With the version you attached I get this :

$ uname -s -M -p -v -r
AIX 3 5 powerpc IBM,9113-550
$ gcc test_signal.c
$ ./a.out
sa_mask blocks other signals
SA_NODEFER does not block other signals
SA_NODEFER does not affect sa_mask
SA_NODEFER and sa_mask blocks sig
!SA_NODEFER blocks sig
SA_NODEFER does not block sig
sa_mask blocks sig


-- 
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] 37+ messages in thread

* Re: [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask
  2005-08-12 21:53                                     ` Steven Rostedt
@ 2005-08-14 22:04                                       ` Kyle Moffett
  0 siblings, 0 replies; 37+ messages in thread
From: Kyle Moffett @ 2005-08-14 22:04 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Jesper Juhl, Chris Wright, Jan Engelhardt, Linus Torvalds,
	Andrew Morton, Bodo Stroesser, linux-kernel, Robert Wilkens

On Aug 12, 2005, at 17:53:53, Steven Rostedt wrote:
> Two more systems that are different from Linux.
>
> So far, Linux is the odd ball out.

Make that three more systems (Mac OS X has the same behavior as the  
BSDs):

zeus:~ kyle$ uname -a
Darwin zeus.moffetthome.net 8.2.0 Darwin Kernel Version 8.2.0: Fri  
Jun 24 17:46:54 PDT 2005; root:xnu-792.2.4.obj~3/RELEASE_PPC Power  
Macintosh powerpc
zeus:~ kyle$ ./test_signal
sa_mask blocks other signals
SA_NODEFER does not block other signals
SA_NODEFER does not affect sa_mask
SA_NODEFER and sa_mask blocks sig
!SA_NODEFER blocks sig
SA_NODEFER does not block sig
sa_mask blocks sig

Cheers,
Kyle Moffett

--
Q: Why do programmers confuse Halloween and Christmas?
A: Because OCT 31 == DEC 25.




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

end of thread, other threads:[~2005-08-14 22:04 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-09 17:44 Signal handling possibly wrong Bodo Stroesser
2005-08-09 18:26 ` Robert Wilkens
2005-08-09 18:32   ` Bodo Stroesser
2005-08-09 18:39     ` Robert Wilkens
2005-08-09 18:44       ` Bodo Stroesser
2005-08-09 19:04         ` Robert Wilkens
2005-08-09 19:33           ` Steven Rostedt
2005-08-09 19:41             ` Bodo Stroesser
2005-08-09 20:03               ` Steven Rostedt
2005-08-09 20:19                 ` Steven Rostedt
2005-08-09 20:49                   ` Chris Wright
2005-08-09 21:00                     ` [PATCH] Fix i386 signal handling of NODEFER, should not affect sa_mask (was: Re: Signal handling possibly wrong) Steven Rostedt
2005-08-09 21:06                       ` Chris Wright
2005-08-09 21:07                       ` [PATCH] Fix PPC signal handling of NODEFER, should not affect sa_mask Steven Rostedt
2005-08-09 21:27                         ` Linus Torvalds
2005-08-10  3:10                           ` Steven Rostedt
2005-08-10  3:33                             ` Steven Rostedt
2005-08-12 18:37                             ` Jan Engelhardt
2005-08-12 18:45                               ` Chris Wright
2005-08-12 18:59                                 ` Steven Rostedt
2005-08-12 19:27                                   ` Steven Rostedt
2005-08-12 19:31                                   ` Jesper Juhl
2005-08-12 21:08                                     ` Steven Rostedt
2005-08-14 11:24                                       ` Jesper Juhl
2005-08-12 21:53                                     ` Steven Rostedt
2005-08-14 22:04                                       ` Kyle Moffett
2005-08-13 18:47                                   ` Marc Ballarin
2005-08-10  9:44                           ` Bodo Stroesser
2005-08-09 21:04                     ` Signal handling possibly wrong Chris Wright
2005-08-10  9:11                     ` Bodo Stroesser
2005-08-10 16:20                       ` Chris Wright
2005-08-09 19:33           ` Jeremy Maitin-Shepard
2005-08-09 18:50 ` smbus driver for ati xpress 200m yhlu
2005-08-09 22:57   ` Andi Kleen
2005-08-10  2:51     ` yhlu
2005-08-10  7:27       ` Andi Kleen
     [not found] <11855.1123690475@www37.gmx.net>
2005-08-10 16:22 ` Signal handling possibly wrong Michael Kerrisk

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