• Thomas Gleixner's avatar
    sparc/sysfs: Replace racy task affinity logic · ea875ec9
    Thomas Gleixner authored
    The mmustat_enable sysfs file accessor functions must run code on the
    target CPU. This is achieved by temporarily setting the affinity of the
    calling user space thread to the requested CPU and reset it to the original
    affinity afterwards.
    
    That's racy vs. concurrent affinity settings for that thread resulting in
    code executing on the wrong CPU and overwriting the new affinity setting.
    
    Replace it by using work_on_cpu() which guarantees to run the code on the
    requested CPU.
    
    Protection against CPU hotplug is not required as the open sysfs file
    already prevents the removal from the CPU offline callback. Using the
    hotplug protected version would actually be wrong because it would deadlock
    against a CPU hotplug operation of the CPU associated to the sysfs file in
    progress.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
    Cc: fenghua.yu@intel.com
    Cc: tony.luck@intel.com
    Cc: herbert@gondor.apana.org.au
    Cc: rjw@rjwysocki.net
    Cc: peterz@infradead.org
    Cc: benh@kernel.crashing.org
    Cc: bigeasy@linutronix.de
    Cc: jiangshanlai@gmail.com
    Cc: sparclinux@vger.kernel.org
    Cc: viresh.kumar@linaro.org
    Cc: mpe@ellerman.id.au
    Cc: tj@kernel.org
    Cc: lenb@kernel.org
    Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1704131001270.2408@nanosSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    ea875ec9
sysfs.c 7.91 KB