mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 00:53:40 +00:00
a7223f5bfc
Commit7053f80d96
("powerpc/64: Prevent stack protection in early boot") introduced a couple of uses of __attribute__((optimize)) with function scope, to disable the stack protector in some early boot code. Unfortunately, and this is documented in the GCC man pages [0], overriding function attributes for optimization is broken, and is only supported for debug scenarios, not for production: the problem appears to be that setting GCC -f flags using this method will cause it to forget about some or all other optimization settings that have been applied. So the only safe way to disable the stack protector is to disable it for the entire source file. [0] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html Fixes:7053f80d96
("powerpc/64: Prevent stack protection in early boot") Signed-off-by: Ard Biesheuvel <ardb@kernel.org> [mpe: Drop one remaining use of __nostackprotector, reported by snowpatch] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20201028080433.26799-1-ardb@kernel.org
68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Prototypes for functions that are shared between setup_(32|64|common).c
|
|
*
|
|
* Copyright 2016 Michael Ellerman, IBM Corporation.
|
|
*/
|
|
|
|
#ifndef __ARCH_POWERPC_KERNEL_SETUP_H
|
|
#define __ARCH_POWERPC_KERNEL_SETUP_H
|
|
|
|
void initialize_cache_info(void);
|
|
void irqstack_early_init(void);
|
|
|
|
#ifdef CONFIG_PPC32
|
|
void setup_power_save(void);
|
|
#else
|
|
static inline void setup_power_save(void) { };
|
|
#endif
|
|
|
|
#if defined(CONFIG_PPC64) && defined(CONFIG_SMP)
|
|
void check_smt_enabled(void);
|
|
#else
|
|
static inline void check_smt_enabled(void) { };
|
|
#endif
|
|
|
|
#if defined(CONFIG_PPC_BOOK3E) && defined(CONFIG_SMP)
|
|
void setup_tlb_core_data(void);
|
|
#else
|
|
static inline void setup_tlb_core_data(void) { };
|
|
#endif
|
|
|
|
#if defined(CONFIG_PPC_BOOK3E) || defined(CONFIG_BOOKE) || defined(CONFIG_40x)
|
|
void exc_lvl_early_init(void);
|
|
#else
|
|
static inline void exc_lvl_early_init(void) { };
|
|
#endif
|
|
|
|
#if defined(CONFIG_PPC64) || defined(CONFIG_VMAP_STACK)
|
|
void emergency_stack_init(void);
|
|
#else
|
|
static inline void emergency_stack_init(void) { };
|
|
#endif
|
|
|
|
#ifdef CONFIG_PPC64
|
|
u64 ppc64_bolted_size(void);
|
|
|
|
/* Default SPR values from firmware/kexec */
|
|
extern unsigned long spr_default_dscr;
|
|
#endif
|
|
|
|
/*
|
|
* Having this in kvm_ppc.h makes include dependencies too
|
|
* tricky to solve for setup-common.c so have it here.
|
|
*/
|
|
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
|
void kvm_cma_reserve(void);
|
|
#else
|
|
static inline void kvm_cma_reserve(void) { };
|
|
#endif
|
|
|
|
#ifdef CONFIG_TAU
|
|
u32 cpu_temp(unsigned long cpu);
|
|
u32 cpu_temp_both(unsigned long cpu);
|
|
u32 tau_interrupts(unsigned long cpu);
|
|
#endif /* CONFIG_TAU */
|
|
|
|
#endif /* __ARCH_POWERPC_KERNEL_SETUP_H */
|