[PATCH 3/5] Add TASK_WAKEKILL

2007-10-24 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox <[EMAIL PROTECTED]>
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index fc28637..d1e32ec 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -170,27 +170,33 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk->exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk->state again */
 #define TASK_DEAD  64
+#define TASK_WAKEKILL  128
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task->state & TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task->state & TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task->state & __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task->state & __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task->state & (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task->state & TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 1b08700..0a805b7 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -456,15 +456,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t->state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t->state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -620,7 +620,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT) && 
!sigismember(>blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/5] Add TASK_WAKEKILL

2007-10-24 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox [EMAIL PROTECTED]
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index fc28637..d1e32ec 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -170,27 +170,33 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk-exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk-state again */
 #define TASK_DEAD  64
+#define TASK_WAKEKILL  128
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task-state  TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task-state  TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task-state  __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task-state  __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task-state  (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task-state  (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task-state  TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 1b08700..0a805b7 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -456,15 +456,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t-state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t-state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -620,7 +620,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT)  
!sigismember(t-blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/5] Add TASK_WAKEKILL

2007-10-18 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox <[EMAIL PROTECTED]>
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5ef5253..f02ade4 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -169,27 +169,33 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk->exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk->state again */
 #define TASK_DEAD  64
+#define TASK_WAKEKILL  128
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task->state & TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task->state & TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task->state & __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task->state & __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task->state & (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task->state & TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 16c16a3..3f28990 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -457,15 +457,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t->state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t->state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -621,7 +621,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT) && 
!sigismember(>blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/5] Add TASK_WAKEKILL

2007-10-18 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox [EMAIL PROTECTED]
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5ef5253..f02ade4 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -169,27 +169,33 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk-exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk-state again */
 #define TASK_DEAD  64
+#define TASK_WAKEKILL  128
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task-state  TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task-state  TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task-state  __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task-state  __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task-state  (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task-state  (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task-state  TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 16c16a3..3f28990 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -457,15 +457,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t-state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t-state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -621,7 +621,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT)  
!sigismember(t-blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/5] Add TASK_WAKEKILL

2007-09-01 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox <[EMAIL PROTECTED]>
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index ea509e9..6769179 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -167,28 +167,34 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk->exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk->state again */
 #define TASK_NONINTERACTIVE64
 #define TASK_DEAD  128
+#define TASK_WAKEKILL  256
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task->state & TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task->state & TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task->state & __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task->state & __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task->state & (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task->state & TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 53cbac4..986ba10 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -459,15 +459,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t->state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t->state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -623,7 +623,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT) && 
!sigismember(>blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/5] Add TASK_WAKEKILL

2007-09-01 Thread Matthew Wilcox
Set TASK_WAKEKILL for TASK_STOPPED and TASK_TRACED, add TASK_KILLABLE and
use TASK_WAKEKILL in signal_wake_up()

Signed-off-by: Matthew Wilcox [EMAIL PROTECTED]
---
 include/linux/sched.h |   22 ++
 kernel/signal.c   |8 
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index ea509e9..6769179 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -167,28 +167,34 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq 
*cfs_rq)
 #define TASK_RUNNING   0
 #define TASK_INTERRUPTIBLE 1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_STOPPED   4
-#define TASK_TRACED8
+#define __TASK_STOPPED 4
+#define __TASK_TRACED  8
 /* in tsk-exit_state */
 #define EXIT_ZOMBIE16
 #define EXIT_DEAD  32
 /* in tsk-state again */
 #define TASK_NONINTERACTIVE64
 #define TASK_DEAD  128
+#define TASK_WAKEKILL  256
+
+/* Convenience macros for the sake of set_task_state */
+#define TASK_KILLABLE  (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
+#define TASK_STOPPED   (TASK_WAKEKILL | __TASK_STOPPED)
+#define TASK_TRACED(TASK_WAKEKILL | __TASK_TRACED)
 
 /* Convenience macros for the sake of wake_up */
 #define TASK_NORMAL(TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
-#define TASK_ALL   (TASK_NORMAL | TASK_STOPPED | TASK_TRACED)
+#define TASK_ALL   (TASK_NORMAL | __TASK_STOPPED | __TASK_TRACED)
 
 /* get_task_state() */
 #define TASK_REPORT(TASK_RUNNING | TASK_INTERRUPTIBLE | \
-TASK_UNINTERRUPTIBLE | TASK_STOPPED | \
-TASK_TRACED)
+TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
+__TASK_TRACED)
 
-#define is_task_traced(task)   ((task-state  TASK_TRACED) != 0)
-#define is_task_stopped(task)  ((task-state  TASK_STOPPED) != 0)
+#define is_task_traced(task)   ((task-state  __TASK_TRACED) != 0)
+#define is_task_stopped(task)  ((task-state  __TASK_STOPPED) != 0)
 #define is_task_stopped_or_traced(task)\
-   ((task-state  (TASK_STOPPED | TASK_TRACED)) != 0)
+   ((task-state  (__TASK_STOPPED | __TASK_TRACED)) != 0)
 #define is_task_loadavg(task)  ((task-state  TASK_UNINTERRUPTIBLE) != 0)
 
 #define __set_task_state(tsk, state_value) \
diff --git a/kernel/signal.c b/kernel/signal.c
index 53cbac4..986ba10 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -459,15 +459,15 @@ void signal_wake_up(struct task_struct *t, int resume)
set_tsk_thread_flag(t, TIF_SIGPENDING);
 
/*
-* For SIGKILL, we want to wake it up in the stopped/traced case.
-* We don't check t-state here because there is a race with it
+* For SIGKILL, we want to wake it up in the stopped/traced/killable
+* case. We don't check t-state here because there is a race with it
 * executing another processor and just now entering stopped state.
 * By using wake_up_state, we ensure the process will wake up and
 * handle its death signal.
 */
mask = TASK_INTERRUPTIBLE;
if (resume)
-   mask |= TASK_STOPPED | TASK_TRACED;
+   mask |= TASK_WAKEKILL;
if (!wake_up_state(t, mask))
kick_process(t);
 }
@@ -623,7 +623,7 @@ static void handle_stop_signal(int sig, struct task_struct 
*p)
 * Wake up the stopped thread _after_ setting
 * TIF_SIGPENDING
 */
-   state = TASK_STOPPED;
+   state = __TASK_STOPPED;
if (sig_user_defined(t, SIGCONT)  
!sigismember(t-blocked, SIGCONT)) {
set_tsk_thread_flag(t, TIF_SIGPENDING);
state |= TASK_INTERRUPTIBLE;
-- 
1.4.4.2

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/