diff options
-rw-r--r-- | init/Kconfig | 8 | ||||
-rw-r--r-- | kernel/printk.c | 4 | ||||
-rw-r--r-- | kernel/sched.c | 10 | ||||
-rw-r--r-- | kernel/sched_fair.c | 8 |
4 files changed, 21 insertions, 9 deletions
diff --git a/init/Kconfig b/init/Kconfig index 0d0bbf218f1f..dcc96a8c8c69 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -775,6 +775,14 @@ config PREEMPT_NOTIFIERS | |||
775 | choice | 775 | choice |
776 | prompt "RCU implementation type:" | 776 | prompt "RCU implementation type:" |
777 | default CLASSIC_RCU | 777 | default CLASSIC_RCU |
778 | help | ||
779 | This allows you to choose either the classic RCU implementation | ||
780 | that is designed for best read-side performance on non-realtime | ||
781 | systems, or the preemptible RCU implementation for best latency | ||
782 | on realtime systems. Note that some kernel preemption modes | ||
783 | will restrict your choice. | ||
784 | |||
785 | Select the default if you are unsure. | ||
778 | 786 | ||
779 | config CLASSIC_RCU | 787 | config CLASSIC_RCU |
780 | bool "Classic RCU" | 788 | bool "Classic RCU" |
diff --git a/kernel/printk.c b/kernel/printk.c index 58bbec684119..29ae1e99cde0 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
@@ -455,10 +455,10 @@ static int __init ignore_loglevel_setup(char *str) | |||
455 | ignore_loglevel = 1; | 455 | ignore_loglevel = 1; |
456 | printk(KERN_INFO "debug: ignoring loglevel setting.\n"); | 456 | printk(KERN_INFO "debug: ignoring loglevel setting.\n"); |
457 | 457 | ||
458 | return 1; | 458 | return 0; |
459 | } | 459 | } |
460 | 460 | ||
461 | __setup("ignore_loglevel", ignore_loglevel_setup); | 461 | early_param("ignore_loglevel", ignore_loglevel_setup); |
462 | 462 | ||
463 | /* | 463 | /* |
464 | * Write out chars from start to end - 1 inclusive | 464 | * Write out chars from start to end - 1 inclusive |
diff --git a/kernel/sched.c b/kernel/sched.c index ba4c88088f62..8355e007e021 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -1255,12 +1255,12 @@ static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); | |||
1255 | 1255 | ||
1256 | #define sched_class_highest (&rt_sched_class) | 1256 | #define sched_class_highest (&rt_sched_class) |
1257 | 1257 | ||
1258 | static void inc_nr_running(struct task_struct *p, struct rq *rq) | 1258 | static void inc_nr_running(struct rq *rq) |
1259 | { | 1259 | { |
1260 | rq->nr_running++; | 1260 | rq->nr_running++; |
1261 | } | 1261 | } |
1262 | 1262 | ||
1263 | static void dec_nr_running(struct task_struct *p, struct rq *rq) | 1263 | static void dec_nr_running(struct rq *rq) |
1264 | { | 1264 | { |
1265 | rq->nr_running--; | 1265 | rq->nr_running--; |
1266 | } | 1266 | } |
@@ -1354,7 +1354,7 @@ static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) | |||
1354 | rq->nr_uninterruptible--; | 1354 | rq->nr_uninterruptible--; |
1355 | 1355 | ||
1356 | enqueue_task(rq, p, wakeup); | 1356 | enqueue_task(rq, p, wakeup); |
1357 | inc_nr_running(p, rq); | 1357 | inc_nr_running(rq); |
1358 | } | 1358 | } |
1359 | 1359 | ||
1360 | /* | 1360 | /* |
@@ -1366,7 +1366,7 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) | |||
1366 | rq->nr_uninterruptible++; | 1366 | rq->nr_uninterruptible++; |
1367 | 1367 | ||
1368 | dequeue_task(rq, p, sleep); | 1368 | dequeue_task(rq, p, sleep); |
1369 | dec_nr_running(p, rq); | 1369 | dec_nr_running(rq); |
1370 | } | 1370 | } |
1371 | 1371 | ||
1372 | /** | 1372 | /** |
@@ -2006,7 +2006,7 @@ void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags) | |||
2006 | * management (if any): | 2006 | * management (if any): |
2007 | */ | 2007 | */ |
2008 | p->sched_class->task_new(rq, p); | 2008 | p->sched_class->task_new(rq, p); |
2009 | inc_nr_running(p, rq); | 2009 | inc_nr_running(rq); |
2010 | } | 2010 | } |
2011 | check_preempt_curr(rq, p); | 2011 | check_preempt_curr(rq, p); |
2012 | #ifdef CONFIG_SMP | 2012 | #ifdef CONFIG_SMP |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 72e25c7a3a18..6c091d6e159d 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
@@ -520,7 +520,7 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) | |||
520 | 520 | ||
521 | if (!initial) { | 521 | if (!initial) { |
522 | /* sleeps upto a single latency don't count. */ | 522 | /* sleeps upto a single latency don't count. */ |
523 | if (sched_feat(NEW_FAIR_SLEEPERS) && entity_is_task(se)) | 523 | if (sched_feat(NEW_FAIR_SLEEPERS)) |
524 | vruntime -= sysctl_sched_latency; | 524 | vruntime -= sysctl_sched_latency; |
525 | 525 | ||
526 | /* ensure we never gain time by being placed backwards. */ | 526 | /* ensure we never gain time by being placed backwards. */ |
@@ -1106,7 +1106,11 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p) | |||
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | gran = sysctl_sched_wakeup_granularity; | 1108 | gran = sysctl_sched_wakeup_granularity; |
1109 | if (unlikely(se->load.weight != NICE_0_LOAD)) | 1109 | /* |
1110 | * More easily preempt - nice tasks, while not making | ||
1111 | * it harder for + nice tasks. | ||
1112 | */ | ||
1113 | if (unlikely(se->load.weight > NICE_0_LOAD)) | ||
1110 | gran = calc_delta_fair(gran, &se->load); | 1114 | gran = calc_delta_fair(gran, &se->load); |
1111 | 1115 | ||
1112 | if (pse->vruntime + gran < se->vruntime) | 1116 | if (pse->vruntime + gran < se->vruntime) |