aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/setup.c
diff options
context:
space:
mode:
authorSven Schnelle <svens@linux.ibm.com>2021-02-10 13:39:19 +0100
committerVasily Gorbik <gor@linux.ibm.com>2021-02-13 17:17:53 +0100
commit64985c3a223d15f151204b3aa37e587b9466378d (patch)
treed69076d3eb1e09285a65f1f1454519b1b5bd8f96 /arch/s390/kernel/setup.c
parents390: open code SWITCH_KERNEL macro (diff)
downloadlinux-dev-64985c3a223d15f151204b3aa37e587b9466378d.tar.xz
linux-dev-64985c3a223d15f151204b3aa37e587b9466378d.zip
s390: use WRITE_ONCE when re-allocating async stack
The code does: S390_lowcore.async_stack = new + STACK_INIT_OFFSET; But the compiler is free to first assign one value and add the other value later. If a IRQ would be coming in between these two operations, it would run with an invalid stack. Prevent this by using WRITE_ONCE. Signed-off-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r--arch/s390/kernel/setup.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index c7feda84edbb..6b004940c4dc 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -346,7 +346,7 @@ static int __init async_stack_realloc(void)
new = stack_alloc();
if (!new)
panic("Couldn't allocate async stack");
- S390_lowcore.async_stack = new + STACK_INIT_OFFSET;
+ WRITE_ONCE(S390_lowcore.async_stack, new + STACK_INIT_OFFSET);
free_pages(old, THREAD_SIZE_ORDER);
return 0;
}