diff options
| author | Sebastian Andrzej Siewior <[email protected]> | 2019-04-23 14:26:36 +0000 |
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2019-06-03 09:49:37 +0000 |
| commit | 3bd3706251ee8ab67e69d9340ac2abdca217e733 (patch) | |
| tree | 4431aa630d095905d840ace6a0b86e266395f71a /init/init_task.c | |
| parent | Linux 5.2-rc3 (diff) | |
| download | kernel-3bd3706251ee8ab67e69d9340ac2abdca217e733.tar.gz kernel-3bd3706251ee8ab67e69d9340ac2abdca217e733.zip | |
sched/core: Provide a pointer to the valid CPU mask
In commit:
4b53a3412d66 ("sched/core: Remove the tsk_nr_cpus_allowed() wrapper")
the tsk_nr_cpus_allowed() wrapper was removed. There was not
much difference in !RT but in RT we used this to implement
migrate_disable(). Within a migrate_disable() section the CPU mask is
restricted to single CPU while the "normal" CPU mask remains untouched.
As an alternative implementation Ingo suggested to use:
struct task_struct {
const cpumask_t *cpus_ptr;
cpumask_t cpus_mask;
};
with
t->cpus_ptr = &t->cpus_mask;
In -RT we then can switch the cpus_ptr to:
t->cpus_ptr = &cpumask_of(task_cpu(p));
in a migration disabled region. The rules are simple:
- Code that 'uses' ->cpus_allowed would use the pointer.
- Code that 'modifies' ->cpus_allowed would use the direct mask.
Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Reviewed-by: Thomas Gleixner <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'init/init_task.c')
| -rw-r--r-- | init/init_task.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/init/init_task.c b/init/init_task.c index c70ef656d0f4..3c27c0efa316 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -72,7 +72,8 @@ struct task_struct init_task .static_prio = MAX_PRIO - 20, .normal_prio = MAX_PRIO - 20, .policy = SCHED_NORMAL, - .cpus_allowed = CPU_MASK_ALL, + .cpus_ptr = &init_task.cpus_mask, + .cpus_mask = CPU_MASK_ALL, .nr_cpus_allowed= NR_CPUS, .mm = NULL, .active_mm = &init_mm, |
