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#include <linux/errno.h>
17#include <linux/nodemask.h>
18
19#include <asm/system.h>
20#include <asm/semaphore.h>
21#include <asm/page.h>
22#include <asm/ptrace.h>
23#include <asm/mmu.h>
24#include <asm/cputime.h>
25
26#include <linux/smp.h>
27#include <linux/sem.h>
28#include <linux/signal.h>
29#include <linux/securebits.h>
30#include <linux/fs_struct.h>
31#include <linux/compiler.h>
32#include <linux/completion.h>
33#include <linux/pid.h>
34#include <linux/percpu.h>
35#include <linux/topology.h>
36#include <linux/seccomp.h>
37
38struct exec_domain;
39
40
41
42
43#define CSIGNAL 0x000000ff
44#define CLONE_VM 0x00000100
45#define CLONE_FS 0x00000200
46#define CLONE_FILES 0x00000400
47#define CLONE_SIGHAND 0x00000800
48#define CLONE_PTRACE 0x00002000
49#define CLONE_VFORK 0x00004000
50#define CLONE_PARENT 0x00008000
51#define CLONE_THREAD 0x00010000
52#define CLONE_NEWNS 0x00020000
53#define CLONE_SYSVSEM 0x00040000
54#define CLONE_SETTLS 0x00080000
55#define CLONE_PARENT_SETTID 0x00100000
56#define CLONE_CHILD_CLEARTID 0x00200000
57#define CLONE_DETACHED 0x00400000
58#define CLONE_UNTRACED 0x00800000
59#define CLONE_CHILD_SETTID 0x01000000
60#define CLONE_STOPPED 0x02000000
61
62
63
64
65
66#define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
67
68
69
70
71
72
73
74
75
76
77
78extern unsigned long avenrun[];
79
80#define FSHIFT 11
81#define FIXED_1 (1<<FSHIFT)
82#define LOAD_FREQ (5*HZ)
83#define EXP_1 1884
84#define EXP_5 2014
85#define EXP_15 2037
86
87#define CALC_LOAD(load,exp,n) \
88 load *= exp; \
89 load += n*(FIXED_1-exp); \
90 load >>= FSHIFT;
91
92extern unsigned long total_forks;
93extern int nr_threads;
94extern int last_pid;
95DECLARE_PER_CPU(unsigned long, process_counts);
96extern int nr_processes(void);
97extern unsigned long nr_running(void);
98extern unsigned long nr_uninterruptible(void);
99extern unsigned long nr_iowait(void);
100
101#include <linux/time.h>
102#include <linux/param.h>
103#include <linux/resource.h>
104#include <linux/timer.h>
105
106#include <asm/processor.h>
107
108#define TASK_RUNNING 0
109#define TASK_INTERRUPTIBLE 1
110#define TASK_UNINTERRUPTIBLE 2
111#define TASK_STOPPED 4
112#define TASK_TRACED 8
113#define EXIT_ZOMBIE 16
114#define EXIT_DEAD 32
115
116#define __set_task_state(tsk, state_value) \
117 do { (tsk)->state = (state_value); } while (0)
118#define set_task_state(tsk, state_value) \
119 set_mb((tsk)->state, (state_value))
120
121#define __set_current_state(state_value) \
122 do { current->state = (state_value); } while (0)
123#define set_current_state(state_value) \
124 set_mb(current->state, (state_value))
125
126
127#define TASK_COMM_LEN 16
128
129
130
131
132#define SCHED_NORMAL 0
133#define SCHED_FIFO 1
134#define SCHED_RR 2
135
136struct sched_param {
137 int sched_priority;
138};
139
140#ifdef __KERNEL__
141
142#include <linux/spinlock.h>
143
144
145
146
147
148
149
150extern rwlock_t tasklist_lock;
151extern spinlock_t mmlist_lock;
152
153typedef struct task_struct task_t;
154
155extern void sched_init(void);
156extern void sched_init_smp(void);
157extern void init_idle(task_t *idle, int cpu);
158
159extern cpumask_t nohz_cpu_mask;
160
161extern void show_state(void);
162extern void show_regs(struct pt_regs *);
163
164
165
166
167
168
169extern void show_stack(struct task_struct *task, unsigned long *sp);
170
171void io_schedule(void);
172long io_schedule_timeout(long timeout);
173
174extern void cpu_init (void);
175extern void trap_init(void);
176extern void update_process_times(int user);
177extern void scheduler_tick(void);
178
179
180#define __sched __attribute__((__section__(".sched.text")))
181
182extern int in_sched_functions(unsigned long addr);
183
184#define MAX_SCHEDULE_TIMEOUT LONG_MAX
185extern signed long FASTCALL(schedule_timeout(signed long timeout));
186asmlinkage void schedule(void);
187
188struct namespace;
189
190
191#define DEFAULT_MAX_MAP_COUNT 65536
192
193extern int sysctl_max_map_count;
194
195#include <linux/aio.h>
196
197extern unsigned long
198arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
199 unsigned long, unsigned long);
200extern unsigned long
201arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
202 unsigned long len, unsigned long pgoff,
203 unsigned long flags);
204extern void arch_unmap_area(struct vm_area_struct *area);
205extern void arch_unmap_area_topdown(struct vm_area_struct *area);
206
207#define set_mm_counter(mm, member, value) (mm)->_##member = (value)
208#define get_mm_counter(mm, member) ((mm)->_##member)
209#define add_mm_counter(mm, member, value) (mm)->_##member += (value)
210#define inc_mm_counter(mm, member) (mm)->_##member++
211#define dec_mm_counter(mm, member) (mm)->_##member--
212typedef unsigned long mm_counter_t;
213
214struct mm_struct {
215 struct vm_area_struct * mmap;
216 struct rb_root mm_rb;
217 struct vm_area_struct * mmap_cache;
218 unsigned long (*get_unmapped_area) (struct file *filp,
219 unsigned long addr, unsigned long len,
220 unsigned long pgoff, unsigned long flags);
221 void (*unmap_area) (struct vm_area_struct *area);
222 unsigned long mmap_base;
223 unsigned long free_area_cache;
224 pgd_t * pgd;
225 atomic_t mm_users;
226 atomic_t mm_count;
227 int map_count;
228 struct rw_semaphore mmap_sem;
229 spinlock_t page_table_lock;
230
231 struct list_head mmlist;
232
233
234
235
236 unsigned long start_code, end_code, start_data, end_data;
237 unsigned long start_brk, brk, start_stack;
238 unsigned long arg_start, arg_end, env_start, env_end;
239 unsigned long total_vm, locked_vm, shared_vm;
240 unsigned long exec_vm, stack_vm, reserved_vm, def_flags, nr_ptes;
241
242
243 mm_counter_t _rss;
244 mm_counter_t _anon_rss;
245
246 unsigned long saved_auxv[42];
247
248 unsigned dumpable:1;
249 cpumask_t cpu_vm_mask;
250
251
252 mm_context_t context;
253
254
255 unsigned long swap_token_time;
256 char recent_pagein;
257
258
259 int core_waiters;
260 struct completion *core_startup_done, core_done;
261
262
263 rwlock_t ioctx_list_lock;
264 struct kioctx *ioctx_list;
265
266 struct kioctx default_kioctx;
267
268 unsigned long hiwater_rss;
269 unsigned long hiwater_vm;
270};
271
272struct sighand_struct {
273 atomic_t count;
274 struct k_sigaction action[_NSIG];
275 spinlock_t siglock;
276};
277
278
279
280
281
282
283
284
285struct signal_struct {
286 atomic_t count;
287 atomic_t live;
288
289 wait_queue_head_t wait_chldexit;
290
291
292 task_t *curr_target;
293
294
295 struct sigpending shared_pending;
296
297
298 int group_exit_code;
299
300
301
302
303
304 struct task_struct *group_exit_task;
305 int notify_count;
306
307
308 int group_stop_count;
309 unsigned int flags;
310
311
312 struct list_head posix_timers;
313
314
315 struct timer_list real_timer;
316 unsigned long it_real_value, it_real_incr;
317
318
319 cputime_t it_prof_expires, it_virt_expires;
320 cputime_t it_prof_incr, it_virt_incr;
321
322
323 pid_t pgrp;
324 pid_t tty_old_pgrp;
325 pid_t session;
326
327 int leader;
328
329 struct tty_struct *tty;
330
331
332
333
334
335
336
337 cputime_t utime, stime, cutime, cstime;
338 unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
339 unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
340
341
342
343
344
345
346
347 unsigned long long sched_time;
348
349
350
351
352
353
354
355
356
357
358 struct rlimit rlim[RLIM_NLIMITS];
359
360 struct list_head cpu_timers[3];
361
362
363
364#ifdef CONFIG_KEYS
365 struct key *session_keyring;
366 struct key *process_keyring;
367#endif
368};
369
370
371
372
373#define SIGNAL_STOP_STOPPED 0x00000001
374#define SIGNAL_STOP_DEQUEUED 0x00000002
375#define SIGNAL_STOP_CONTINUED 0x00000004
376#define SIGNAL_GROUP_EXIT 0x00000008
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392#define MAX_USER_RT_PRIO 100
393#define MAX_RT_PRIO MAX_USER_RT_PRIO
394
395#define MAX_PRIO (MAX_RT_PRIO + 40)
396
397#define rt_task(p) (unlikely((p)->prio < MAX_RT_PRIO))
398
399
400
401
402struct user_struct {
403 atomic_t __count;
404 atomic_t processes;
405 atomic_t files;
406 atomic_t sigpending;
407
408 unsigned long mq_bytes;
409 unsigned long locked_shm;
410
411#ifdef CONFIG_KEYS
412 struct key *uid_keyring;
413 struct key *session_keyring;
414#endif
415
416
417 struct list_head uidhash_list;
418 uid_t uid;
419};
420
421extern struct user_struct *find_user(uid_t);
422
423extern struct user_struct root_user;
424#define INIT_USER (&root_user)
425
426typedef struct prio_array prio_array_t;
427struct backing_dev_info;
428struct reclaim_state;
429
430#ifdef CONFIG_SCHEDSTATS
431struct sched_info {
432
433 unsigned long cpu_time,
434 run_delay,
435 pcnt;
436
437
438 unsigned long last_arrival,
439 last_queued;
440};
441
442extern struct file_operations proc_schedstat_operations;
443#endif
444
445enum idle_type
446{
447 SCHED_IDLE,
448 NOT_IDLE,
449 NEWLY_IDLE,
450 MAX_IDLE_TYPES
451};
452
453
454
455
456#ifdef CONFIG_SMP
457#define SCHED_LOAD_SCALE 128UL
458
459#define SD_LOAD_BALANCE 1
460#define SD_BALANCE_NEWIDLE 2
461#define SD_BALANCE_EXEC 4
462#define SD_WAKE_IDLE 8
463#define SD_WAKE_AFFINE 16
464#define SD_WAKE_BALANCE 32
465#define SD_SHARE_CPUPOWER 64
466
467struct sched_group {
468 struct sched_group *next;
469 cpumask_t cpumask;
470
471
472
473
474
475 unsigned long cpu_power;
476};
477
478struct sched_domain {
479
480 struct sched_domain *parent;
481 struct sched_group *groups;
482 cpumask_t span;
483 unsigned long min_interval;
484 unsigned long max_interval;
485 unsigned int busy_factor;
486 unsigned int imbalance_pct;
487 unsigned long long cache_hot_time;
488 unsigned int cache_nice_tries;
489 unsigned int per_cpu_gain;
490 int flags;
491
492
493 unsigned long last_balance;
494 unsigned int balance_interval;
495 unsigned int nr_balance_failed;
496
497#ifdef CONFIG_SCHEDSTATS
498
499 unsigned long lb_cnt[MAX_IDLE_TYPES];
500 unsigned long lb_failed[MAX_IDLE_TYPES];
501 unsigned long lb_balanced[MAX_IDLE_TYPES];
502 unsigned long lb_imbalance[MAX_IDLE_TYPES];
503 unsigned long lb_gained[MAX_IDLE_TYPES];
504 unsigned long lb_hot_gained[MAX_IDLE_TYPES];
505 unsigned long lb_nobusyg[MAX_IDLE_TYPES];
506 unsigned long lb_nobusyq[MAX_IDLE_TYPES];
507
508
509 unsigned long alb_cnt;
510 unsigned long alb_failed;
511 unsigned long alb_pushed;
512
513
514 unsigned long sbe_attempts;
515 unsigned long sbe_pushed;
516
517
518 unsigned long ttwu_wake_remote;
519 unsigned long ttwu_move_affine;
520 unsigned long ttwu_move_balance;
521#endif
522};
523
524#ifdef ARCH_HAS_SCHED_DOMAIN
525
526extern cpumask_t cpu_isolated_map;
527extern void init_sched_build_groups(struct sched_group groups[],
528 cpumask_t span, int (*group_fn)(int cpu));
529extern void cpu_attach_domain(struct sched_domain *sd, int cpu);
530#endif
531#endif
532
533
534struct io_context;
535void exit_io_context(void);
536struct cpuset;
537
538#define NGROUPS_SMALL 32
539#define NGROUPS_PER_BLOCK ((int)(PAGE_SIZE / sizeof(gid_t)))
540struct group_info {
541 int ngroups;
542 atomic_t usage;
543 gid_t small_block[NGROUPS_SMALL];
544 int nblocks;
545 gid_t *blocks[0];
546};
547
548
549
550
551
552
553
554#define get_group_info(group_info) do { \
555 atomic_inc(&(group_info)->usage); \
556} while (0)
557
558#define put_group_info(group_info) do { \
559 if (atomic_dec_and_test(&(group_info)->usage)) \
560 groups_free(group_info); \
561} while (0)
562
563struct group_info *groups_alloc(int gidsetsize);
564void groups_free(struct group_info *group_info);
565int set_current_groups(struct group_info *group_info);
566
567#define GROUP_AT(gi, i) \
568 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
569
570
571struct audit_context;
572struct mempolicy;
573
574struct task_struct {
575 volatile long state;
576 struct thread_info *thread_info;
577 atomic_t usage;
578 unsigned long flags;
579 unsigned long ptrace;
580
581 int lock_depth;
582
583 int prio, static_prio;
584 struct list_head run_list;
585 prio_array_t *array;
586
587 unsigned long sleep_avg;
588 unsigned long long timestamp, last_ran;
589 unsigned long long sched_time;
590 int activated;
591
592 unsigned long policy;
593 cpumask_t cpus_allowed;
594 unsigned int time_slice, first_time_slice;
595
596#ifdef CONFIG_SCHEDSTATS
597 struct sched_info sched_info;
598#endif
599
600 struct list_head tasks;
601
602
603
604
605 struct list_head ptrace_children;
606 struct list_head ptrace_list;
607
608 struct mm_struct *mm, *active_mm;
609
610
611 struct linux_binfmt *binfmt;
612 long exit_state;
613 int exit_code, exit_signal;
614 int pdeath_signal;
615
616 unsigned long personality;
617 unsigned did_exec:1;
618 pid_t pid;
619 pid_t tgid;
620
621
622
623
624
625 struct task_struct *real_parent;
626 struct task_struct *parent;
627
628
629
630
631 struct list_head children;
632 struct list_head sibling;
633 struct task_struct *group_leader;
634
635
636 struct pid pids[PIDTYPE_MAX];
637
638 struct completion *vfork_done;
639 int __user *set_child_tid;
640 int __user *clear_child_tid;
641
642 unsigned long rt_priority;
643 cputime_t utime, stime;
644 unsigned long nvcsw, nivcsw;
645 struct timespec start_time;
646
647 unsigned long min_flt, maj_flt;
648
649 cputime_t it_prof_expires, it_virt_expires;
650 unsigned long long it_sched_expires;
651 struct list_head cpu_timers[3];
652
653
654 uid_t uid,euid,suid,fsuid;
655 gid_t gid,egid,sgid,fsgid;
656 struct group_info *group_info;
657 kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
658 unsigned keep_capabilities:1;
659 struct user_struct *user;
660#ifdef CONFIG_KEYS
661 struct key *thread_keyring;
662#endif
663 int oomkilladj;
664 char comm[TASK_COMM_LEN];
665
666
667
668
669 int link_count, total_link_count;
670
671 struct sysv_sem sysvsem;
672
673 struct thread_struct thread;
674
675 struct fs_struct *fs;
676
677 struct files_struct *files;
678
679 struct namespace *namespace;
680
681 struct signal_struct *signal;
682 struct sighand_struct *sighand;
683
684 sigset_t blocked, real_blocked;
685 struct sigpending pending;
686
687 unsigned long sas_ss_sp;
688 size_t sas_ss_size;
689 int (*notifier)(void *priv);
690 void *notifier_data;
691 sigset_t *notifier_mask;
692
693 void *security;
694 struct audit_context *audit_context;
695 seccomp_t seccomp;
696
697
698 u32 parent_exec_id;
699 u32 self_exec_id;
700
701 spinlock_t alloc_lock;
702
703 spinlock_t proc_lock;
704
705 spinlock_t switch_lock;
706
707
708 void *journal_info;
709
710
711 struct reclaim_state *reclaim_state;
712
713 struct dentry *proc_dentry;
714 struct backing_dev_info *backing_dev_info;
715
716 struct io_context *io_context;
717
718 unsigned long ptrace_message;
719 siginfo_t *last_siginfo;
720
721
722
723
724
725
726 wait_queue_t *io_wait;
727
728 u64 rchar, wchar, syscr, syscw;
729#if defined(CONFIG_BSD_PROCESS_ACCT)
730 u64 acct_rss_mem1;
731 u64 acct_vm_mem1;
732 clock_t acct_stimexpd;
733#endif
734#ifdef CONFIG_NUMA
735 struct mempolicy *mempolicy;
736 short il_next;
737#endif
738#ifdef CONFIG_CPUSETS
739 struct cpuset *cpuset;
740 nodemask_t mems_allowed;
741 int cpuset_mems_generation;
742#endif
743};
744
745static inline pid_t process_group(struct task_struct *tsk)
746{
747 return tsk->signal->pgrp;
748}
749
750
751
752
753
754
755
756
757
758static inline int pid_alive(struct task_struct *p)
759{
760 return p->pids[PIDTYPE_PID].nr != 0;
761}
762
763extern void free_task(struct task_struct *tsk);
764extern void __put_task_struct(struct task_struct *tsk);
765#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
766#define put_task_struct(tsk) \
767do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
768
769
770
771
772#define PF_ALIGNWARN 0x00000001
773
774#define PF_STARTING 0x00000002
775#define PF_EXITING 0x00000004
776#define PF_DEAD 0x00000008
777#define PF_FORKNOEXEC 0x00000040
778#define PF_SUPERPRIV 0x00000100
779#define PF_DUMPCORE 0x00000200
780#define PF_SIGNALED 0x00000400
781#define PF_MEMALLOC 0x00000800
782#define PF_FLUSHER 0x00001000
783#define PF_USED_MATH 0x00002000
784#define PF_FREEZE 0x00004000
785#define PF_NOFREEZE 0x00008000
786#define PF_FROZEN 0x00010000
787#define PF_FSTRANS 0x00020000
788#define PF_KSWAPD 0x00040000
789#define PF_SWAPOFF 0x00080000
790#define PF_LESS_THROTTLE 0x00100000
791#define PF_SYNCWRITE 0x00200000
792#define PF_BORROWED_MM 0x00400000
793#define PF_RANDOMIZE 0x00800000
794
795
796
797
798
799
800
801
802
803
804
805
806#define clear_stopped_child_used_math(child) do { (child)->flags &= ~PF_USED_MATH; } while (0)
807#define set_stopped_child_used_math(child) do { (child)->flags |= PF_USED_MATH; } while (0)
808#define clear_used_math() clear_stopped_child_used_math(current)
809#define set_used_math() set_stopped_child_used_math(current)
810#define conditional_stopped_child_used_math(condition, child) \
811 do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= (condition) ? PF_USED_MATH : 0; } while (0)
812#define conditional_used_math(condition) \
813 conditional_stopped_child_used_math(condition, current)
814#define copy_to_stopped_child_used_math(child) \
815 do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= current->flags & PF_USED_MATH; } while (0)
816
817#define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
818#define used_math() tsk_used_math(current)
819
820#ifdef CONFIG_SMP
821extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
822#else
823static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
824{
825 if (!cpus_intersects(new_mask, cpu_online_map))
826 return -EINVAL;
827 return 0;
828}
829#endif
830
831extern unsigned long long sched_clock(void);
832extern unsigned long long current_sched_time(const task_t *current_task);
833
834
835#ifdef CONFIG_SMP
836extern void sched_exec(void);
837#else
838#define sched_exec() {}
839#endif
840
841#ifdef CONFIG_HOTPLUG_CPU
842extern void idle_task_exit(void);
843#else
844static inline void idle_task_exit(void) {}
845#endif
846
847extern void sched_idle_next(void);
848extern void set_user_nice(task_t *p, long nice);
849extern int task_prio(const task_t *p);
850extern int task_nice(const task_t *p);
851extern int can_nice(const task_t *p, const int nice);
852extern int task_curr(const task_t *p);
853extern int idle_cpu(int cpu);
854extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
855extern task_t *idle_task(int cpu);
856
857void yield(void);
858
859
860
861
862extern struct exec_domain default_exec_domain;
863
864union thread_union {
865 struct thread_info thread_info;
866 unsigned long stack[THREAD_SIZE/sizeof(long)];
867};
868
869#ifndef __HAVE_ARCH_KSTACK_END
870static inline int kstack_end(void *addr)
871{
872
873
874
875 return !(((unsigned long)addr+sizeof(void*)-1) & (THREAD_SIZE-sizeof(void*)));
876}
877#endif
878
879extern union thread_union init_thread_union;
880extern struct task_struct init_task;
881
882extern struct mm_struct init_mm;
883
884#define find_task_by_pid(nr) find_task_by_pid_type(PIDTYPE_PID, nr)
885extern struct task_struct *find_task_by_pid_type(int type, int pid);
886extern void set_special_pids(pid_t session, pid_t pgrp);
887extern void __set_special_pids(pid_t session, pid_t pgrp);
888
889
890extern struct user_struct * alloc_uid(uid_t);
891static inline struct user_struct *get_uid(struct user_struct *u)
892{
893 atomic_inc(&u->__count);
894 return u;
895}
896extern void free_uid(struct user_struct *);
897extern void switch_uid(struct user_struct *);
898
899#include <asm/current.h>
900
901extern void do_timer(struct pt_regs *);
902
903extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
904extern int FASTCALL(wake_up_process(struct task_struct * tsk));
905extern void FASTCALL(wake_up_new_task(struct task_struct * tsk,
906 unsigned long clone_flags));
907#ifdef CONFIG_SMP
908 extern void kick_process(struct task_struct *tsk);
909#else
910 static inline void kick_process(struct task_struct *tsk) { }
911#endif
912extern void FASTCALL(sched_fork(task_t * p));
913extern void FASTCALL(sched_exit(task_t * p));
914
915extern int in_group_p(gid_t);
916extern int in_egroup_p(gid_t);
917
918extern void proc_caches_init(void);
919extern void flush_signals(struct task_struct *);
920extern void flush_signal_handlers(struct task_struct *, int force_default);
921extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info);
922
923static inline int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
924{
925 unsigned long flags;
926 int ret;
927
928 spin_lock_irqsave(&tsk->sighand->siglock, flags);
929 ret = dequeue_signal(tsk, mask, info);
930 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
931
932 return ret;
933}
934
935extern void block_all_signals(int (*notifier)(void *priv), void *priv,
936 sigset_t *mask);
937extern void unblock_all_signals(void);
938extern void release_task(struct task_struct * p);
939extern int send_sig_info(int, struct siginfo *, struct task_struct *);
940extern int send_group_sig_info(int, struct siginfo *, struct task_struct *);
941extern int force_sigsegv(int, struct task_struct *);
942extern int force_sig_info(int, struct siginfo *, struct task_struct *);
943extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp);
944extern int kill_pg_info(int, struct siginfo *, pid_t);
945extern int kill_proc_info(int, struct siginfo *, pid_t);
946extern void do_notify_parent(struct task_struct *, int);
947extern void force_sig(int, struct task_struct *);
948extern void force_sig_specific(int, struct task_struct *);
949extern int send_sig(int, struct task_struct *, int);
950extern void zap_other_threads(struct task_struct *p);
951extern int kill_pg(pid_t, int, int);
952extern int kill_sl(pid_t, int, int);
953extern int kill_proc(pid_t, int, int);
954extern struct sigqueue *sigqueue_alloc(void);
955extern void sigqueue_free(struct sigqueue *);
956extern int send_sigqueue(int, struct sigqueue *, struct task_struct *);
957extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *);
958extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *);
959extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long);
960
961
962#define SEND_SIG_NOINFO ((struct siginfo *) 0)
963#define SEND_SIG_PRIV ((struct siginfo *) 1)
964#define SEND_SIG_FORCED ((struct siginfo *) 2)
965
966
967
968static inline int on_sig_stack(unsigned long sp)
969{
970 return (sp - current->sas_ss_sp < current->sas_ss_size);
971}
972
973static inline int sas_ss_flags(unsigned long sp)
974{
975 return (current->sas_ss_size == 0 ? SS_DISABLE
976 : on_sig_stack(sp) ? SS_ONSTACK : 0);
977}
978
979
980#ifdef CONFIG_SECURITY
981
982extern int capable(int cap);
983#else
984static inline int capable(int cap)
985{
986 if (cap_raised(current->cap_effective, cap)) {
987 current->flags |= PF_SUPERPRIV;
988 return 1;
989 }
990 return 0;
991}
992#endif
993
994
995
996
997extern struct mm_struct * mm_alloc(void);
998
999
1000extern void FASTCALL(__mmdrop(struct mm_struct *));
1001static inline void mmdrop(struct mm_struct * mm)
1002{
1003 if (atomic_dec_and_test(&mm->mm_count))
1004 __mmdrop(mm);
1005}
1006
1007
1008extern void mmput(struct mm_struct *);
1009
1010extern struct mm_struct *get_task_mm(struct task_struct *task);
1011
1012extern void mm_release(struct task_struct *, struct mm_struct *);
1013
1014extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
1015extern void flush_thread(void);
1016extern void exit_thread(void);
1017
1018extern void exit_files(struct task_struct *);
1019extern void exit_signal(struct task_struct *);
1020extern void __exit_signal(struct task_struct *);
1021extern void exit_sighand(struct task_struct *);
1022extern void __exit_sighand(struct task_struct *);
1023extern void exit_itimers(struct signal_struct *);
1024
1025extern NORET_TYPE void do_group_exit(int);
1026
1027extern void daemonize(const char *, ...);
1028extern int allow_signal(int);
1029extern int disallow_signal(int);
1030extern task_t *child_reaper;
1031
1032extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
1033extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
1034task_t *fork_idle(int);
1035
1036extern void set_task_comm(struct task_struct *tsk, char *from);
1037extern void get_task_comm(char *to, struct task_struct *tsk);
1038
1039#ifdef CONFIG_SMP
1040extern void wait_task_inactive(task_t * p);
1041#else
1042#define wait_task_inactive(p) do { } while (0)
1043#endif
1044
1045#define remove_parent(p) list_del_init(&(p)->sibling)
1046#define add_parent(p, parent) list_add_tail(&(p)->sibling,&(parent)->children)
1047
1048#define REMOVE_LINKS(p) do { \
1049 if (thread_group_leader(p)) \
1050 list_del_init(&(p)->tasks); \
1051 remove_parent(p); \
1052 } while (0)
1053
1054#define SET_LINKS(p) do { \
1055 if (thread_group_leader(p)) \
1056 list_add_tail(&(p)->tasks,&init_task.tasks); \
1057 add_parent(p, (p)->parent); \
1058 } while (0)
1059
1060#define next_task(p) list_entry((p)->tasks.next, struct task_struct, tasks)
1061#define prev_task(p) list_entry((p)->tasks.prev, struct task_struct, tasks)
1062
1063#define for_each_process(p) \
1064 for (p = &init_task ; (p = next_task(p)) != &init_task ; )
1065
1066
1067
1068
1069
1070#define do_each_thread(g, t) \
1071 for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do
1072
1073#define while_each_thread(g, t) \
1074 while ((t = next_thread(t)) != g)
1075
1076extern task_t * FASTCALL(next_thread(const task_t *p));
1077
1078#define thread_group_leader(p) (p->pid == p->tgid)
1079
1080static inline int thread_group_empty(task_t *p)
1081{
1082 return list_empty(&p->pids[PIDTYPE_TGID].pid_list);
1083}
1084
1085#define delay_group_leader(p) \
1086 (thread_group_leader(p) && !thread_group_empty(p))
1087
1088extern void unhash_process(struct task_struct *p);
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098static inline void task_lock(struct task_struct *p)
1099{
1100 spin_lock(&p->alloc_lock);
1101}
1102
1103static inline void task_unlock(struct task_struct *p)
1104{
1105 spin_unlock(&p->alloc_lock);
1106}
1107
1108
1109
1110
1111static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag)
1112{
1113 set_ti_thread_flag(tsk->thread_info,flag);
1114}
1115
1116static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
1117{
1118 clear_ti_thread_flag(tsk->thread_info,flag);
1119}
1120
1121static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
1122{
1123 return test_and_set_ti_thread_flag(tsk->thread_info,flag);
1124}
1125
1126static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
1127{
1128 return test_and_clear_ti_thread_flag(tsk->thread_info,flag);
1129}
1130
1131static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag)
1132{
1133 return test_ti_thread_flag(tsk->thread_info,flag);
1134}
1135
1136static inline void set_tsk_need_resched(struct task_struct *tsk)
1137{
1138 set_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
1139}
1140
1141static inline void clear_tsk_need_resched(struct task_struct *tsk)
1142{
1143 clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
1144}
1145
1146static inline int signal_pending(struct task_struct *p)
1147{
1148 return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
1149}
1150
1151static inline int need_resched(void)
1152{
1153 return unlikely(test_thread_flag(TIF_NEED_RESCHED));
1154}
1155
1156
1157
1158
1159
1160
1161
1162
1163extern int cond_resched(void);
1164extern int cond_resched_lock(spinlock_t * lock);
1165extern int cond_resched_softirq(void);
1166
1167
1168
1169
1170
1171#if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP)
1172# define need_lockbreak(lock) ((lock)->break_lock)
1173#else
1174# define need_lockbreak(lock) 0
1175#endif
1176
1177
1178
1179
1180
1181static inline int lock_need_resched(spinlock_t *lock)
1182{
1183 if (need_lockbreak(lock) || need_resched())
1184 return 1;
1185 return 0;
1186}
1187
1188
1189
1190
1191
1192extern FASTCALL(void recalc_sigpending_tsk(struct task_struct *t));
1193extern void recalc_sigpending(void);
1194
1195extern void signal_wake_up(struct task_struct *t, int resume_stopped);
1196
1197
1198
1199
1200#ifdef CONFIG_SMP
1201
1202static inline unsigned int task_cpu(const struct task_struct *p)
1203{
1204 return p->thread_info->cpu;
1205}
1206
1207static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
1208{
1209 p->thread_info->cpu = cpu;
1210}
1211
1212#else
1213
1214static inline unsigned int task_cpu(const struct task_struct *p)
1215{
1216 return 0;
1217}
1218
1219static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
1220{
1221}
1222
1223#endif
1224
1225#ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
1226extern void arch_pick_mmap_layout(struct mm_struct *mm);
1227#else
1228static inline void arch_pick_mmap_layout(struct mm_struct *mm)
1229{
1230 mm->mmap_base = TASK_UNMAPPED_BASE;
1231 mm->get_unmapped_area = arch_get_unmapped_area;
1232 mm->unmap_area = arch_unmap_area;
1233}
1234#endif
1235
1236extern long sched_setaffinity(pid_t pid, cpumask_t new_mask);
1237extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
1238
1239#ifdef CONFIG_MAGIC_SYSRQ
1240
1241extern void normalize_rt_tasks(void);
1242
1243#endif
1244
1245
1246
1247
1248
1249
1250#ifdef CONFIG_PM
1251extern void refrigerator(unsigned long);
1252extern int freeze_processes(void);
1253extern void thaw_processes(void);
1254
1255static inline int try_to_freeze(unsigned long refrigerator_flags)
1256{
1257 if (unlikely(current->flags & PF_FREEZE)) {
1258 refrigerator(refrigerator_flags);
1259 return 1;
1260 } else
1261 return 0;
1262}
1263#else
1264static inline void refrigerator(unsigned long flag) {}
1265static inline int freeze_processes(void) { BUG(); return 0; }
1266static inline void thaw_processes(void) {}
1267
1268static inline int try_to_freeze(unsigned long refrigerator_flags)
1269{
1270 return 0;
1271}
1272#endif
1273#endif
1274
1275#endif
1276