diff options
-rw-r--r-- | kernel/sched/deadline.c | 4 | ||||
-rw-r--r-- | kernel/sched/fair.c | 8 | ||||
-rw-r--r-- | kernel/sched/rt.c | 4 | ||||
-rw-r--r-- | kernel/sched/sched.h | 12 | ||||
-rw-r--r-- | kernel/sched/stop_task.c | 4 |
5 files changed, 17 insertions, 15 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 800e99b99075..e0a04ae1e0dd 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c | |||
@@ -741,7 +741,7 @@ void inc_dl_tasks(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq) | |||
741 | 741 | ||
742 | WARN_ON(!dl_prio(prio)); | 742 | WARN_ON(!dl_prio(prio)); |
743 | dl_rq->dl_nr_running++; | 743 | dl_rq->dl_nr_running++; |
744 | inc_nr_running(rq_of_dl_rq(dl_rq)); | 744 | add_nr_running(rq_of_dl_rq(dl_rq), 1); |
745 | 745 | ||
746 | inc_dl_deadline(dl_rq, deadline); | 746 | inc_dl_deadline(dl_rq, deadline); |
747 | inc_dl_migration(dl_se, dl_rq); | 747 | inc_dl_migration(dl_se, dl_rq); |
@@ -755,7 +755,7 @@ void dec_dl_tasks(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq) | |||
755 | WARN_ON(!dl_prio(prio)); | 755 | WARN_ON(!dl_prio(prio)); |
756 | WARN_ON(!dl_rq->dl_nr_running); | 756 | WARN_ON(!dl_rq->dl_nr_running); |
757 | dl_rq->dl_nr_running--; | 757 | dl_rq->dl_nr_running--; |
758 | dec_nr_running(rq_of_dl_rq(dl_rq)); | 758 | sub_nr_running(rq_of_dl_rq(dl_rq), 1); |
759 | 759 | ||
760 | dec_dl_deadline(dl_rq, dl_se->deadline); | 760 | dec_dl_deadline(dl_rq, dl_se->deadline); |
761 | dec_dl_migration(dl_se, dl_rq); | 761 | dec_dl_migration(dl_se, dl_rq); |
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 26ec6686a00b..f7cac2ba62ea 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c | |||
@@ -3325,7 +3325,7 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq) | |||
3325 | } | 3325 | } |
3326 | 3326 | ||
3327 | if (!se) | 3327 | if (!se) |
3328 | rq->nr_running -= task_delta; | 3328 | sub_nr_running(rq, task_delta); |
3329 | 3329 | ||
3330 | cfs_rq->throttled = 1; | 3330 | cfs_rq->throttled = 1; |
3331 | cfs_rq->throttled_clock = rq_clock(rq); | 3331 | cfs_rq->throttled_clock = rq_clock(rq); |
@@ -3376,7 +3376,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) | |||
3376 | } | 3376 | } |
3377 | 3377 | ||
3378 | if (!se) | 3378 | if (!se) |
3379 | rq->nr_running += task_delta; | 3379 | add_nr_running(rq, task_delta); |
3380 | 3380 | ||
3381 | /* determine whether we need to wake up potentially idle cpu */ | 3381 | /* determine whether we need to wake up potentially idle cpu */ |
3382 | if (rq->curr == rq->idle && rq->cfs.nr_running) | 3382 | if (rq->curr == rq->idle && rq->cfs.nr_running) |
@@ -3908,7 +3908,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) | |||
3908 | 3908 | ||
3909 | if (!se) { | 3909 | if (!se) { |
3910 | update_rq_runnable_avg(rq, rq->nr_running); | 3910 | update_rq_runnable_avg(rq, rq->nr_running); |
3911 | inc_nr_running(rq); | 3911 | add_nr_running(rq, 1); |
3912 | } | 3912 | } |
3913 | hrtick_update(rq); | 3913 | hrtick_update(rq); |
3914 | } | 3914 | } |
@@ -3968,7 +3968,7 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags) | |||
3968 | } | 3968 | } |
3969 | 3969 | ||
3970 | if (!se) { | 3970 | if (!se) { |
3971 | dec_nr_running(rq); | 3971 | sub_nr_running(rq, 1); |
3972 | update_rq_runnable_avg(rq, 1); | 3972 | update_rq_runnable_avg(rq, 1); |
3973 | } | 3973 | } |
3974 | hrtick_update(rq); | 3974 | hrtick_update(rq); |
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 7795e292f4c9..0ebfd7a29472 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c | |||
@@ -973,7 +973,7 @@ dequeue_top_rt_rq(struct rt_rq *rt_rq) | |||
973 | 973 | ||
974 | BUG_ON(!rq->nr_running); | 974 | BUG_ON(!rq->nr_running); |
975 | 975 | ||
976 | rq->nr_running -= rt_rq->rt_nr_running; | 976 | sub_nr_running(rq, rt_rq->rt_nr_running); |
977 | rt_rq->rt_queued = 0; | 977 | rt_rq->rt_queued = 0; |
978 | } | 978 | } |
979 | 979 | ||
@@ -989,7 +989,7 @@ enqueue_top_rt_rq(struct rt_rq *rt_rq) | |||
989 | if (rt_rq_throttled(rt_rq) || !rt_rq->rt_nr_running) | 989 | if (rt_rq_throttled(rt_rq) || !rt_rq->rt_nr_running) |
990 | return; | 990 | return; |
991 | 991 | ||
992 | rq->nr_running += rt_rq->rt_nr_running; | 992 | add_nr_running(rq, rt_rq->rt_nr_running); |
993 | rt_rq->rt_queued = 1; | 993 | rt_rq->rt_queued = 1; |
994 | } | 994 | } |
995 | 995 | ||
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index b2cbe81308af..600e2291a75c 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h | |||
@@ -1206,12 +1206,14 @@ extern void update_idle_cpu_load(struct rq *this_rq); | |||
1206 | 1206 | ||
1207 | extern void init_task_runnable_average(struct task_struct *p); | 1207 | extern void init_task_runnable_average(struct task_struct *p); |
1208 | 1208 | ||
1209 | static inline void inc_nr_running(struct rq *rq) | 1209 | static inline void add_nr_running(struct rq *rq, unsigned count) |
1210 | { | 1210 | { |
1211 | rq->nr_running++; | 1211 | unsigned prev_nr = rq->nr_running; |
1212 | |||
1213 | rq->nr_running = prev_nr + count; | ||
1212 | 1214 | ||
1213 | #ifdef CONFIG_NO_HZ_FULL | 1215 | #ifdef CONFIG_NO_HZ_FULL |
1214 | if (rq->nr_running == 2) { | 1216 | if (prev_nr < 2 && rq->nr_running >= 2) { |
1215 | if (tick_nohz_full_cpu(rq->cpu)) { | 1217 | if (tick_nohz_full_cpu(rq->cpu)) { |
1216 | /* Order rq->nr_running write against the IPI */ | 1218 | /* Order rq->nr_running write against the IPI */ |
1217 | smp_wmb(); | 1219 | smp_wmb(); |
@@ -1221,9 +1223,9 @@ static inline void inc_nr_running(struct rq *rq) | |||
1221 | #endif | 1223 | #endif |
1222 | } | 1224 | } |
1223 | 1225 | ||
1224 | static inline void dec_nr_running(struct rq *rq) | 1226 | static inline void sub_nr_running(struct rq *rq, unsigned count) |
1225 | { | 1227 | { |
1226 | rq->nr_running--; | 1228 | rq->nr_running -= count; |
1227 | } | 1229 | } |
1228 | 1230 | ||
1229 | static inline void rq_last_tick_reset(struct rq *rq) | 1231 | static inline void rq_last_tick_reset(struct rq *rq) |
diff --git a/kernel/sched/stop_task.c b/kernel/sched/stop_task.c index d6ce65dde541..bfe0edadbfbb 100644 --- a/kernel/sched/stop_task.c +++ b/kernel/sched/stop_task.c | |||
@@ -41,13 +41,13 @@ pick_next_task_stop(struct rq *rq, struct task_struct *prev) | |||
41 | static void | 41 | static void |
42 | enqueue_task_stop(struct rq *rq, struct task_struct *p, int flags) | 42 | enqueue_task_stop(struct rq *rq, struct task_struct *p, int flags) |
43 | { | 43 | { |
44 | inc_nr_running(rq); | 44 | add_nr_running(rq, 1); |
45 | } | 45 | } |
46 | 46 | ||
47 | static void | 47 | static void |
48 | dequeue_task_stop(struct rq *rq, struct task_struct *p, int flags) | 48 | dequeue_task_stop(struct rq *rq, struct task_struct *p, int flags) |
49 | { | 49 | { |
50 | dec_nr_running(rq); | 50 | sub_nr_running(rq, 1); |
51 | } | 51 | } |
52 | 52 | ||
53 | static void yield_task_stop(struct rq *rq) | 53 | static void yield_task_stop(struct rq *rq) |