summaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorVasily Gorbik <gor@linux.ibm.com>2017-11-20 12:13:52 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2018-10-09 11:21:26 +0200
commit9e8df6daed9e59153624e52aa4832ddaf39f1ae8 (patch)
treea8e09dfddde0eed16b6665d677d69b55422be560 /arch/s390
parentdde709d1361ab50d3b9f2824f72b4374f5582e84 (diff)
downloadlinux-9e8df6daed9e59153624e52aa4832ddaf39f1ae8.tar.bz2
s390/smp: kasan stack instrumentation support
smp_start_secondary function is called without DAT enabled. To avoid disabling kasan instrumentation for entire arch/s390/kernel/smp.c smp_start_secondary has been split in 2 parts. smp_start_secondary has instrumentation disabled, it does minimal setup and enables DAT. Then instrumentated __smp_start_secondary is called to do the rest. __load_psw_mask function instrumentation has been disabled as well to be able to call it from smp_start_secondary. Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/processor.h2
-rw-r--r--arch/s390/kernel/smp.c6
2 files changed, 4 insertions, 4 deletions
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 43494a014d5b..55956c96558c 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -336,7 +336,7 @@ static inline void __load_psw(psw_t psw)
* Set PSW mask to specified value, while leaving the
* PSW addr pointing to the next instruction.
*/
-static inline void __load_psw_mask(unsigned long mask)
+static __no_sanitize_address_or_inline void __load_psw_mask(unsigned long mask)
{
unsigned long addr;
psw_t psw;
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 032d98bfc60a..c98059faee46 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -804,6 +804,8 @@ static void smp_init_secondary(void)
{
int cpu = smp_processor_id();
+ S390_lowcore.last_update_clock = get_tod_clock();
+ restore_access_regs(S390_lowcore.access_regs_save_area);
cpu_init();
preempt_disable();
init_cpu_timer();
@@ -823,14 +825,12 @@ static void smp_init_secondary(void)
/*
* Activate a secondary processor.
*/
-static void smp_start_secondary(void *cpuvoid)
+static void __no_sanitize_address smp_start_secondary(void *cpuvoid)
{
- S390_lowcore.last_update_clock = get_tod_clock();
S390_lowcore.restart_stack = (unsigned long) restart_stack;
S390_lowcore.restart_fn = (unsigned long) do_restart;
S390_lowcore.restart_data = 0;
S390_lowcore.restart_source = -1UL;
- restore_access_regs(S390_lowcore.access_regs_save_area);
__ctl_load(S390_lowcore.cregs_save_area, 0, 15);
__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
CALL_ON_STACK(smp_init_secondary, S390_lowcore.kernel_stack, 0);