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 --- |