• T
    sched: replace PF_THREAD_BOUND with PF_NO_SETAFFINITY · 14a40ffc
    Tejun Heo 提交于
    PF_THREAD_BOUND was originally used to mark kernel threads which were
    bound to a specific CPU using kthread_bind() and a task with the flag
    set allows cpus_allowed modifications only to itself.  Workqueue is
    currently abusing it to prevent userland from meddling with
    cpus_allowed of workqueue workers.
    
    What we need is a flag to prevent userland from messing with
    cpus_allowed of certain kernel tasks.  In kernel, anyone can
    (incorrectly) squash the flag, and, for worker-type usages,
    restricting cpus_allowed modification to the task itself doesn't
    provide meaningful extra proection as other tasks can inject work
    items to the task anyway.
    
    This patch replaces PF_THREAD_BOUND with PF_NO_SETAFFINITY.
    sched_setaffinity() checks the flag and return -EINVAL if set.
    set_cpus_allowed_ptr() is no longer affected by the flag.
    
    This will allow simplifying workqueue worker CPU affinity management.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Acked-by: NIngo Molnar <mingo@kernel.org>
    Reviewed-by: NLai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    14a40ffc
workqueue.c 121.9 KB