ARM: 9431/1: mm: Pair atomic_set_release() with _read_acquire()
commit93ee385254upstream. 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:d31e23aff0("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ef21187c06
commit
2c932d5c7a
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user