|
@@ -75,6 +75,21 @@ extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, i
|
|
|
struct task_struct *fork_idle(int);
|
|
|
extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
|
|
|
|
|
|
+extern void free_task(struct task_struct *tsk);
|
|
|
+
|
|
|
+#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
|
|
|
+
|
|
|
+extern void __put_task_struct(struct task_struct *t);
|
|
|
+
|
|
|
+static inline void put_task_struct(struct task_struct *t)
|
|
|
+{
|
|
|
+ if (atomic_dec_and_test(&t->usage))
|
|
|
+ __put_task_struct(t);
|
|
|
+}
|
|
|
+
|
|
|
+struct task_struct *task_rcu_dereference(struct task_struct **ptask);
|
|
|
+struct task_struct *try_get_task_struct(struct task_struct **ptask);
|
|
|
+
|
|
|
|
|
|
#ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT
|
|
|
extern int arch_task_struct_size __read_mostly;
|