mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 16:47:42 +00:00
s390/bear: Convert cpu_has_bear() to cpu feature function
Get rid of the cpu_has_bear jump label and convert cpu_has_bear() to a cpu feature function using test_facility() and with that use a static branch. Reviewed-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
db14f78ecb
commit
841f35a08d
@ -22,6 +22,7 @@ enum {
|
||||
|
||||
int cpu_have_feature(unsigned int nr);
|
||||
|
||||
#define cpu_has_bear() test_facility(193)
|
||||
#define cpu_has_edat1() test_facility(8)
|
||||
#define cpu_has_edat2() test_facility(78)
|
||||
#define cpu_has_gs() test_facility(133)
|
||||
|
@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/cpufeature.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/proc_fs.h>
|
||||
@ -150,7 +151,7 @@ void noinstr do_io_irq(struct pt_regs *regs)
|
||||
|
||||
if (user_mode(regs)) {
|
||||
update_timer_sys();
|
||||
if (static_branch_likely(&cpu_has_bear))
|
||||
if (cpu_has_bear())
|
||||
current->thread.last_break = regs->last_break;
|
||||
}
|
||||
|
||||
@ -186,7 +187,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)
|
||||
|
||||
if (user_mode(regs)) {
|
||||
update_timer_sys();
|
||||
if (static_branch_likely(&cpu_has_bear))
|
||||
if (cpu_has_bear())
|
||||
current->thread.last_break = regs->last_break;
|
||||
}
|
||||
|
||||
|
@ -181,8 +181,6 @@ unsigned long __bootdata_preserved(MODULES_END);
|
||||
struct lowcore *lowcore_ptr[NR_CPUS];
|
||||
EXPORT_SYMBOL(lowcore_ptr);
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(cpu_has_bear);
|
||||
|
||||
/*
|
||||
* The Write Back bit position in the physaddr is given by the SLPC PCI.
|
||||
* Leaving the mask zero always uses write through which is safe
|
||||
@ -982,10 +980,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
numa_setup();
|
||||
smp_detect_cpus();
|
||||
topology_init_early();
|
||||
|
||||
if (test_facility(193))
|
||||
static_branch_enable(&cpu_has_bear);
|
||||
|
||||
setup_protection_map();
|
||||
/*
|
||||
* Create kernel page tables.
|
||||
|
@ -12,6 +12,7 @@
|
||||
* platform.
|
||||
*/
|
||||
|
||||
#include <linux/cpufeature.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mm.h>
|
||||
@ -127,7 +128,7 @@ void noinstr __do_syscall(struct pt_regs *regs, int per_trap)
|
||||
regs->psw = get_lowcore()->svc_old_psw;
|
||||
regs->int_code = get_lowcore()->svc_int_code;
|
||||
update_timer_sys();
|
||||
if (static_branch_likely(&cpu_has_bear))
|
||||
if (cpu_has_bear())
|
||||
current->thread.last_break = regs->last_break;
|
||||
|
||||
local_irq_enable();
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
#include "asm/irqflags.h"
|
||||
#include "asm/ptrace.h"
|
||||
#include <linux/cpufeature.h>
|
||||
#include <linux/kprobes.h>
|
||||
#include <linux/kdebug.h>
|
||||
#include <linux/randomize_kstack.h>
|
||||
@ -341,7 +342,7 @@ void noinstr __do_pgm_check(struct pt_regs *regs)
|
||||
|
||||
if (user_mode(regs)) {
|
||||
update_timer_sys();
|
||||
if (!static_branch_likely(&cpu_has_bear)) {
|
||||
if (!cpu_has_bear()) {
|
||||
if (regs->last_break < 4096)
|
||||
regs->last_break = 1;
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
|
||||
* in which case we have two lpswe instructions in lowcore that need
|
||||
* to be executable.
|
||||
*/
|
||||
if (addr == PAGE_SIZE && (nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear)))
|
||||
if (addr == PAGE_SIZE && (nospec_uses_trampoline() || !cpu_has_bear()))
|
||||
return;
|
||||
WARN_ONCE(IS_ENABLED(CONFIG_DEBUG_WX),
|
||||
"s390/mm: Found insecure W+X mapping at address %pS\n",
|
||||
@ -178,7 +178,7 @@ bool ptdump_check_wx(void)
|
||||
return false;
|
||||
} else {
|
||||
pr_info("Checked W+X mappings: passed, no %sW+X pages found\n",
|
||||
(nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear)) ?
|
||||
(nospec_uses_trampoline() || !cpu_has_bear()) ?
|
||||
"unexpected " : "");
|
||||
|
||||
return true;
|
||||
|
@ -660,7 +660,7 @@ void __init vmem_map_init(void)
|
||||
* prefix page is used to return to the previous context with
|
||||
* an LPSWE instruction and therefore must be executable.
|
||||
*/
|
||||
if (!static_key_enabled(&cpu_has_bear))
|
||||
if (!cpu_has_bear())
|
||||
set_memory_x(0, 1);
|
||||
if (debug_pagealloc_enabled())
|
||||
__set_memory_4k(__va(0), absolute_pointer(__va(0)) + ident_map_size);
|
||||
|
Loading…
x
Reference in New Issue
Block a user