diff options
Diffstat (limited to 'kernel/sched/deadline.c')
-rw-r--r-- | kernel/sched/deadline.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index ef5b9f6b1d42..0f9d2180be23 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c | |||
@@ -2283,6 +2283,36 @@ void __init init_sched_dl_class(void) | |||
2283 | GFP_KERNEL, cpu_to_node(i)); | 2283 | GFP_KERNEL, cpu_to_node(i)); |
2284 | } | 2284 | } |
2285 | 2285 | ||
2286 | void dl_add_task_root_domain(struct task_struct *p) | ||
2287 | { | ||
2288 | struct rq_flags rf; | ||
2289 | struct rq *rq; | ||
2290 | struct dl_bw *dl_b; | ||
2291 | |||
2292 | rq = task_rq_lock(p, &rf); | ||
2293 | if (!dl_task(p)) | ||
2294 | goto unlock; | ||
2295 | |||
2296 | dl_b = &rq->rd->dl_bw; | ||
2297 | raw_spin_lock(&dl_b->lock); | ||
2298 | |||
2299 | __dl_add(dl_b, p->dl.dl_bw, cpumask_weight(rq->rd->span)); | ||
2300 | |||
2301 | raw_spin_unlock(&dl_b->lock); | ||
2302 | |||
2303 | unlock: | ||
2304 | task_rq_unlock(rq, p, &rf); | ||
2305 | } | ||
2306 | |||
2307 | void dl_clear_root_domain(struct root_domain *rd) | ||
2308 | { | ||
2309 | unsigned long flags; | ||
2310 | |||
2311 | raw_spin_lock_irqsave(&rd->dl_bw.lock, flags); | ||
2312 | rd->dl_bw.total_bw = 0; | ||
2313 | raw_spin_unlock_irqrestore(&rd->dl_bw.lock, flags); | ||
2314 | } | ||
2315 | |||
2286 | #endif /* CONFIG_SMP */ | 2316 | #endif /* CONFIG_SMP */ |
2287 | 2317 | ||
2288 | static void switched_from_dl(struct rq *rq, struct task_struct *p) | 2318 | static void switched_from_dl(struct rq *rq, struct task_struct *p) |