mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

The nospec implementation is deeply integrated into the alternatives code: only for nospec an alternative facility list is implemented and used by the alternative code, while it is modified by nospec specific needs. Push down the nospec alternative handling into the nospec by introducing a new alternative type and a specific nospec callback to decide if alternatives should be applied. Also introduce a new global nobp variable which together with facility 82 can be used to decide if nobp is enabled or not. Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> Tested-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_S390_EXPOLINE_H
|
|
#define _ASM_S390_EXPOLINE_H
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#include <linux/types.h>
|
|
#include <asm/facility.h>
|
|
|
|
extern int nospec_disable;
|
|
extern int nobp;
|
|
|
|
static inline bool nobp_enabled(void)
|
|
{
|
|
if (__is_defined(__DECOMPRESSOR))
|
|
return false;
|
|
return nobp && test_facility(82);
|
|
}
|
|
|
|
void nospec_init_branches(void);
|
|
void nospec_auto_detect(void);
|
|
void nospec_revert(s32 *start, s32 *end);
|
|
|
|
static inline bool nospec_uses_trampoline(void)
|
|
{
|
|
return __is_defined(CC_USING_EXPOLINE) && !nospec_disable;
|
|
}
|
|
|
|
#ifdef CONFIG_EXPOLINE_EXTERN
|
|
|
|
void __s390_indirect_jump_r1(void);
|
|
void __s390_indirect_jump_r2(void);
|
|
void __s390_indirect_jump_r3(void);
|
|
void __s390_indirect_jump_r4(void);
|
|
void __s390_indirect_jump_r5(void);
|
|
void __s390_indirect_jump_r6(void);
|
|
void __s390_indirect_jump_r7(void);
|
|
void __s390_indirect_jump_r8(void);
|
|
void __s390_indirect_jump_r9(void);
|
|
void __s390_indirect_jump_r10(void);
|
|
void __s390_indirect_jump_r11(void);
|
|
void __s390_indirect_jump_r12(void);
|
|
void __s390_indirect_jump_r13(void);
|
|
void __s390_indirect_jump_r14(void);
|
|
void __s390_indirect_jump_r15(void);
|
|
|
|
#endif
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* _ASM_S390_EXPOLINE_H */
|