aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sched.h
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@tglx.tec.linutronix.de>2005-06-26 17:20:36 -0400
committerThomas Gleixner <tglx@mtd.linutronix.de>2005-06-26 17:20:36 -0400
commit7ca6448dbfb398bba36eda3c01bc14b86c3675be (patch)
tree82d934ebf07f22a2c64c3b6d82ec24082878b43a /include/linux/sched.h
parentf1f67a9874f1a4bba1adff6d694aa52e5f52ff1a (diff)
parent7d681b23d6cc14a8c026ea6756242cb522cbbcae (diff)
Merge with rsync://fileserver/linux
Update to Linus latest
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r--include/linux/sched.h132
1 files changed, 100 insertions, 32 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4dbb109022f3..9530b1903160 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -201,8 +201,8 @@ extern unsigned long
201arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, 201arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
202 unsigned long len, unsigned long pgoff, 202 unsigned long len, unsigned long pgoff,
203 unsigned long flags); 203 unsigned long flags);
204extern void arch_unmap_area(struct vm_area_struct *area); 204extern void arch_unmap_area(struct mm_struct *, unsigned long);
205extern void arch_unmap_area_topdown(struct vm_area_struct *area); 205extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long);
206 206
207#define set_mm_counter(mm, member, value) (mm)->_##member = (value) 207#define set_mm_counter(mm, member, value) (mm)->_##member = (value)
208#define get_mm_counter(mm, member) ((mm)->_##member) 208#define get_mm_counter(mm, member) ((mm)->_##member)
@@ -218,9 +218,10 @@ struct mm_struct {
218 unsigned long (*get_unmapped_area) (struct file *filp, 218 unsigned long (*get_unmapped_area) (struct file *filp,
219 unsigned long addr, unsigned long len, 219 unsigned long addr, unsigned long len,
220 unsigned long pgoff, unsigned long flags); 220 unsigned long pgoff, unsigned long flags);
221 void (*unmap_area) (struct vm_area_struct *area); 221 void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
222 unsigned long mmap_base; /* base of mmap area */ 222 unsigned long mmap_base; /* base of mmap area */
223 unsigned long free_area_cache; /* first hole */ 223 unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
224 unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
224 pgd_t * pgd; 225 pgd_t * pgd;
225 atomic_t mm_users; /* How many users with user space? */ 226 atomic_t mm_users; /* How many users with user space? */
226 atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ 227 atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
@@ -245,7 +246,7 @@ struct mm_struct {
245 246
246 unsigned long saved_auxv[42]; /* for /proc/PID/auxv */ 247 unsigned long saved_auxv[42]; /* for /proc/PID/auxv */
247 248
248 unsigned dumpable:1; 249 unsigned dumpable:2;
249 cpumask_t cpu_vm_mask; 250 cpumask_t cpu_vm_mask;
250 251
251 /* Architecture-specific MM context */ 252 /* Architecture-specific MM context */
@@ -367,6 +368,11 @@ struct signal_struct {
367#endif 368#endif
368}; 369};
369 370
371/* Context switch must be unlocked if interrupts are to be enabled */
372#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
373# define __ARCH_WANT_UNLOCKED_CTXSW
374#endif
375
370/* 376/*
371 * Bits in flags field of signal_struct. 377 * Bits in flags field of signal_struct.
372 */ 378 */
@@ -459,10 +465,11 @@ enum idle_type
459#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ 465#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */
460#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */ 466#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */
461#define SD_BALANCE_EXEC 4 /* Balance on exec */ 467#define SD_BALANCE_EXEC 4 /* Balance on exec */
462#define SD_WAKE_IDLE 8 /* Wake to idle CPU on task wakeup */ 468#define SD_BALANCE_FORK 8 /* Balance on fork, clone */
463#define SD_WAKE_AFFINE 16 /* Wake task to waking CPU */ 469#define SD_WAKE_IDLE 16 /* Wake to idle CPU on task wakeup */
464#define SD_WAKE_BALANCE 32 /* Perform balancing at task wakeup */ 470#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */
465#define SD_SHARE_CPUPOWER 64 /* Domain members share cpu power */ 471#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */
472#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */
466 473
467struct sched_group { 474struct sched_group {
468 struct sched_group *next; /* Must be a circular list */ 475 struct sched_group *next; /* Must be a circular list */
@@ -487,6 +494,11 @@ struct sched_domain {
487 unsigned long long cache_hot_time; /* Task considered cache hot (ns) */ 494 unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
488 unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */ 495 unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */
489 unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */ 496 unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */
497 unsigned int busy_idx;
498 unsigned int idle_idx;
499 unsigned int newidle_idx;
500 unsigned int wake_idx;
501 unsigned int forkexec_idx;
490 int flags; /* See SD_* */ 502 int flags; /* See SD_* */
491 503
492 /* Runtime fields. */ 504 /* Runtime fields. */
@@ -510,10 +522,16 @@ struct sched_domain {
510 unsigned long alb_failed; 522 unsigned long alb_failed;
511 unsigned long alb_pushed; 523 unsigned long alb_pushed;
512 524
513 /* sched_balance_exec() stats */ 525 /* SD_BALANCE_EXEC stats */
514 unsigned long sbe_attempts; 526 unsigned long sbe_cnt;
527 unsigned long sbe_balanced;
515 unsigned long sbe_pushed; 528 unsigned long sbe_pushed;
516 529
530 /* SD_BALANCE_FORK stats */
531 unsigned long sbf_cnt;
532 unsigned long sbf_balanced;
533 unsigned long sbf_pushed;
534
517 /* try_to_wake_up() stats */ 535 /* try_to_wake_up() stats */
518 unsigned long ttwu_wake_remote; 536 unsigned long ttwu_wake_remote;
519 unsigned long ttwu_move_affine; 537 unsigned long ttwu_move_affine;
@@ -521,6 +539,8 @@ struct sched_domain {
521#endif 539#endif
522}; 540};
523 541
542extern void partition_sched_domains(cpumask_t *partition1,
543 cpumask_t *partition2);
524#ifdef ARCH_HAS_SCHED_DOMAIN 544#ifdef ARCH_HAS_SCHED_DOMAIN
525/* Useful helpers that arch setup code may use. Defined in kernel/sched.c */ 545/* Useful helpers that arch setup code may use. Defined in kernel/sched.c */
526extern cpumask_t cpu_isolated_map; 546extern cpumask_t cpu_isolated_map;
@@ -560,9 +580,10 @@ struct group_info {
560 groups_free(group_info); \ 580 groups_free(group_info); \
561} while (0) 581} while (0)
562 582
563struct group_info *groups_alloc(int gidsetsize); 583extern struct group_info *groups_alloc(int gidsetsize);
564void groups_free(struct group_info *group_info); 584extern void groups_free(struct group_info *group_info);
565int set_current_groups(struct group_info *group_info); 585extern int set_current_groups(struct group_info *group_info);
586extern int groups_search(struct group_info *group_info, gid_t grp);
566/* access the groups "array" with this macro */ 587/* access the groups "array" with this macro */
567#define GROUP_AT(gi, i) \ 588#define GROUP_AT(gi, i) \
568 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK]) 589 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
@@ -580,6 +601,9 @@ struct task_struct {
580 601
581 int lock_depth; /* BKL lock depth */ 602 int lock_depth; /* BKL lock depth */
582 603
604#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
605 int oncpu;
606#endif
583 int prio, static_prio; 607 int prio, static_prio;
584 struct list_head run_list; 608 struct list_head run_list;
585 prio_array_t *array; 609 prio_array_t *array;
@@ -659,6 +683,7 @@ struct task_struct {
659 struct user_struct *user; 683 struct user_struct *user;
660#ifdef CONFIG_KEYS 684#ifdef CONFIG_KEYS
661 struct key *thread_keyring; /* keyring private to this thread */ 685 struct key *thread_keyring; /* keyring private to this thread */
686 unsigned char jit_keyring; /* default keyring to attach requested keys to */
662#endif 687#endif
663 int oomkilladj; /* OOM kill score adjustment (bit shift). */ 688 int oomkilladj; /* OOM kill score adjustment (bit shift). */
664 char comm[TASK_COMM_LEN]; /* executable name excluding path 689 char comm[TASK_COMM_LEN]; /* executable name excluding path
@@ -701,8 +726,6 @@ struct task_struct {
701 spinlock_t alloc_lock; 726 spinlock_t alloc_lock;
702/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ 727/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */
703 spinlock_t proc_lock; 728 spinlock_t proc_lock;
704/* context-switch lock */
705 spinlock_t switch_lock;
706 729
707/* journalling filesystem info */ 730/* journalling filesystem info */
708 void *journal_info; 731 void *journal_info;
@@ -909,7 +932,7 @@ extern void FASTCALL(wake_up_new_task(struct task_struct * tsk,
909#else 932#else
910 static inline void kick_process(struct task_struct *tsk) { } 933 static inline void kick_process(struct task_struct *tsk) { }
911#endif 934#endif
912extern void FASTCALL(sched_fork(task_t * p)); 935extern void FASTCALL(sched_fork(task_t * p, int clone_flags));
913extern void FASTCALL(sched_exit(task_t * p)); 936extern void FASTCALL(sched_exit(task_t * p));
914 937
915extern int in_group_p(gid_t); 938extern int in_group_p(gid_t);
@@ -1242,33 +1265,78 @@ extern void normalize_rt_tasks(void);
1242 1265
1243#endif 1266#endif
1244 1267
1245/* try_to_freeze
1246 *
1247 * Checks whether we need to enter the refrigerator
1248 * and returns 1 if we did so.
1249 */
1250#ifdef CONFIG_PM 1268#ifdef CONFIG_PM
1251extern void refrigerator(unsigned long); 1269/*
1270 * Check if a process has been frozen
1271 */
1272static inline int frozen(struct task_struct *p)
1273{
1274 return p->flags & PF_FROZEN;
1275}
1276
1277/*
1278 * Check if there is a request to freeze a process
1279 */
1280static inline int freezing(struct task_struct *p)
1281{
1282 return p->flags & PF_FREEZE;
1283}
1284
1285/*
1286 * Request that a process be frozen
1287 * FIXME: SMP problem. We may not modify other process' flags!
1288 */
1289static inline void freeze(struct task_struct *p)
1290{
1291 p->flags |= PF_FREEZE;
1292}
1293
1294/*
1295 * Wake up a frozen process
1296 */
1297static inline int thaw_process(struct task_struct *p)
1298{
1299 if (frozen(p)) {
1300 p->flags &= ~PF_FROZEN;
1301 wake_up_process(p);
1302 return 1;
1303 }
1304 return 0;
1305}
1306
1307/*
1308 * freezing is complete, mark process as frozen
1309 */
1310static inline void frozen_process(struct task_struct *p)
1311{
1312 p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN;
1313}
1314
1315extern void refrigerator(void);
1252extern int freeze_processes(void); 1316extern int freeze_processes(void);
1253extern void thaw_processes(void); 1317extern void thaw_processes(void);
1254 1318
1255static inline int try_to_freeze(unsigned long refrigerator_flags) 1319static inline int try_to_freeze(void)
1256{ 1320{
1257 if (unlikely(current->flags & PF_FREEZE)) { 1321 if (freezing(current)) {
1258 refrigerator(refrigerator_flags); 1322 refrigerator();
1259 return 1; 1323 return 1;
1260 } else 1324 } else
1261 return 0; 1325 return 0;
1262} 1326}
1263#else 1327#else
1264static inline void refrigerator(unsigned long flag) {} 1328static inline int frozen(struct task_struct *p) { return 0; }
1329static inline int freezing(struct task_struct *p) { return 0; }
1330static inline void freeze(struct task_struct *p) { BUG(); }
1331static inline int thaw_process(struct task_struct *p) { return 1; }
1332static inline void frozen_process(struct task_struct *p) { BUG(); }
1333
1334static inline void refrigerator(void) {}
1265static inline int freeze_processes(void) { BUG(); return 0; } 1335static inline int freeze_processes(void) { BUG(); return 0; }
1266static inline void thaw_processes(void) {} 1336static inline void thaw_processes(void) {}
1267 1337
1268static inline int try_to_freeze(unsigned long refrigerator_flags) 1338static inline int try_to_freeze(void) { return 0; }
1269{ 1339
1270 return 0;
1271}
1272#endif /* CONFIG_PM */ 1340#endif /* CONFIG_PM */
1273#endif /* __KERNEL__ */ 1341#endif /* __KERNEL__ */
1274 1342