[patch 02/18] sched: add task_is_running() fucntion to sched.h

markus.t.metzger
2009-04-02T14:58:02Z

[-- Attachment #1: tip.master.sched.task_running.patch --]
[-- Type: text/plain, Size: 1525 bytes --]

Add a function to query whether a task is currently running on any cpu.

Signed-off-by: Markus Metzger <markus.t.metzger@intel.com>

---
include/linux/sched.h | 5 5 + 0 - 0 !
kernel/sched.c | 16 16 + 0 - 0 !
2 files changed, 21 insertions(+)

Index: b/include/linux/sched.h
===================================================================
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1988,8 +1988,13 @@ extern void set_task_comm(struct task_st
extern char *get_task_comm(char *to, struct task_struct *tsk);

#ifdef CONFIG_SMP
+extern int task_is_running(struct task_struct *p);
extern unsigned long wait_task_inactive(struct task_struct *, long match_state);
#else
+static inline int task_is_running(struct task_struct *p)
+{
+ return p == current;
+}
static inline unsigned long wait_task_inactive(struct task_struct *p,
long match_state)
{
Index: b/kernel/sched.c
===================================================================
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1933,6 +1933,22 @@ migrate_task(struct task_struct *p, int
}

/*
+ * Is the task currently running on any cpu?
+ */
+int task_is_running(struct task_struct *p)
+{
+ struct rq *rq;
+ unsigned long flags;
+ int running;
+
+ rq = task_rq_lock(p, &flags);
+ running = task_running(rq, p);
+ task_rq_unlock(rq, &flags);
+
+ return running;
+}
+
+/*
* wait_task_inactive - wait for a thread to unschedule.
*
* If @match_state is nonzero, it's the @p->state value just checked and