Commit 93ee3852 authored by Linus Walleij's avatar Linus Walleij Committed by Russell King (Oracle)
Browse files

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: d31e23af ("ARM: mm: make vmalloc_seq handling SMP safe")
Suggested-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
parent 44e9a3bb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ void __check_vmalloc_seq(struct mm_struct *mm)
	int seq;

	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);
		if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) {
			unsigned long start =