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>
This commit is contained in:
committed by
Martin Schwidefsky
parent
dde709d136
commit
9e8df6daed
@@ -336,7 +336,7 @@ static inline void __load_psw(psw_t psw)
|
|||||||
* Set PSW mask to specified value, while leaving the
|
* Set PSW mask to specified value, while leaving the
|
||||||
* PSW addr pointing to the next instruction.
|
* 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;
|
unsigned long addr;
|
||||||
psw_t psw;
|
psw_t psw;
|
||||||
|
|||||||
@@ -804,6 +804,8 @@ static void smp_init_secondary(void)
|
|||||||
{
|
{
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
|
S390_lowcore.last_update_clock = get_tod_clock();
|
||||||
|
restore_access_regs(S390_lowcore.access_regs_save_area);
|
||||||
cpu_init();
|
cpu_init();
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
init_cpu_timer();
|
init_cpu_timer();
|
||||||
@@ -823,14 +825,12 @@ static void smp_init_secondary(void)
|
|||||||
/*
|
/*
|
||||||
* Activate a secondary processor.
|
* 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_stack = (unsigned long) restart_stack;
|
||||||
S390_lowcore.restart_fn = (unsigned long) do_restart;
|
S390_lowcore.restart_fn = (unsigned long) do_restart;
|
||||||
S390_lowcore.restart_data = 0;
|
S390_lowcore.restart_data = 0;
|
||||||
S390_lowcore.restart_source = -1UL;
|
S390_lowcore.restart_source = -1UL;
|
||||||
restore_access_regs(S390_lowcore.access_regs_save_area);
|
|
||||||
__ctl_load(S390_lowcore.cregs_save_area, 0, 15);
|
__ctl_load(S390_lowcore.cregs_save_area, 0, 15);
|
||||||
__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
|
__load_psw_mask(PSW_KERNEL_BITS | PSW_MASK_DAT);
|
||||||
CALL_ON_STACK(smp_init_secondary, S390_lowcore.kernel_stack, 0);
|
CALL_ON_STACK(smp_init_secondary, S390_lowcore.kernel_stack, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user