1#ifndef _LINUX_SCHED_H
2#define _LINUX_SCHED_H
3
4#include <asm/param.h>
5
6#include <linux/config.h>
7#include <linux/capability.h>
8#include <linux/threads.h>
9#include <linux/kernel.h>
10#include <linux/types.h>
11#include <linux/timex.h>
12#include <linux/jiffies.h>
13#include <linux/rbtree.h>
14#include <linux/thread_info.h>
15#include <linux/cpumask.h>
16
17#include <asm/system.h>
18#include <asm/semaphore.h>
19#include <asm/page.h>
20#include <asm/ptrace.h>
21#include <asm/mmu.h>
22
23#include <linux/smp.h>
24#include <linux/sem.h>
25#include <linux/signal.h>
26#include <linux/securebits.h>
27#include <linux/fs_struct.h>
28#include <linux/compiler.h>
29#include <linux/completion.h>
30#include <linux/pid.h>
31#include <linux/percpu.h>
32
33struct exec_domain;
34
35
36
37
38#define CSIGNAL 0x000000ff
39#define CLONE_VM 0x00000100
40#define CLONE_FS 0x00000200
41#define CLONE_FILES 0x00000400
42#define CLONE_SIGHAND 0x00000800
43#define CLONE_IDLETASK 0x00001000
44#define CLONE_PTRACE 0x00002000
45#define CLONE_VFORK 0x00004000
46#define CLONE_PARENT 0x00008000
47#define CLONE_THREAD 0x00010000
48#define CLONE_NEWNS 0x00020000
49#define CLONE_SYSVSEM 0x00040000
50#define CLONE_SETTLS 0x00080000
51#define CLONE_PARENT_SETTID 0x00100000
52#define CLONE_CHILD_CLEARTID 0x00200000
53#define CLONE_DETACHED 0x00400000
54#define CLONE_UNTRACED 0x00800000
55#define CLONE_CHILD_SETTID 0x01000000
56#define CLONE_STOPPED 0x02000000
57
58
59
60
61
62#define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
63
64
65
66
67
68
69
70
71
72
73
74extern unsigned long avenrun[];
75
76#define FSHIFT 11
77#define FIXED_1 (1<<FSHIFT)
78#define LOAD_FREQ (5*HZ)
79#define EXP_1 1884
80#define EXP_5 2014
81#define EXP_15 2037
82
83#define CALC_LOAD(load,exp,n) \
84 load *= exp; \
85 load += n*(FIXED_1-exp); \
86 load >>= FSHIFT;
87
88#define CT_TO_SECS(x) ((x) / HZ)
89#define CT_TO_USECS(x) (((x) % HZ) * 1000000/HZ)
90
91extern int nr_threads;
92extern int last_pid;
93DECLARE_PER_CPU(unsigned long, process_counts);
94extern int nr_processes(void);
95extern unsigned long nr_running(void);
96extern unsigned long nr_uninterruptible(void);
97extern unsigned long nr_iowait(void);
98
99#include <linux/time.h>
100#include <linux/param.h>
101#include <linux/resource.h>
102#include <linux/timer.h>
103
104#include <asm/processor.h>
105
106#define TASK_RUNNING 0
107#define TASK_INTERRUPTIBLE 1
108#define TASK_UNINTERRUPTIBLE 2
109#define TASK_STOPPED 4
110#define TASK_ZOMBIE 8
111#define TASK_DEAD 16
112
113#define __set_task_state(tsk, state_value) \
114 do { (tsk)->state = (state_value); } while (0)
115#define set_task_state(tsk, state_value) \
116 set_mb((tsk)->state, (state_value))
117
118#define __set_current_state(state_value) \
119 do { current->state = (state_value); } while (0)
120#define set_current_state(state_value) \
121 set_mb(current->state, (state_value))
122
123
124
125
126#define SCHED_NORMAL 0
127#define SCHED_FIFO 1
128#define SCHED_RR 2
129
130struct sched_param {
131 int sched_priority;
132};
133
134#ifdef __KERNEL__
135
136#include <linux/spinlock.h>
137
138
139
140
141
142
143
144extern rwlock_t tasklist_lock;
145extern spinlock_t mmlist_lock;
146
147typedef struct task_struct task_t;
148
149extern void sched_init(void);
150extern void sched_init_smp(void);
151extern void init_idle(task_t *idle, int cpu);
152
153extern cpumask_t nohz_cpu_mask;
154
155extern void show_state(void);
156extern void show_regs(struct pt_regs *);
157
158
159
160
161
162
163extern void show_stack(struct task_struct *task, unsigned long *sp);
164
165void io_schedule(void);
166long io_schedule_timeout(long timeout);
167
168extern void cpu_init (void);
169extern void trap_init(void);
170extern void update_process_times(int user);
171extern void scheduler_tick(int user_tick, int system);
172extern unsigned long cache_decay_ticks;
173
174
175#define __sched __attribute__((__section__(".sched.text")))
176
177extern int in_sched_functions(unsigned long addr);
178
179#define MAX_SCHEDULE_TIMEOUT LONG_MAX
180extern signed long FASTCALL(schedule_timeout(signed long timeout));
181asmlinkage void schedule(void);
182
183struct namespace;
184
185
186#define DEFAULT_MAX_MAP_COUNT 65536
187
188extern int sysctl_max_map_count;
189
190#include <linux/aio.h>
191
192struct mm_struct {
193 struct vm_area_struct * mmap;
194 struct rb_root mm_rb;
195 struct vm_area_struct * mmap_cache;
196 unsigned long free_area_cache;
197 pgd_t * pgd;
198 atomic_t mm_users;
199 atomic_t mm_count;
200 int map_count;
201 struct rw_semaphore mmap_sem;
202 spinlock_t page_table_lock;
203
204 struct list_head mmlist;
205
206
207
208
209 unsigned long start_code, end_code, start_data, end_data;
210 unsigned long start_brk, brk, start_stack;
211 unsigned long arg_start, arg_end, env_start, env_end;
212 unsigned long rss, total_vm, locked_vm;
213 unsigned long def_flags;
214
215 unsigned long saved_auxv[40];
216
217 unsigned dumpable:1;
218 cpumask_t cpu_vm_mask;
219
220
221 mm_context_t context;
222
223
224 int core_waiters;
225 struct completion *core_startup_done, core_done;
226
227
228 rwlock_t ioctx_list_lock;
229 struct kioctx *ioctx_list;
230
231 struct kioctx default_kioctx;
232};
233
234extern int mmlist_nr;
235
236struct sighand_struct {
237 atomic_t count;
238 struct k_sigaction action[_NSIG];
239 spinlock_t siglock;
240};
241
242
243
244
245
246
247
248
249struct signal_struct {
250 atomic_t count;
251
252
253 task_t *curr_target;
254
255
256 struct sigpending shared_pending;
257
258
259 int group_exit;
260 int group_exit_code;
261
262
263
264
265
266 struct task_struct *group_exit_task;
267 int notify_count;
268
269
270 int group_stop_count;
271
272
273 struct list_head posix_timers;
274
275
276 pid_t pgrp;
277 pid_t tty_old_pgrp;
278 pid_t session;
279
280 int leader;
281
282 struct tty_struct *tty;
283};
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298#define MAX_USER_RT_PRIO 100
299#define MAX_RT_PRIO MAX_USER_RT_PRIO
300
301#define MAX_PRIO (MAX_RT_PRIO + 40)
302
303#define rt_task(p) ((p)->prio < MAX_RT_PRIO)
304
305
306
307
308struct user_struct {
309 atomic_t __count;
310 atomic_t processes;
311 atomic_t files;
312 atomic_t sigpending;
313
314 unsigned long mq_bytes;
315
316
317 struct list_head uidhash_list;
318 uid_t uid;
319};
320
321extern struct user_struct *find_user(uid_t);
322
323extern struct user_struct root_user;
324#define INIT_USER (&root_user)
325
326typedef struct prio_array prio_array_t;
327struct backing_dev_info;
328struct reclaim_state;
329
330
331struct k_itimer {
332 struct list_head list;
333 spinlock_t it_lock;
334 clockid_t it_clock;
335 timer_t it_id;
336 int it_overrun;
337 int it_overrun_last;
338 int it_requeue_pending;
339 int it_sigev_notify;
340 int it_sigev_signo;
341 sigval_t it_sigev_value;
342 unsigned long it_incr;
343 struct task_struct *it_process;
344 struct timer_list it_timer;
345 struct sigqueue *sigq;
346 struct list_head abs_timer_entry;
347 struct timespec wall_to_prev;
348};
349
350
351struct io_context;
352void exit_io_context(void);
353
354#define NGROUPS_SMALL 32
355#define NGROUPS_PER_BLOCK ((int)(PAGE_SIZE / sizeof(gid_t)))
356struct group_info {
357 int ngroups;
358 atomic_t usage;
359 gid_t small_block[NGROUPS_SMALL];
360 int nblocks;
361 gid_t *blocks[0];
362};
363
364
365
366
367
368
369
370#define get_group_info(group_info) do { \
371 atomic_inc(&(group_info)->usage); \
372} while (0)
373
374#define put_group_info(group_info) do { \
375 if (atomic_dec_and_test(&(group_info)->usage)) \
376 groups_free(group_info); \
377} while (0)
378
379struct group_info *groups_alloc(int gidsetsize);
380void groups_free(struct group_info *group_info);
381int set_current_groups(struct group_info *group_info);
382
383#define GROUP_AT(gi, i) \
384 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
385
386
387struct audit_context;
388struct mempolicy;
389
390struct task_struct {
391 volatile long state;
392 struct thread_info *thread_info;
393 atomic_t usage;
394 unsigned long flags;
395 unsigned long ptrace;
396
397 int lock_depth;
398
399 int prio, static_prio;
400 struct list_head run_list;
401 prio_array_t *array;
402
403 unsigned long sleep_avg;
404 long interactive_credit;
405 unsigned long long timestamp;
406 int activated;
407
408 unsigned long policy;
409 cpumask_t cpus_allowed;
410 unsigned int time_slice, first_time_slice;
411
412 struct list_head tasks;
413
414
415
416
417 struct list_head ptrace_children;
418 struct list_head ptrace_list;
419
420 struct mm_struct *mm, *active_mm;
421
422
423 struct linux_binfmt *binfmt;
424 int exit_code, exit_signal;
425 int pdeath_signal;
426
427 unsigned long personality;
428 int did_exec:1;
429 pid_t pid;
430 pid_t tgid;
431
432
433
434
435
436 struct task_struct *real_parent;
437 struct task_struct *parent;
438
439
440
441
442 struct list_head children;
443 struct list_head sibling;
444 struct task_struct *group_leader;
445
446
447 struct pid_link pids[PIDTYPE_MAX];
448
449 wait_queue_head_t wait_chldexit;
450 struct completion *vfork_done;
451 int __user *set_child_tid;
452 int __user *clear_child_tid;
453
454 unsigned long rt_priority;
455 unsigned long it_real_value, it_prof_value, it_virt_value;
456 unsigned long it_real_incr, it_prof_incr, it_virt_incr;
457 struct timer_list real_timer;
458 unsigned long utime, stime, cutime, cstime;
459 unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
460 u64 start_time;
461
462 unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
463
464 uid_t uid,euid,suid,fsuid;
465 gid_t gid,egid,sgid,fsgid;
466 struct group_info *group_info;
467 kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
468 int keep_capabilities:1;
469 struct user_struct *user;
470
471 struct rlimit rlim[RLIM_NLIMITS];
472 unsigned short used_math;
473 char comm[16];
474
475 int link_count, total_link_count;
476
477 struct sysv_sem sysvsem;
478
479 struct thread_struct thread;
480
481 struct fs_struct *fs;
482
483 struct files_struct *files;
484
485 struct namespace *namespace;
486
487 struct signal_struct *signal;
488 struct sighand_struct *sighand;
489
490 sigset_t blocked, real_blocked;
491 struct sigpending pending;
492
493 unsigned long sas_ss_sp;
494 size_t sas_ss_size;
495 int (*notifier)(void *priv);
496 void *notifier_data;
497 sigset_t *notifier_mask;
498
499 void *security;
500 struct audit_context *audit_context;
501
502
503 u32 parent_exec_id;
504 u32 self_exec_id;
505
506 spinlock_t alloc_lock;
507
508 spinlock_t proc_lock;
509
510 spinlock_t switch_lock;
511
512
513 void *journal_info;
514
515
516 struct reclaim_state *reclaim_state;
517
518 struct dentry *proc_dentry;
519 struct backing_dev_info *backing_dev_info;
520
521 struct io_context *io_context;
522
523 unsigned long ptrace_message;
524 siginfo_t *last_siginfo;
525
526#ifdef CONFIG_NUMA
527 struct mempolicy *mempolicy;
528 short il_next;
529#endif
530};
531
532static inline pid_t process_group(struct task_struct *tsk)
533{
534 return tsk->signal->pgrp;
535}
536
537extern void __put_task_struct(struct task_struct *tsk);
538#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
539#define put_task_struct(tsk) \
540do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
541
542
543
544
545#define PF_ALIGNWARN 0x00000001
546
547#define PF_STARTING 0x00000002
548#define PF_EXITING 0x00000004
549#define PF_DEAD 0x00000008
550#define PF_FORKNOEXEC 0x00000040
551#define PF_SUPERPRIV 0x00000100
552#define PF_DUMPCORE 0x00000200
553#define PF_SIGNALED 0x00000400
554#define PF_MEMALLOC 0x00000800
555#define PF_MEMDIE 0x00001000
556#define PF_FLUSHER 0x00002000
557
558#define PF_FREEZE 0x00004000
559#define PF_NOFREEZE 0x00008000
560#define PF_FROZEN 0x00010000
561#define PF_FSTRANS 0x00020000
562#define PF_KSWAPD 0x00040000
563#define PF_SWAPOFF 0x00080000
564#define PF_LESS_THROTTLE 0x00100000
565#define PF_SYNCWRITE 0x00200000
566
567#ifdef CONFIG_SMP
568#define SCHED_LOAD_SCALE 128UL
569
570#define SD_BALANCE_NEWIDLE 1
571#define SD_BALANCE_EXEC 2
572#define SD_BALANCE_CLONE 4
573#define SD_WAKE_IDLE 8
574#define SD_WAKE_AFFINE 16
575#define SD_WAKE_BALANCE 32
576#define SD_SHARE_CPUPOWER 64
577
578struct sched_group {
579 struct sched_group *next;
580 cpumask_t cpumask;
581
582
583
584
585
586
587
588 unsigned long cpu_power;
589};
590
591struct sched_domain {
592
593 struct sched_domain *parent;
594 struct sched_group *groups;
595 cpumask_t span;
596 unsigned long min_interval;
597 unsigned long max_interval;
598 unsigned int busy_factor;
599 unsigned int imbalance_pct;
600 unsigned long long cache_hot_time;
601 unsigned int cache_nice_tries;
602 unsigned int per_cpu_gain;
603 int flags;
604
605
606 unsigned long last_balance;
607 unsigned int balance_interval;
608 unsigned int nr_balance_failed;
609};
610
611
612#define SD_SIBLING_INIT (struct sched_domain) { \
613 .span = CPU_MASK_NONE, \
614 .parent = NULL, \
615 .groups = NULL, \
616 .min_interval = 1, \
617 .max_interval = 2, \
618 .busy_factor = 8, \
619 .imbalance_pct = 110, \
620 .cache_hot_time = 0, \
621 .cache_nice_tries = 0, \
622 .per_cpu_gain = 15, \
623 .flags = SD_BALANCE_NEWIDLE \
624 | SD_BALANCE_EXEC \
625 | SD_BALANCE_CLONE \
626 | SD_WAKE_AFFINE \
627 | SD_WAKE_IDLE \
628 | SD_SHARE_CPUPOWER, \
629 .last_balance = jiffies, \
630 .balance_interval = 1, \
631 .nr_balance_failed = 0, \
632}
633
634
635#define SD_CPU_INIT (struct sched_domain) { \
636 .span = CPU_MASK_NONE, \
637 .parent = NULL, \
638 .groups = NULL, \
639 .min_interval = 1, \
640 .max_interval = 4, \
641 .busy_factor = 64, \
642 .imbalance_pct = 125, \
643 .cache_hot_time = (5*1000000/2), \
644 .cache_nice_tries = 1, \
645 .per_cpu_gain = 100, \
646 .flags = SD_BALANCE_NEWIDLE \
647 | SD_BALANCE_EXEC \
648 | SD_BALANCE_CLONE \
649 | SD_WAKE_AFFINE \
650 | SD_WAKE_BALANCE, \
651 .last_balance = jiffies, \
652 .balance_interval = 1, \
653 .nr_balance_failed = 0, \
654}
655
656#ifdef CONFIG_NUMA
657
658#define SD_NODE_INIT (struct sched_domain) { \
659 .span = CPU_MASK_NONE, \
660 .parent = NULL, \
661 .groups = NULL, \
662 .min_interval = 8, \
663 .max_interval = 32, \
664 .busy_factor = 32, \
665 .imbalance_pct = 125, \
666 .cache_hot_time = (10*1000000), \
667 .cache_nice_tries = 1, \
668 .per_cpu_gain = 100, \
669 .flags = SD_BALANCE_EXEC \
670 | SD_BALANCE_CLONE \
671 | SD_WAKE_BALANCE, \
672 .last_balance = jiffies, \
673 .balance_interval = 1, \
674 .nr_balance_failed = 0, \
675}
676#endif
677
678extern void cpu_attach_domain(struct sched_domain *sd, int cpu);
679
680extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
681#else
682static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
683{
684 return 0;
685}
686#endif
687
688extern unsigned long long sched_clock(void);
689
690#ifdef CONFIG_SMP
691extern void sched_balance_exec(void);
692#else
693#define sched_balance_exec() {}
694#endif
695
696extern void sched_idle_next(void);
697extern void set_user_nice(task_t *p, long nice);
698extern int task_prio(const task_t *p);
699extern int task_nice(const task_t *p);
700extern int task_curr(const task_t *p);
701extern int idle_cpu(int cpu);
702
703void yield(void);
704
705
706
707
708extern struct exec_domain default_exec_domain;
709
710union thread_union {
711 struct thread_info thread_info;
712 unsigned long stack[THREAD_SIZE/sizeof(long)];
713};
714
715#ifndef __HAVE_ARCH_KSTACK_END
716static inline int kstack_end(void *addr)
717{
718
719
720
721 return !(((unsigned long)addr+sizeof(void*)-1) & (THREAD_SIZE-sizeof(void*)));
722}
723#endif
724
725extern union thread_union init_thread_union;
726extern struct task_struct init_task;
727
728extern struct mm_struct init_mm;
729
730extern struct task_struct *find_task_by_pid(int pid);
731extern void set_special_pids(pid_t session, pid_t pgrp);
732extern void __set_special_pids(pid_t session, pid_t pgrp);
733
734
735extern struct user_struct * alloc_uid(uid_t);
736static inline struct user_struct *get_uid(struct user_struct *u)
737{
738 atomic_inc(&u->__count);
739 return u;
740}
741extern void free_uid(struct user_struct *);
742extern void switch_uid(struct user_struct *);
743
744#include <asm/current.h>
745
746extern unsigned long itimer_ticks;
747extern unsigned long itimer_next;
748extern void do_timer(struct pt_regs *);
749
750extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
751extern int FASTCALL(wake_up_process(struct task_struct * tsk));
752extern void FASTCALL(wake_up_forked_process(struct task_struct * tsk));
753#ifdef CONFIG_SMP
754 extern void kick_process(struct task_struct *tsk);
755 extern void FASTCALL(wake_up_forked_thread(struct task_struct * tsk));
756#else
757 static inline void kick_process(struct task_struct *tsk) { }
758 static inline void wake_up_forked_thread(struct task_struct * tsk)
759 {
760 wake_up_forked_process(tsk);
761 }
762#endif
763extern void FASTCALL(sched_fork(task_t * p));
764extern void FASTCALL(sched_exit(task_t * p));
765
766extern int in_group_p(gid_t);
767extern int in_egroup_p(gid_t);
768
769extern void proc_caches_init(void);
770extern void flush_signals(struct task_struct *);
771extern void flush_signal_handlers(struct task_struct *, int force_default);
772extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info);
773
774static inline int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
775{
776 unsigned long flags;
777 int ret;
778
779 spin_lock_irqsave(&tsk->sighand->siglock, flags);
780 ret = dequeue_signal(tsk, mask, info);
781 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
782
783 return ret;
784}
785
786extern void block_all_signals(int (*notifier)(void *priv), void *priv,
787 sigset_t *mask);
788extern void unblock_all_signals(void);
789extern void release_task(struct task_struct * p);
790extern int send_sig_info(int, struct siginfo *, struct task_struct *);
791extern int send_group_sig_info(int, struct siginfo *, struct task_struct *);
792extern int force_sig_info(int, struct siginfo *, struct task_struct *);
793extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp);
794extern int kill_pg_info(int, struct siginfo *, pid_t);
795extern int kill_sl_info(int, struct siginfo *, pid_t);
796extern int kill_proc_info(int, struct siginfo *, pid_t);
797extern void notify_parent(struct task_struct *, int);
798extern void do_notify_parent(struct task_struct *, int);
799extern void force_sig(int, struct task_struct *);
800extern void force_sig_specific(int, struct task_struct *);
801extern int send_sig(int, struct task_struct *, int);
802extern void zap_other_threads(struct task_struct *p);
803extern int kill_pg(pid_t, int, int);
804extern int kill_sl(pid_t, int, int);
805extern int kill_proc(pid_t, int, int);
806extern struct sigqueue *sigqueue_alloc(void);
807extern void sigqueue_free(struct sigqueue *);
808extern int send_sigqueue(int, struct sigqueue *, struct task_struct *);
809extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *);
810extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *);
811extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long);
812
813
814#define SEND_SIG_NOINFO ((struct siginfo *) 0)
815#define SEND_SIG_PRIV ((struct siginfo *) 1)
816#define SEND_SIG_FORCED ((struct siginfo *) 2)
817
818
819
820static inline int on_sig_stack(unsigned long sp)
821{
822 return (sp - current->sas_ss_sp < current->sas_ss_size);
823}
824
825static inline int sas_ss_flags(unsigned long sp)
826{
827 return (current->sas_ss_size == 0 ? SS_DISABLE
828 : on_sig_stack(sp) ? SS_ONSTACK : 0);
829}
830
831
832#ifdef CONFIG_SECURITY
833
834extern int capable(int cap);
835#else
836static inline int capable(int cap)
837{
838 if (cap_raised(current->cap_effective, cap)) {
839 current->flags |= PF_SUPERPRIV;
840 return 1;
841 }
842 return 0;
843}
844#endif
845
846
847
848
849extern struct mm_struct * mm_alloc(void);
850
851
852extern void FASTCALL(__mmdrop(struct mm_struct *));
853static inline void mmdrop(struct mm_struct * mm)
854{
855 if (atomic_dec_and_test(&mm->mm_count))
856 __mmdrop(mm);
857}
858
859
860extern void mmput(struct mm_struct *);
861
862extern struct mm_struct *mmgrab(struct mm_struct *);
863
864extern void mm_release(struct task_struct *, struct mm_struct *);
865
866extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
867extern void flush_thread(void);
868extern void exit_thread(void);
869
870extern void exit_mm(struct task_struct *);
871extern void exit_files(struct task_struct *);
872extern void exit_signal(struct task_struct *);
873extern void __exit_signal(struct task_struct *);
874extern void exit_sighand(struct task_struct *);
875extern void __exit_sighand(struct task_struct *);
876extern void exit_itimers(struct signal_struct *);
877
878extern NORET_TYPE void do_group_exit(int);
879
880extern void reparent_to_init(void);
881extern void daemonize(const char *, ...);
882extern int allow_signal(int);
883extern int disallow_signal(int);
884extern task_t *child_reaper;
885
886extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
887extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
888extern struct task_struct * copy_process(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
889
890#ifdef CONFIG_SMP
891extern void wait_task_inactive(task_t * p);
892#else
893#define wait_task_inactive(p) do { } while (0)
894#endif
895
896#define remove_parent(p) list_del_init(&(p)->sibling)
897#define add_parent(p, parent) list_add_tail(&(p)->sibling,&(parent)->children)
898
899#define REMOVE_LINKS(p) do { \
900 if (thread_group_leader(p)) \
901 list_del_init(&(p)->tasks); \
902 remove_parent(p); \
903 } while (0)
904
905#define SET_LINKS(p) do { \
906 if (thread_group_leader(p)) \
907 list_add_tail(&(p)->tasks,&init_task.tasks); \
908 add_parent(p, (p)->parent); \
909 } while (0)
910
911#define next_task(p) list_entry((p)->tasks.next, struct task_struct, tasks)
912#define prev_task(p) list_entry((p)->tasks.prev, struct task_struct, tasks)
913
914#define for_each_process(p) \
915 for (p = &init_task ; (p = next_task(p)) != &init_task ; )
916
917
918
919
920
921#define do_each_thread(g, t) \
922 for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do
923
924#define while_each_thread(g, t) \
925 while ((t = next_thread(t)) != g)
926
927extern task_t * FASTCALL(next_thread(const task_t *p));
928
929#define thread_group_leader(p) (p->pid == p->tgid)
930
931static inline int thread_group_empty(task_t *p)
932{
933 struct pid *pid = p->pids[PIDTYPE_TGID].pidptr;
934
935 return pid->task_list.next->next == &pid->task_list;
936}
937
938#define delay_group_leader(p) \
939 (thread_group_leader(p) && !thread_group_empty(p))
940
941extern void unhash_process(struct task_struct *p);
942
943
944
945
946
947
948
949
950
951static inline void task_lock(struct task_struct *p)
952{
953 spin_lock(&p->alloc_lock);
954}
955
956static inline void task_unlock(struct task_struct *p)
957{
958 spin_unlock(&p->alloc_lock);
959}
960
961
962
963
964
965
966
967static inline struct mm_struct * get_task_mm(struct task_struct * task)
968{
969 struct mm_struct * mm;
970
971 task_lock(task);
972 mm = task->mm;
973 if (mm)
974 mm = mmgrab(mm);
975 task_unlock(task);
976
977 return mm;
978}
979
980
981
982
983
984static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag)
985{
986 set_ti_thread_flag(tsk->thread_info,flag);
987}
988
989static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
990{
991 clear_ti_thread_flag(tsk->thread_info,flag);
992}
993
994static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
995{
996 return test_and_set_ti_thread_flag(tsk->thread_info,flag);
997}
998
999static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
1000{
1001 return test_and_clear_ti_thread_flag(tsk->thread_info,flag);
1002}
1003
1004static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag)
1005{
1006 return test_ti_thread_flag(tsk->thread_info,flag);
1007}
1008
1009static inline void set_tsk_need_resched(struct task_struct *tsk)
1010{
1011 set_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
1012}
1013
1014static inline void clear_tsk_need_resched(struct task_struct *tsk)
1015{
1016 clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
1017}
1018
1019static inline int signal_pending(struct task_struct *p)
1020{
1021 return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
1022}
1023
1024static inline int need_resched(void)
1025{
1026 return unlikely(test_thread_flag(TIF_NEED_RESCHED));
1027}
1028
1029extern void __cond_resched(void);
1030static inline void cond_resched(void)
1031{
1032 if (need_resched())
1033 __cond_resched();
1034}
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044static inline void cond_resched_lock(spinlock_t * lock)
1045{
1046 if (need_resched()) {
1047 _raw_spin_unlock(lock);
1048 preempt_enable_no_resched();
1049 __cond_resched();
1050 spin_lock(lock);
1051 }
1052}
1053
1054
1055
1056
1057
1058extern FASTCALL(void recalc_sigpending_tsk(struct task_struct *t));
1059extern void recalc_sigpending(void);
1060
1061extern void signal_wake_up(struct task_struct *t, int resume_stopped);
1062
1063
1064
1065
1066#ifdef CONFIG_SMP
1067
1068static inline unsigned int task_cpu(const struct task_struct *p)
1069{
1070 return p->thread_info->cpu;
1071}
1072
1073static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
1074{
1075 p->thread_info->cpu = cpu;
1076}
1077
1078#else
1079
1080static inline unsigned int task_cpu(const struct task_struct *p)
1081{
1082 return 0;
1083}
1084
1085static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
1086{
1087}
1088
1089#endif
1090
1091#endif
1092
1093#endif
1094