sched/core: Provide a pointer to the valid CPU mask
In commit: 4b53a341 ("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>
Showing
- arch/ia64/kernel/mca.c 1 addition, 1 deletionarch/ia64/kernel/mca.c
- arch/mips/include/asm/switch_to.h 2 additions, 2 deletionsarch/mips/include/asm/switch_to.h
- arch/mips/kernel/mips-mt-fpaff.c 1 addition, 1 deletionarch/mips/kernel/mips-mt-fpaff.c
- arch/mips/kernel/traps.c 3 additions, 3 deletionsarch/mips/kernel/traps.c
- arch/powerpc/platforms/cell/spufs/sched.c 1 addition, 1 deletionarch/powerpc/platforms/cell/spufs/sched.c
- arch/x86/kernel/cpu/resctrl/pseudo_lock.c 1 addition, 1 deletionarch/x86/kernel/cpu/resctrl/pseudo_lock.c
- drivers/infiniband/hw/hfi1/affinity.c 3 additions, 3 deletionsdrivers/infiniband/hw/hfi1/affinity.c
- drivers/infiniband/hw/hfi1/sdma.c 1 addition, 2 deletionsdrivers/infiniband/hw/hfi1/sdma.c
- drivers/infiniband/hw/qib/qib_file_ops.c 3 additions, 4 deletionsdrivers/infiniband/hw/qib/qib_file_ops.c
- fs/proc/array.c 2 additions, 2 deletionsfs/proc/array.c
- include/linux/sched.h 3 additions, 2 deletionsinclude/linux/sched.h
- init/init_task.c 2 additions, 1 deletioninit/init_task.c
- kernel/cgroup/cpuset.c 1 addition, 1 deletionkernel/cgroup/cpuset.c
- kernel/fork.c 2 additions, 0 deletionskernel/fork.c
- kernel/sched/core.c 20 additions, 20 deletionskernel/sched/core.c
- kernel/sched/cpudeadline.c 2 additions, 2 deletionskernel/sched/cpudeadline.c
- kernel/sched/cpupri.c 2 additions, 2 deletionskernel/sched/cpupri.c
- kernel/sched/deadline.c 3 additions, 3 deletionskernel/sched/deadline.c
- kernel/sched/fair.c 17 additions, 17 deletionskernel/sched/fair.c
- kernel/sched/rt.c 2 additions, 2 deletionskernel/sched/rt.c
Loading
Please register or sign in to comment