]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit - init/init_task.c
sched/core: Provide a pointer to the valid CPU mask
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 23 Apr 2019 14:26:36 +0000 (16:26 +0200)
committerIngo Molnar <mingo@kernel.org>
Mon, 3 Jun 2019 09:49:37 +0000 (11:49 +0200)
commit3bd3706251ee8ab67e69d9340ac2abdca217e733
tree4431aa630d095905d840ace6a0b86e266395f71a
parentf2c7c76c5d0a443053e94adb9f0918fa2fb85c3a
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 <bigeasy@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20190423142636.14347-1-bigeasy@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
23 files changed:
arch/ia64/kernel/mca.c
arch/mips/include/asm/switch_to.h
arch/mips/kernel/mips-mt-fpaff.c
arch/mips/kernel/traps.c
arch/powerpc/platforms/cell/spufs/sched.c
arch/x86/kernel/cpu/resctrl/pseudo_lock.c
drivers/infiniband/hw/hfi1/affinity.c
drivers/infiniband/hw/hfi1/sdma.c
drivers/infiniband/hw/qib/qib_file_ops.c
fs/proc/array.c
include/linux/sched.h
init/init_task.c
kernel/cgroup/cpuset.c
kernel/fork.c
kernel/sched/core.c
kernel/sched/cpudeadline.c
kernel/sched/cpupri.c
kernel/sched/deadline.c
kernel/sched/fair.c
kernel/sched/rt.c
kernel/trace/trace_hwlat.c
lib/smp_processor_id.c
samples/trace_events/trace-events-sample.c