https://github.com/torvalds/linux
Revision f3eab7184ddcd4867cf42e3274ba24a66e1e093d authored by Steve Capper on 22 March 2015, 14:51:51 UTC, committed by Catalin Marinas on 24 March 2015, 18:02:55 UTC
this_cpu operations were implemented for arm64 in:
 5284e1b arm64: xchg: Implement cmpxchg_double
 f97fc81 arm64: percpu: Implement this_cpu operations

Unfortunately, it is possible for pre-emption to take place between
address generation and data access. This can lead to cases where data
is being manipulated by this_cpu for a different CPU than it was
called on. Which effectively breaks the spec.

This patch disables pre-emption for the this_cpu operations
guaranteeing that address generation and data manipulation take place
without a pre-emption in-between.

Fixes: 5284e1b4bc8a ("arm64: xchg: Implement cmpxchg_double")
Fixes: f97fc810798c ("arm64: percpu: Implement this_cpu operations")
Reported-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Steve Capper <steve.capper@linaro.org>
[catalin.marinas@arm.com: remove space after type cast]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent e53f21b
History
Tip revision: f3eab7184ddcd4867cf42e3274ba24a66e1e093d authored by Steve Capper on 22 March 2015, 14:51:51 UTC
arm64: percpu: Make this_cpu accessors pre-empt safe
Tip revision: f3eab71
File Mode Size
Kconfig -rw-r--r-- 3.2 KB
Makefile -rw-r--r-- 424 bytes
aops.c -rw-r--r-- 52.6 KB
aops.h -rw-r--r-- 3.9 KB
attrib.c -rw-r--r-- 89.7 KB
attrib.h -rw-r--r-- 4.2 KB
bitmap.c -rw-r--r-- 5.5 KB
bitmap.h -rw-r--r-- 3.5 KB
collate.c -rw-r--r-- 3.6 KB
collate.h -rw-r--r-- 1.7 KB
compress.c -rw-r--r-- 29.1 KB
debug.c -rw-r--r-- 4.8 KB
debug.h -rw-r--r-- 2.3 KB
dir.c -rw-r--r-- 51.8 KB
dir.h -rw-r--r-- 1.6 KB
endian.h -rw-r--r-- 2.2 KB
file.c -rw-r--r-- 66.2 KB
index.c -rw-r--r-- 14.8 KB
index.h -rw-r--r-- 5.5 KB
inode.c -rw-r--r-- 96.8 KB
inode.h -rw-r--r-- 11.1 KB
layout.h -rw-r--r-- 97.0 KB
lcnalloc.c -rw-r--r-- 32.4 KB
lcnalloc.h -rw-r--r-- 5.7 KB
logfile.c -rw-r--r-- 28.2 KB
logfile.h -rw-r--r-- 13.5 KB
malloc.h -rw-r--r-- 3.1 KB
mft.c -rw-r--r-- 99.5 KB
mft.h -rw-r--r-- 4.0 KB
mst.c -rw-r--r-- 6.9 KB
namei.c -rw-r--r-- 14.1 KB
ntfs.h -rw-r--r-- 5.0 KB
quota.c -rw-r--r-- 3.6 KB
quota.h -rw-r--r-- 1.2 KB
runlist.c -rw-r--r-- 59.5 KB
runlist.h -rw-r--r-- 3.3 KB
super.c -rw-r--r-- 100.2 KB
sysctl.c -rw-r--r-- 2.3 KB
sysctl.h -rw-r--r-- 1.4 KB
time.h -rw-r--r-- 3.5 KB
types.h -rw-r--r-- 2.0 KB
unistr.c -rw-r--r-- 12.2 KB
upcase.c -rw-r--r-- 3.8 KB
usnjrnl.c -rw-r--r-- 2.7 KB
usnjrnl.h -rw-r--r-- 9.1 KB
volume.h -rw-r--r-- 6.8 KB

back to top