Loading kernel/sched/rt.c +26 −30 Original line number Diff line number Diff line Loading @@ -1803,45 +1803,41 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p) static void set_cpus_allowed_rt(struct task_struct *p, const struct cpumask *new_mask) { int weight = cpumask_weight(new_mask); struct rq *rq; int weight; BUG_ON(!rt_task(p)); /* * Update the migration status of the RQ if we have an RT task * which is running AND changing its weight value. */ if (p->on_rq && (weight != p->rt.nr_cpus_allowed)) { struct rq *rq = task_rq(p); if (!p->on_rq) return; if (!task_current(rq, p)) { /* * Make sure we dequeue this task from the pushable list * before going further. It will either remain off of * the list because we are no longer pushable, or it * will be requeued. */ if (p->rt.nr_cpus_allowed > 1) dequeue_pushable_task(rq, p); weight = cpumask_weight(new_mask); /* * Requeue if our weight is changing and still > 1 * Only update if the process changes its state from whether it * can migrate or not. */ if (weight > 1) enqueue_pushable_task(rq, p); if ((p->rt.nr_cpus_allowed > 1) == (weight > 1)) return; } rq = task_rq(p); if ((p->rt.nr_cpus_allowed <= 1) && (weight > 1)) { rq->rt.rt_nr_migratory++; } else if ((p->rt.nr_cpus_allowed > 1) && (weight <= 1)) { /* * The process used to be able to migrate OR it can now migrate */ if (weight <= 1) { if (!task_current(rq, p)) dequeue_pushable_task(rq, p); BUG_ON(!rq->rt.rt_nr_migratory); rq->rt.rt_nr_migratory--; } else { if (!task_current(rq, p)) enqueue_pushable_task(rq, p); rq->rt.rt_nr_migratory++; } update_rt_migration(&rq->rt); } } /* Assumes rq->lock is held */ static void rq_online_rt(struct rq *rq) Loading Loading
kernel/sched/rt.c +26 −30 Original line number Diff line number Diff line Loading @@ -1803,45 +1803,41 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p) static void set_cpus_allowed_rt(struct task_struct *p, const struct cpumask *new_mask) { int weight = cpumask_weight(new_mask); struct rq *rq; int weight; BUG_ON(!rt_task(p)); /* * Update the migration status of the RQ if we have an RT task * which is running AND changing its weight value. */ if (p->on_rq && (weight != p->rt.nr_cpus_allowed)) { struct rq *rq = task_rq(p); if (!p->on_rq) return; if (!task_current(rq, p)) { /* * Make sure we dequeue this task from the pushable list * before going further. It will either remain off of * the list because we are no longer pushable, or it * will be requeued. */ if (p->rt.nr_cpus_allowed > 1) dequeue_pushable_task(rq, p); weight = cpumask_weight(new_mask); /* * Requeue if our weight is changing and still > 1 * Only update if the process changes its state from whether it * can migrate or not. */ if (weight > 1) enqueue_pushable_task(rq, p); if ((p->rt.nr_cpus_allowed > 1) == (weight > 1)) return; } rq = task_rq(p); if ((p->rt.nr_cpus_allowed <= 1) && (weight > 1)) { rq->rt.rt_nr_migratory++; } else if ((p->rt.nr_cpus_allowed > 1) && (weight <= 1)) { /* * The process used to be able to migrate OR it can now migrate */ if (weight <= 1) { if (!task_current(rq, p)) dequeue_pushable_task(rq, p); BUG_ON(!rq->rt.rt_nr_migratory); rq->rt.rt_nr_migratory--; } else { if (!task_current(rq, p)) enqueue_pushable_task(rq, p); rq->rt.rt_nr_migratory++; } update_rt_migration(&rq->rt); } } /* Assumes rq->lock is held */ static void rq_online_rt(struct rq *rq) Loading