aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c73
1 files changed, 40 insertions, 33 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 12534421d7b5..ed90be46fb31 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -266,7 +266,8 @@ struct rt_rq {
266 * acquire operations must be ordered by ascending &runqueue. 266 * acquire operations must be ordered by ascending &runqueue.
267 */ 267 */
268struct rq { 268struct rq {
269 spinlock_t lock; /* runqueue lock */ 269 /* runqueue lock: */
270 spinlock_t lock;
270 271
271 /* 272 /*
272 * nr_running and cpu_load should be in the same cacheline because 273 * nr_running and cpu_load should be in the same cacheline because
@@ -279,13 +280,15 @@ struct rq {
279#ifdef CONFIG_NO_HZ 280#ifdef CONFIG_NO_HZ
280 unsigned char in_nohz_recently; 281 unsigned char in_nohz_recently;
281#endif 282#endif
282 struct load_weight load; /* capture load from *all* tasks on this cpu */ 283 /* capture load from *all* tasks on this cpu: */
284 struct load_weight load;
283 unsigned long nr_load_updates; 285 unsigned long nr_load_updates;
284 u64 nr_switches; 286 u64 nr_switches;
285 287
286 struct cfs_rq cfs; 288 struct cfs_rq cfs;
287#ifdef CONFIG_FAIR_GROUP_SCHED 289#ifdef CONFIG_FAIR_GROUP_SCHED
288 struct list_head leaf_cfs_rq_list; /* list of leaf cfs_rq on this cpu */ 290 /* list of leaf cfs_rq on this cpu: */
291 struct list_head leaf_cfs_rq_list;
289#endif 292#endif
290 struct rt_rq rt; 293 struct rt_rq rt;
291 294
@@ -317,7 +320,8 @@ struct rq {
317 /* For active balancing */ 320 /* For active balancing */
318 int active_balance; 321 int active_balance;
319 int push_cpu; 322 int push_cpu;
320 int cpu; /* cpu of this runqueue */ 323 /* cpu of this runqueue: */
324 int cpu;
321 325
322 struct task_struct *migration_thread; 326 struct task_struct *migration_thread;
323 struct list_head migration_queue; 327 struct list_head migration_queue;
@@ -328,22 +332,22 @@ struct rq {
328 struct sched_info rq_sched_info; 332 struct sched_info rq_sched_info;
329 333
330 /* sys_sched_yield() stats */ 334 /* sys_sched_yield() stats */
331 unsigned long yld_exp_empty; 335 unsigned int yld_exp_empty;
332 unsigned long yld_act_empty; 336 unsigned int yld_act_empty;
333 unsigned long yld_both_empty; 337 unsigned int yld_both_empty;
334 unsigned long yld_count; 338 unsigned int yld_count;
335 339
336 /* schedule() stats */ 340 /* schedule() stats */
337 unsigned long sched_switch; 341 unsigned int sched_switch;
338 unsigned long sched_count; 342 unsigned int sched_count;
339 unsigned long sched_goidle; 343 unsigned int sched_goidle;
340 344
341 /* try_to_wake_up() stats */ 345 /* try_to_wake_up() stats */
342 unsigned long ttwu_count; 346 unsigned int ttwu_count;
343 unsigned long ttwu_local; 347 unsigned int ttwu_local;
344 348
345 /* BKL stats */ 349 /* BKL stats */
346 unsigned long bkl_count; 350 unsigned int bkl_count;
347#endif 351#endif
348 struct lock_class_key rq_lock_key; 352 struct lock_class_key rq_lock_key;
349}; 353};
@@ -449,12 +453,12 @@ enum {
449}; 453};
450 454
451const_debug unsigned int sysctl_sched_features = 455const_debug unsigned int sysctl_sched_features =
452 SCHED_FEAT_NEW_FAIR_SLEEPERS *1 | 456 SCHED_FEAT_NEW_FAIR_SLEEPERS * 1 |
453 SCHED_FEAT_START_DEBIT *1 | 457 SCHED_FEAT_START_DEBIT * 1 |
454 SCHED_FEAT_TREE_AVG *0 | 458 SCHED_FEAT_TREE_AVG * 0 |
455 SCHED_FEAT_APPROX_AVG *0 | 459 SCHED_FEAT_APPROX_AVG * 0 |
456 SCHED_FEAT_WAKEUP_PREEMPT *1 | 460 SCHED_FEAT_WAKEUP_PREEMPT * 1 |
457 SCHED_FEAT_PREEMPT_RESTRICT *1; 461 SCHED_FEAT_PREEMPT_RESTRICT * 1;
458 462
459#define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x) 463#define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x)
460 464
@@ -3880,7 +3884,10 @@ EXPORT_SYMBOL(wait_for_completion_timeout);
3880 3884
3881int __sched wait_for_completion_interruptible(struct completion *x) 3885int __sched wait_for_completion_interruptible(struct completion *x)
3882{ 3886{
3883 return wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE); 3887 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
3888 if (t == -ERESTARTSYS)
3889 return t;
3890 return 0;
3884} 3891}
3885EXPORT_SYMBOL(wait_for_completion_interruptible); 3892EXPORT_SYMBOL(wait_for_completion_interruptible);
3886 3893
@@ -4815,18 +4822,18 @@ static void show_task(struct task_struct *p)
4815 unsigned state; 4822 unsigned state;
4816 4823
4817 state = p->state ? __ffs(p->state) + 1 : 0; 4824 state = p->state ? __ffs(p->state) + 1 : 0;
4818 printk("%-13.13s %c", p->comm, 4825 printk(KERN_INFO "%-13.13s %c", p->comm,
4819 state < sizeof(stat_nam) - 1 ? stat_nam[state] : '?'); 4826 state < sizeof(stat_nam) - 1 ? stat_nam[state] : '?');
4820#if BITS_PER_LONG == 32 4827#if BITS_PER_LONG == 32
4821 if (state == TASK_RUNNING) 4828 if (state == TASK_RUNNING)
4822 printk(" running "); 4829 printk(KERN_CONT " running ");
4823 else 4830 else
4824 printk(" %08lx ", thread_saved_pc(p)); 4831 printk(KERN_CONT " %08lx ", thread_saved_pc(p));
4825#else 4832#else
4826 if (state == TASK_RUNNING) 4833 if (state == TASK_RUNNING)
4827 printk(" running task "); 4834 printk(KERN_CONT " running task ");
4828 else 4835 else
4829 printk(" %016lx ", thread_saved_pc(p)); 4836 printk(KERN_CONT " %016lx ", thread_saved_pc(p));
4830#endif 4837#endif
4831#ifdef CONFIG_DEBUG_STACK_USAGE 4838#ifdef CONFIG_DEBUG_STACK_USAGE
4832 { 4839 {
@@ -4836,7 +4843,7 @@ static void show_task(struct task_struct *p)
4836 free = (unsigned long)n - (unsigned long)end_of_stack(p); 4843 free = (unsigned long)n - (unsigned long)end_of_stack(p);
4837 } 4844 }
4838#endif 4845#endif
4839 printk("%5lu %5d %6d\n", free, p->pid, p->parent->pid); 4846 printk(KERN_CONT "%5lu %5d %6d\n", free, p->pid, p->parent->pid);
4840 4847
4841 if (state != TASK_RUNNING) 4848 if (state != TASK_RUNNING)
4842 show_stack(p, NULL); 4849 show_stack(p, NULL);
@@ -5385,7 +5392,7 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
5385 return table; 5392 return table;
5386} 5393}
5387 5394
5388static ctl_table *sd_alloc_ctl_cpu_table(int cpu) 5395static ctl_table * sd_alloc_ctl_cpu_table(int cpu)
5389{ 5396{
5390 struct ctl_table *entry, *table; 5397 struct ctl_table *entry, *table;
5391 struct sched_domain *sd; 5398 struct sched_domain *sd;
@@ -5619,20 +5626,20 @@ static void sched_domain_debug(struct sched_domain *sd, int cpu)
5619 } 5626 }
5620 5627
5621 if (!group->__cpu_power) { 5628 if (!group->__cpu_power) {
5622 printk("\n"); 5629 printk(KERN_CONT "\n");
5623 printk(KERN_ERR "ERROR: domain->cpu_power not " 5630 printk(KERN_ERR "ERROR: domain->cpu_power not "
5624 "set\n"); 5631 "set\n");
5625 break; 5632 break;
5626 } 5633 }
5627 5634
5628 if (!cpus_weight(group->cpumask)) { 5635 if (!cpus_weight(group->cpumask)) {
5629 printk("\n"); 5636 printk(KERN_CONT "\n");
5630 printk(KERN_ERR "ERROR: empty group\n"); 5637 printk(KERN_ERR "ERROR: empty group\n");
5631 break; 5638 break;
5632 } 5639 }
5633 5640
5634 if (cpus_intersects(groupmask, group->cpumask)) { 5641 if (cpus_intersects(groupmask, group->cpumask)) {
5635 printk("\n"); 5642 printk(KERN_CONT "\n");
5636 printk(KERN_ERR "ERROR: repeated CPUs\n"); 5643 printk(KERN_ERR "ERROR: repeated CPUs\n");
5637 break; 5644 break;
5638 } 5645 }
@@ -5640,11 +5647,11 @@ static void sched_domain_debug(struct sched_domain *sd, int cpu)
5640 cpus_or(groupmask, groupmask, group->cpumask); 5647 cpus_or(groupmask, groupmask, group->cpumask);
5641 5648
5642 cpumask_scnprintf(str, NR_CPUS, group->cpumask); 5649 cpumask_scnprintf(str, NR_CPUS, group->cpumask);
5643 printk(" %s", str); 5650 printk(KERN_CONT " %s", str);
5644 5651
5645 group = group->next; 5652 group = group->next;
5646 } while (group != sd->groups); 5653 } while (group != sd->groups);
5647 printk("\n"); 5654 printk(KERN_CONT "\n");
5648 5655
5649 if (!cpus_equal(sd->span, groupmask)) 5656 if (!cpus_equal(sd->span, groupmask))
5650 printk(KERN_ERR "ERROR: groups don't span " 5657 printk(KERN_ERR "ERROR: groups don't span "