[PATCH 1/2] sched: use tsk_cpus_allowed() instead of accessing ->cpus_allowed

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH 1/2] sched: use tsk_cpus_allowed() instead of accessing ->cpus_allowed

Sebastian Andrzej Siewior-4
From: Thomas Gleixner <[hidden email]>

Use the future-safe accessor for struct task_struct's.

Signed-off-by: Thomas Gleixner <[hidden email]>
Signed-off-by: Sebastian Andrzej Siewior <[hidden email]>
---
 kernel/sched/cpudeadline.c | 4 ++--
 kernel/sched/cpupri.c      | 4 ++--
 kernel/sched/deadline.c    | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c
index 5a75b08cfd85..5be58820465c 100644
--- a/kernel/sched/cpudeadline.c
+++ b/kernel/sched/cpudeadline.c
@@ -103,10 +103,10 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p,
  const struct sched_dl_entity *dl_se = &p->dl;
 
  if (later_mask &&
-    cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) {
+    cpumask_and(later_mask, cp->free_cpus, tsk_cpus_allowed(p))) {
  best_cpu = cpumask_any(later_mask);
  goto out;
- } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) &&
+ } else if (cpumask_test_cpu(cpudl_maximum(cp), tsk_cpus_allowed(p)) &&
  dl_time_before(dl_se->deadline, cp->elements[0].dl)) {
  best_cpu = cpudl_maximum(cp);
  if (later_mask)
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index 981fcd7dc394..11e9705bf937 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -103,11 +103,11 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p,
  if (skip)
  continue;
 
- if (cpumask_any_and(&p->cpus_allowed, vec->mask) >= nr_cpu_ids)
+ if (cpumask_any_and(tsk_cpus_allowed(p), vec->mask) >= nr_cpu_ids)
  continue;
 
  if (lowest_mask) {
- cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask);
+ cpumask_and(lowest_mask, tsk_cpus_allowed(p), vec->mask);
 
  /*
  * We have to ensure that we have at least one bit
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index affd97ec9f65..eb95f87c474c 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1392,7 +1392,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq)
  if (double_lock_balance(rq, later_rq)) {
  if (unlikely(task_rq(task) != rq ||
      !cpumask_test_cpu(later_rq->cpu,
-                       &task->cpus_allowed) ||
+       tsk_cpus_allowed(task)) ||
      task_running(rq, task) ||
      !task_on_rq_queued(task))) {
  double_unlock_balance(rq, later_rq);
--
2.8.1

Reply | Threaded
Open this post in threaded view
|

[PATCH 2/2] sched: provide a tsk_nr_cpus_allowed() helper

Sebastian Andrzej Siewior-4
From: Thomas Gleixner <[hidden email]>

tsk_nr_cpus_allowed() is an accessor for task->nr_cpus_allowed which allows
us to change the representation of ->nr_cpus_allowed if required.

Signed-off-by: Thomas Gleixner <[hidden email]>
Signed-off-by: Sebastian Andrzej Siewior <[hidden email]>
---
 include/linux/sched.h   |  5 +++++
 kernel/sched/core.c     |  2 +-
 kernel/sched/deadline.c | 28 ++++++++++++++--------------
 kernel/sched/rt.c       | 24 ++++++++++++------------
 4 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 52c4847b05e2..c43370f80ee1 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1871,6 +1871,11 @@ extern int arch_task_struct_size __read_mostly;
 /* Future-safe accessor for struct task_struct's cpus_allowed. */
 #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
 
+static inline int tsk_nr_cpus_allowed(struct task_struct *p)
+{
+ return p->nr_cpus_allowed;
+}
+
 #define TNF_MIGRATED 0x01
 #define TNF_NO_GROUP 0x02
 #define TNF_SHARED 0x04
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index d1f7149f8704..78ec84fcf4ab 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1515,7 +1515,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags)
 {
  lockdep_assert_held(&p->pi_lock);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  cpu = p->sched_class->select_task_rq(p, cpu, sd_flags, wake_flags);
 
  /*
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index eb95f87c474c..36ef79c2dbc9 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -134,7 +134,7 @@ static void inc_dl_migration(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
 {
  struct task_struct *p = dl_task_of(dl_se);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  dl_rq->dl_nr_migratory++;
 
  update_dl_migration(dl_rq);
@@ -144,7 +144,7 @@ static void dec_dl_migration(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
 {
  struct task_struct *p = dl_task_of(dl_se);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  dl_rq->dl_nr_migratory--;
 
  update_dl_migration(dl_rq);
@@ -966,7 +966,7 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags)
 
  enqueue_dl_entity(&p->dl, pi_se, flags);
 
- if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
+ if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_dl_task(rq, p);
 }
 
@@ -1040,9 +1040,9 @@ select_task_rq_dl(struct task_struct *p, int cpu, int sd_flag, int flags)
  * try to make it stay here, it might be important.
  */
  if (unlikely(dl_task(curr)) &&
-    (curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(curr) < 2 ||
      !dl_entity_preempt(&p->dl, &curr->dl)) &&
-    (p->nr_cpus_allowed > 1)) {
+    (tsk_nr_cpus_allowed(p) > 1)) {
  int target = find_later_rq(p);
 
  if (target != -1 &&
@@ -1063,7 +1063,7 @@ static void check_preempt_equal_dl(struct rq *rq, struct task_struct *p)
  * Current can't be migrated, useless to reschedule,
  * let's hope p can move out.
  */
- if (rq->curr->nr_cpus_allowed == 1 ||
+ if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
     cpudl_find(&rq->rd->cpudl, rq->curr, NULL) == -1)
  return;
 
@@ -1071,7 +1071,7 @@ static void check_preempt_equal_dl(struct rq *rq, struct task_struct *p)
  * p is migratable, so let's not schedule it and
  * see if it is pushed or pulled somewhere else.
  */
- if (p->nr_cpus_allowed != 1 &&
+ if (tsk_nr_cpus_allowed(p) != 1 &&
     cpudl_find(&rq->rd->cpudl, p, NULL) != -1)
  return;
 
@@ -1185,7 +1185,7 @@ static void put_prev_task_dl(struct rq *rq, struct task_struct *p)
 {
  update_curr_dl(rq);
 
- if (on_dl_rq(&p->dl) && p->nr_cpus_allowed > 1)
+ if (on_dl_rq(&p->dl) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_dl_task(rq, p);
 }
 
@@ -1286,7 +1286,7 @@ static int find_later_rq(struct task_struct *task)
  if (unlikely(!later_mask))
  return -1;
 
- if (task->nr_cpus_allowed == 1)
+ if (tsk_nr_cpus_allowed(task) == 1)
  return -1;
 
  /*
@@ -1431,7 +1431,7 @@ static struct task_struct *pick_next_pushable_dl_task(struct rq *rq)
 
  BUG_ON(rq->cpu != task_cpu(p));
  BUG_ON(task_current(rq, p));
- BUG_ON(p->nr_cpus_allowed <= 1);
+ BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
 
  BUG_ON(!task_on_rq_queued(p));
  BUG_ON(!dl_task(p));
@@ -1470,7 +1470,7 @@ static int push_dl_task(struct rq *rq)
  */
  if (dl_task(rq->curr) &&
     dl_time_before(next_task->dl.deadline, rq->curr->dl.deadline) &&
-    rq->curr->nr_cpus_allowed > 1) {
+    tsk_nr_cpus_allowed(rq->curr) > 1) {
  resched_curr(rq);
  return 0;
  }
@@ -1617,9 +1617,9 @@ static void task_woken_dl(struct rq *rq, struct task_struct *p)
 {
  if (!task_running(rq, p) &&
     !test_tsk_need_resched(rq->curr) &&
-    p->nr_cpus_allowed > 1 &&
+    tsk_nr_cpus_allowed(p) > 1 &&
     dl_task(rq->curr) &&
-    (rq->curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
      !dl_entity_preempt(&p->dl, &rq->curr->dl))) {
  push_dl_tasks(rq);
  }
@@ -1723,7 +1723,7 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
 
  if (task_on_rq_queued(p) && rq->curr != p) {
 #ifdef CONFIG_SMP
- if (p->nr_cpus_allowed > 1 && rq->dl.overloaded)
+ if (tsk_nr_cpus_allowed(p) > 1 && rq->dl.overloaded)
  queue_push_tasks(rq);
 #else
  if (dl_task(rq->curr))
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index c41ea7ac1764..c510132aeb68 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -334,7 +334,7 @@ static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
  rt_rq = &rq_of_rt_rq(rt_rq)->rt;
 
  rt_rq->rt_nr_total++;
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  rt_rq->rt_nr_migratory++;
 
  update_rt_migration(rt_rq);
@@ -351,7 +351,7 @@ static void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
  rt_rq = &rq_of_rt_rq(rt_rq)->rt;
 
  rt_rq->rt_nr_total--;
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  rt_rq->rt_nr_migratory--;
 
  update_rt_migration(rt_rq);
@@ -1324,7 +1324,7 @@ enqueue_task_rt(struct rq *rq, struct task_struct *p, int flags)
 
  enqueue_rt_entity(rt_se, flags);
 
- if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
+ if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_task(rq, p);
 }
 
@@ -1413,7 +1413,7 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
  * will have to sort it out.
  */
  if (curr && unlikely(rt_task(curr)) &&
-    (curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(curr) < 2 ||
      curr->prio <= p->prio)) {
  int target = find_lowest_rq(p);
 
@@ -1437,7 +1437,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
  * Current can't be migrated, useless to reschedule,
  * let's hope p can move out.
  */
- if (rq->curr->nr_cpus_allowed == 1 ||
+ if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
     !cpupri_find(&rq->rd->cpupri, rq->curr, NULL))
  return;
 
@@ -1445,7 +1445,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
  * p is migratable, so let's not schedule it and
  * see if it is pushed or pulled somewhere else.
  */
- if (p->nr_cpus_allowed != 1
+ if (tsk_nr_cpus_allowed(p) != 1
     && cpupri_find(&rq->rd->cpupri, p, NULL))
  return;
 
@@ -1579,7 +1579,7 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p)
  * The previous task needs to be made eligible for pushing
  * if it is still active
  */
- if (on_rt_rq(&p->rt) && p->nr_cpus_allowed > 1)
+ if (on_rt_rq(&p->rt) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_task(rq, p);
 }
 
@@ -1629,7 +1629,7 @@ static int find_lowest_rq(struct task_struct *task)
  if (unlikely(!lowest_mask))
  return -1;
 
- if (task->nr_cpus_allowed == 1)
+ if (tsk_nr_cpus_allowed(task) == 1)
  return -1; /* No other targets possible */
 
  if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
@@ -1761,7 +1761,7 @@ static struct task_struct *pick_next_pushable_task(struct rq *rq)
 
  BUG_ON(rq->cpu != task_cpu(p));
  BUG_ON(task_current(rq, p));
- BUG_ON(p->nr_cpus_allowed <= 1);
+ BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
 
  BUG_ON(!task_on_rq_queued(p));
  BUG_ON(!rt_task(p));
@@ -2121,9 +2121,9 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p)
 {
  if (!task_running(rq, p) &&
     !test_tsk_need_resched(rq->curr) &&
-    p->nr_cpus_allowed > 1 &&
+    tsk_nr_cpus_allowed(p) > 1 &&
     (dl_task(rq->curr) || rt_task(rq->curr)) &&
-    (rq->curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
      rq->curr->prio <= p->prio))
  push_rt_tasks(rq);
 }
@@ -2196,7 +2196,7 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
  */
  if (task_on_rq_queued(p) && rq->curr != p) {
 #ifdef CONFIG_SMP
- if (p->nr_cpus_allowed > 1 && rq->rt.overloaded)
+ if (tsk_nr_cpus_allowed(p) > 1 && rq->rt.overloaded)
  queue_push_tasks(rq);
 #else
  if (p->prio < rq->curr->prio)
--
2.8.1

Reply | Threaded
Open this post in threaded view
|

[tip:sched/core] sched/core: Use tsk_cpus_allowed() instead of accessing ->cpus_allowed

tip-bot for Peter Zijlstra
In reply to this post by Sebastian Andrzej Siewior-4
Commit-ID:  ade42e092b5d1fb9a77b026f019b9953d66f1573
Gitweb:     http://git.kernel.org/tip/ade42e092b5d1fb9a77b026f019b9953d66f1573
Author:     Thomas Gleixner <[hidden email]>
AuthorDate: Wed, 11 May 2016 14:23:30 +0200
Committer:  Ingo Molnar <[hidden email]>
CommitDate: Thu, 12 May 2016 09:55:35 +0200

sched/core: Use tsk_cpus_allowed() instead of accessing ->cpus_allowed

Use the future-safe accessor for struct task_struct's.

Signed-off-by: Thomas Gleixner <[hidden email]>
Signed-off-by: Sebastian Andrzej Siewior <[hidden email]>
Signed-off-by: Peter Zijlstra (Intel) <[hidden email]>
Cc: Linus Torvalds <[hidden email]>
Cc: Mike Galbraith <[hidden email]>
Cc: Peter Zijlstra <[hidden email]>
Cc: [hidden email]
Link: http://lkml.kernel.org/r/1462969411-17735-1-git-send-email-bigeasy@...
Signed-off-by: Ingo Molnar <[hidden email]>
---
 kernel/sched/cpudeadline.c | 4 ++--
 kernel/sched/cpupri.c      | 4 ++--
 kernel/sched/deadline.c    | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c
index 5a75b08..5be5882 100644
--- a/kernel/sched/cpudeadline.c
+++ b/kernel/sched/cpudeadline.c
@@ -103,10 +103,10 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p,
  const struct sched_dl_entity *dl_se = &p->dl;
 
  if (later_mask &&
-    cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) {
+    cpumask_and(later_mask, cp->free_cpus, tsk_cpus_allowed(p))) {
  best_cpu = cpumask_any(later_mask);
  goto out;
- } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) &&
+ } else if (cpumask_test_cpu(cpudl_maximum(cp), tsk_cpus_allowed(p)) &&
  dl_time_before(dl_se->deadline, cp->elements[0].dl)) {
  best_cpu = cpudl_maximum(cp);
  if (later_mask)
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index 981fcd7..11e9705 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -103,11 +103,11 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p,
  if (skip)
  continue;
 
- if (cpumask_any_and(&p->cpus_allowed, vec->mask) >= nr_cpu_ids)
+ if (cpumask_any_and(tsk_cpus_allowed(p), vec->mask) >= nr_cpu_ids)
  continue;
 
  if (lowest_mask) {
- cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask);
+ cpumask_and(lowest_mask, tsk_cpus_allowed(p), vec->mask);
 
  /*
  * We have to ensure that we have at least one bit
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 0ac6c84..4c9b4ee 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1393,7 +1393,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq)
  if (double_lock_balance(rq, later_rq)) {
  if (unlikely(task_rq(task) != rq ||
      !cpumask_test_cpu(later_rq->cpu,
-                       &task->cpus_allowed) ||
+       tsk_cpus_allowed(task)) ||
      task_running(rq, task) ||
      !dl_task(task) ||
      !task_on_rq_queued(task))) {
Reply | Threaded
Open this post in threaded view
|

[tip:sched/core] sched/core: Provide a tsk_nr_cpus_allowed() helper

tip-bot for Peter Zijlstra
In reply to this post by Sebastian Andrzej Siewior-4
Commit-ID:  50605ffbdaf6d7ccab70d4631fd8347fc78af14f
Gitweb:     http://git.kernel.org/tip/50605ffbdaf6d7ccab70d4631fd8347fc78af14f
Author:     Thomas Gleixner <[hidden email]>
AuthorDate: Wed, 11 May 2016 14:23:31 +0200
Committer:  Ingo Molnar <[hidden email]>
CommitDate: Thu, 12 May 2016 09:55:36 +0200

sched/core: Provide a tsk_nr_cpus_allowed() helper

tsk_nr_cpus_allowed() is an accessor for task->nr_cpus_allowed which allows
us to change the representation of ->nr_cpus_allowed if required.

Signed-off-by: Thomas Gleixner <[hidden email]>
Signed-off-by: Sebastian Andrzej Siewior <[hidden email]>
Signed-off-by: Peter Zijlstra (Intel) <[hidden email]>
Cc: Linus Torvalds <[hidden email]>
Cc: Mike Galbraith <[hidden email]>
Cc: Peter Zijlstra <[hidden email]>
Cc: [hidden email]
Link: http://lkml.kernel.org/r/1462969411-17735-2-git-send-email-bigeasy@...
Signed-off-by: Ingo Molnar <[hidden email]>
---
 include/linux/sched.h   |  5 +++++
 kernel/sched/core.c     |  2 +-
 kernel/sched/deadline.c | 28 ++++++++++++++--------------
 kernel/sched/rt.c       | 24 ++++++++++++------------
 4 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index f8fea8a..38526b6 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1930,6 +1930,11 @@ extern int arch_task_struct_size __read_mostly;
 /* Future-safe accessor for struct task_struct's cpus_allowed. */
 #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
 
+static inline int tsk_nr_cpus_allowed(struct task_struct *p)
+{
+ return p->nr_cpus_allowed;
+}
+
 #define TNF_MIGRATED 0x01
 #define TNF_NO_GROUP 0x02
 #define TNF_SHARED 0x04
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 6f6962a..404c078 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1585,7 +1585,7 @@ int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags)
 {
  lockdep_assert_held(&p->pi_lock);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  cpu = p->sched_class->select_task_rq(p, cpu, sd_flags, wake_flags);
  else
  cpu = cpumask_any(tsk_cpus_allowed(p));
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 4c9b4ee..fcb7f02 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -134,7 +134,7 @@ static void inc_dl_migration(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
 {
  struct task_struct *p = dl_task_of(dl_se);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  dl_rq->dl_nr_migratory++;
 
  update_dl_migration(dl_rq);
@@ -144,7 +144,7 @@ static void dec_dl_migration(struct sched_dl_entity *dl_se, struct dl_rq *dl_rq)
 {
  struct task_struct *p = dl_task_of(dl_se);
 
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  dl_rq->dl_nr_migratory--;
 
  update_dl_migration(dl_rq);
@@ -966,7 +966,7 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags)
 
  enqueue_dl_entity(&p->dl, pi_se, flags);
 
- if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
+ if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_dl_task(rq, p);
 }
 
@@ -1040,9 +1040,9 @@ select_task_rq_dl(struct task_struct *p, int cpu, int sd_flag, int flags)
  * try to make it stay here, it might be important.
  */
  if (unlikely(dl_task(curr)) &&
-    (curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(curr) < 2 ||
      !dl_entity_preempt(&p->dl, &curr->dl)) &&
-    (p->nr_cpus_allowed > 1)) {
+    (tsk_nr_cpus_allowed(p) > 1)) {
  int target = find_later_rq(p);
 
  if (target != -1 &&
@@ -1063,7 +1063,7 @@ static void check_preempt_equal_dl(struct rq *rq, struct task_struct *p)
  * Current can't be migrated, useless to reschedule,
  * let's hope p can move out.
  */
- if (rq->curr->nr_cpus_allowed == 1 ||
+ if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
     cpudl_find(&rq->rd->cpudl, rq->curr, NULL) == -1)
  return;
 
@@ -1071,7 +1071,7 @@ static void check_preempt_equal_dl(struct rq *rq, struct task_struct *p)
  * p is migratable, so let's not schedule it and
  * see if it is pushed or pulled somewhere else.
  */
- if (p->nr_cpus_allowed != 1 &&
+ if (tsk_nr_cpus_allowed(p) != 1 &&
     cpudl_find(&rq->rd->cpudl, p, NULL) != -1)
  return;
 
@@ -1186,7 +1186,7 @@ static void put_prev_task_dl(struct rq *rq, struct task_struct *p)
 {
  update_curr_dl(rq);
 
- if (on_dl_rq(&p->dl) && p->nr_cpus_allowed > 1)
+ if (on_dl_rq(&p->dl) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_dl_task(rq, p);
 }
 
@@ -1287,7 +1287,7 @@ static int find_later_rq(struct task_struct *task)
  if (unlikely(!later_mask))
  return -1;
 
- if (task->nr_cpus_allowed == 1)
+ if (tsk_nr_cpus_allowed(task) == 1)
  return -1;
 
  /*
@@ -1433,7 +1433,7 @@ static struct task_struct *pick_next_pushable_dl_task(struct rq *rq)
 
  BUG_ON(rq->cpu != task_cpu(p));
  BUG_ON(task_current(rq, p));
- BUG_ON(p->nr_cpus_allowed <= 1);
+ BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
 
  BUG_ON(!task_on_rq_queued(p));
  BUG_ON(!dl_task(p));
@@ -1472,7 +1472,7 @@ retry:
  */
  if (dl_task(rq->curr) &&
     dl_time_before(next_task->dl.deadline, rq->curr->dl.deadline) &&
-    rq->curr->nr_cpus_allowed > 1) {
+    tsk_nr_cpus_allowed(rq->curr) > 1) {
  resched_curr(rq);
  return 0;
  }
@@ -1619,9 +1619,9 @@ static void task_woken_dl(struct rq *rq, struct task_struct *p)
 {
  if (!task_running(rq, p) &&
     !test_tsk_need_resched(rq->curr) &&
-    p->nr_cpus_allowed > 1 &&
+    tsk_nr_cpus_allowed(p) > 1 &&
     dl_task(rq->curr) &&
-    (rq->curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
      !dl_entity_preempt(&p->dl, &rq->curr->dl))) {
  push_dl_tasks(rq);
  }
@@ -1725,7 +1725,7 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
 
  if (task_on_rq_queued(p) && rq->curr != p) {
 #ifdef CONFIG_SMP
- if (p->nr_cpus_allowed > 1 && rq->dl.overloaded)
+ if (tsk_nr_cpus_allowed(p) > 1 && rq->dl.overloaded)
  queue_push_tasks(rq);
 #else
  if (dl_task(rq->curr))
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 67afa06..d5690b7 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -334,7 +334,7 @@ static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
  rt_rq = &rq_of_rt_rq(rt_rq)->rt;
 
  rt_rq->rt_nr_total++;
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  rt_rq->rt_nr_migratory++;
 
  update_rt_migration(rt_rq);
@@ -351,7 +351,7 @@ static void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq)
  rt_rq = &rq_of_rt_rq(rt_rq)->rt;
 
  rt_rq->rt_nr_total--;
- if (p->nr_cpus_allowed > 1)
+ if (tsk_nr_cpus_allowed(p) > 1)
  rt_rq->rt_nr_migratory--;
 
  update_rt_migration(rt_rq);
@@ -1324,7 +1324,7 @@ enqueue_task_rt(struct rq *rq, struct task_struct *p, int flags)
 
  enqueue_rt_entity(rt_se, flags);
 
- if (!task_current(rq, p) && p->nr_cpus_allowed > 1)
+ if (!task_current(rq, p) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_task(rq, p);
 }
 
@@ -1413,7 +1413,7 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
  * will have to sort it out.
  */
  if (curr && unlikely(rt_task(curr)) &&
-    (curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(curr) < 2 ||
      curr->prio <= p->prio)) {
  int target = find_lowest_rq(p);
 
@@ -1437,7 +1437,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
  * Current can't be migrated, useless to reschedule,
  * let's hope p can move out.
  */
- if (rq->curr->nr_cpus_allowed == 1 ||
+ if (tsk_nr_cpus_allowed(rq->curr) == 1 ||
     !cpupri_find(&rq->rd->cpupri, rq->curr, NULL))
  return;
 
@@ -1445,7 +1445,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
  * p is migratable, so let's not schedule it and
  * see if it is pushed or pulled somewhere else.
  */
- if (p->nr_cpus_allowed != 1
+ if (tsk_nr_cpus_allowed(p) != 1
     && cpupri_find(&rq->rd->cpupri, p, NULL))
  return;
 
@@ -1579,7 +1579,7 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p)
  * The previous task needs to be made eligible for pushing
  * if it is still active
  */
- if (on_rt_rq(&p->rt) && p->nr_cpus_allowed > 1)
+ if (on_rt_rq(&p->rt) && tsk_nr_cpus_allowed(p) > 1)
  enqueue_pushable_task(rq, p);
 }
 
@@ -1629,7 +1629,7 @@ static int find_lowest_rq(struct task_struct *task)
  if (unlikely(!lowest_mask))
  return -1;
 
- if (task->nr_cpus_allowed == 1)
+ if (tsk_nr_cpus_allowed(task) == 1)
  return -1; /* No other targets possible */
 
  if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
@@ -1762,7 +1762,7 @@ static struct task_struct *pick_next_pushable_task(struct rq *rq)
 
  BUG_ON(rq->cpu != task_cpu(p));
  BUG_ON(task_current(rq, p));
- BUG_ON(p->nr_cpus_allowed <= 1);
+ BUG_ON(tsk_nr_cpus_allowed(p) <= 1);
 
  BUG_ON(!task_on_rq_queued(p));
  BUG_ON(!rt_task(p));
@@ -2122,9 +2122,9 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p)
 {
  if (!task_running(rq, p) &&
     !test_tsk_need_resched(rq->curr) &&
-    p->nr_cpus_allowed > 1 &&
+    tsk_nr_cpus_allowed(p) > 1 &&
     (dl_task(rq->curr) || rt_task(rq->curr)) &&
-    (rq->curr->nr_cpus_allowed < 2 ||
+    (tsk_nr_cpus_allowed(rq->curr) < 2 ||
      rq->curr->prio <= p->prio))
  push_rt_tasks(rq);
 }
@@ -2197,7 +2197,7 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
  */
  if (task_on_rq_queued(p) && rq->curr != p) {
 #ifdef CONFIG_SMP
- if (p->nr_cpus_allowed > 1 && rq->rt.overloaded)
+ if (tsk_nr_cpus_allowed(p) > 1 && rq->rt.overloaded)
  queue_push_tasks(rq);
 #else
  if (p->prio < rq->curr->prio)