• Paul Menage's avatar
    Fix cpusets update_cpumask · 8707d8b8
    Paul Menage authored
    Cause writes to cpuset "cpus" file to update cpus_allowed for member tasks:
    
    - collect batches of tasks under tasklist_lock and then call
      set_cpus_allowed() on them outside the lock (since this can sleep).
    
    - add a simple generic priority heap type to allow efficient collection
      of batches of tasks to be processed without duplicating or missing any
      tasks in subsequent batches.
    
    - make "cpus" file update a no-op if the mask hasn't changed
    
    - fix race between update_cpumask() and sched_setaffinity() by making
      sched_setaffinity() post-check that it's not running on any cpus outside
      cpuset_cpus_allowed().
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: default avatarPaul Menage <menage@google.com>
    Cc: Paul Jackson <pj@sgi.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Cc: Cedric Le Goater <clg@fr.ibm.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Serge Hallyn <serue@us.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8707d8b8
cpuset.c 66.9 KB