• Linus Torvalds's avatar
    vmstat: explicitly schedule per-cpu work on the CPU we need it to run on · 4b392570
    Linus Torvalds authored
    commit 176bed1d upstream.
    
    The vmstat code uses "schedule_delayed_work_on()" to do the initial
    startup of the delayed work on the right CPU, but then once it was
    started it would use the non-cpu-specific "schedule_delayed_work()" to
    re-schedule it on that CPU.
    
    That just happened to schedule it on the same CPU historically (well, in
    almost all situations), but the code _requires_ this work to be per-cpu,
    and should say so explicitly rather than depend on the non-cpu-specific
    scheduling to schedule on the current CPU.
    
    The timer code is being changed to not be as single-minded in always
    running things on the calling CPU.
    
    See also commit 874bbfe6 ("workqueue: make sure delayed work run in
    local cpu") that for now maintains the local CPU guarantees just in case
    there are other broken users that depended on the accidental behavior.
    
    js: 3.12 backport
    
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Mike Galbraith <mgalbraith@suse.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    [ kamal: backport to 3.16-stable: use queue_delayed_work_on() ]
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    4b392570
vmstat.c 35.5 KB