rt.c (c5b2803840817115e9b568d5054e5007ae36176b) rt.c (6c37067e27867db172b988cc11b9ff921175dee5)
1/*
2 * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
3 * policies)
4 */
5
6#include "sched.h"
7
8#include <linux/slab.h>

--- 2062 unchanged lines hidden (view full) ---

2071 !test_tsk_need_resched(rq->curr) &&
2072 p->nr_cpus_allowed > 1 &&
2073 (dl_task(rq->curr) || rt_task(rq->curr)) &&
2074 (rq->curr->nr_cpus_allowed < 2 ||
2075 rq->curr->prio <= p->prio))
2076 push_rt_tasks(rq);
2077}
2078
1/*
2 * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
3 * policies)
4 */
5
6#include "sched.h"
7
8#include <linux/slab.h>

--- 2062 unchanged lines hidden (view full) ---

2071 !test_tsk_need_resched(rq->curr) &&
2072 p->nr_cpus_allowed > 1 &&
2073 (dl_task(rq->curr) || rt_task(rq->curr)) &&
2074 (rq->curr->nr_cpus_allowed < 2 ||
2075 rq->curr->prio <= p->prio))
2076 push_rt_tasks(rq);
2077}
2078
2079static void set_cpus_allowed_rt(struct task_struct *p,
2080 const struct cpumask *new_mask)
2081{
2082 struct rq *rq;
2083 int weight;
2084
2085 BUG_ON(!rt_task(p));
2086
2087 weight = cpumask_weight(new_mask);
2088
2089 /*
2090 * Only update if the process changes its state from whether it
2091 * can migrate or not.
2092 */
2093 if ((p->nr_cpus_allowed > 1) == (weight > 1))
2094 goto done;
2095
2096 if (!task_on_rq_queued(p))
2097 goto done;
2098
2099 rq = task_rq(p);
2100
2101 /*
2102 * The process used to be able to migrate OR it can now migrate
2103 */
2104 if (weight <= 1) {
2105 if (!task_current(rq, p))
2106 dequeue_pushable_task(rq, p);
2107 BUG_ON(!rq->rt.rt_nr_migratory);
2108 rq->rt.rt_nr_migratory--;
2109 } else {
2110 if (!task_current(rq, p))
2111 enqueue_pushable_task(rq, p);
2112 rq->rt.rt_nr_migratory++;
2113 }
2114
2115 update_rt_migration(&rq->rt);
2116
2117done:
2118 cpumask_copy(&p->cpus_allowed, new_mask);
2119 p->nr_cpus_allowed = weight;
2120}
2121
2122/* Assumes rq->lock is held */
2123static void rq_online_rt(struct rq *rq)
2124{
2125 if (rq->rt.overloaded)
2126 rt_set_overload(rq);
2127
2128 __enable_runtime(rq);
2129

--- 192 unchanged lines hidden (view full) ---

2322 .check_preempt_curr = check_preempt_curr_rt,
2323
2324 .pick_next_task = pick_next_task_rt,
2325 .put_prev_task = put_prev_task_rt,
2326
2327#ifdef CONFIG_SMP
2328 .select_task_rq = select_task_rq_rt,
2329
2079/* Assumes rq->lock is held */
2080static void rq_online_rt(struct rq *rq)
2081{
2082 if (rq->rt.overloaded)
2083 rt_set_overload(rq);
2084
2085 __enable_runtime(rq);
2086

--- 192 unchanged lines hidden (view full) ---

2279 .check_preempt_curr = check_preempt_curr_rt,
2280
2281 .pick_next_task = pick_next_task_rt,
2282 .put_prev_task = put_prev_task_rt,
2283
2284#ifdef CONFIG_SMP
2285 .select_task_rq = select_task_rq_rt,
2286
2330 .set_cpus_allowed = set_cpus_allowed_rt,
2287 .set_cpus_allowed = set_cpus_allowed_common,
2331 .rq_online = rq_online_rt,
2332 .rq_offline = rq_offline_rt,
2333 .task_woken = task_woken_rt,
2334 .switched_from = switched_from_rt,
2335#endif
2336
2337 .set_curr_task = set_curr_task_rt,
2338 .task_tick = task_tick_rt,

--- 23 unchanged lines hidden ---
2288 .rq_online = rq_online_rt,
2289 .rq_offline = rq_offline_rt,
2290 .task_woken = task_woken_rt,
2291 .switched_from = switched_from_rt,
2292#endif
2293
2294 .set_curr_task = set_curr_task_rt,
2295 .task_tick = task_tick_rt,

--- 23 unchanged lines hidden ---