mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 02:36:21 +00:00
ARM: 9431/1: mm: Pair atomic_set_release() with _read_acquire()
The code for syncing vmalloc memory PGD pointers is using atomic_read() in pair with atomic_set_release() but the proper pairing is atomic_read_acquire() paired with atomic_set_release(). This is done to clearly instruct the compiler to not reorder the memcpy() or similar calls inside the section so that we do not observe changes to init_mm. memcpy() calls should be identified by the compiler as having unpredictable side effects, but let's try to be on the safe side. Cc: stable@vger.kernel.org Fixes: d31e23aff011 ("ARM: mm: make vmalloc_seq handling SMP safe") Suggested-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
44e9a3bb76
commit
93ee385254
@ -141,7 +141,7 @@ void __check_vmalloc_seq(struct mm_struct *mm)
|
|||||||
int seq;
|
int seq;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
seq = atomic_read(&init_mm.context.vmalloc_seq);
|
seq = atomic_read_acquire(&init_mm.context.vmalloc_seq);
|
||||||
memcpy_pgd(mm, VMALLOC_START, VMALLOC_END);
|
memcpy_pgd(mm, VMALLOC_START, VMALLOC_END);
|
||||||
if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
|
if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
|
||||||
unsigned long start =
|
unsigned long start =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user