s390/lowcore: Convert relocated lowcore alternative to machine feature
Convert the explicit relocated lowcore alternative type to a more generic machine feature. This only reduces the number of alternative types, but has no impact on code generation. 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:
committed by
Vasily Gorbik
parent
b7e81efc24
commit
e4da8249cf
@@ -5,6 +5,7 @@
|
||||
#include <linux/pgtable.h>
|
||||
#include <asm/abs_lowcore.h>
|
||||
#include <asm/page-states.h>
|
||||
#include <asm/machine.h>
|
||||
#include <asm/ebcdic.h>
|
||||
#include <asm/sclp.h>
|
||||
#include <asm/sections.h>
|
||||
@@ -312,7 +313,7 @@ void parse_boot_command_line(void)
|
||||
}
|
||||
#endif
|
||||
if (!strcmp(param, "relocate_lowcore") && test_facility(193))
|
||||
relocate_lowcore = 1;
|
||||
set_machine_feature(MFEATURE_LOWCORE);
|
||||
if (!strcmp(param, "earlyprintk"))
|
||||
boot_earlyprintk = true;
|
||||
if (!strcmp(param, "debug"))
|
||||
|
||||
@@ -34,7 +34,6 @@ unsigned long __bootdata_preserved(max_mappable);
|
||||
unsigned long __bootdata_preserved(page_noexec_mask);
|
||||
unsigned long __bootdata_preserved(segment_noexec_mask);
|
||||
unsigned long __bootdata_preserved(region_noexec_mask);
|
||||
int __bootdata_preserved(relocate_lowcore);
|
||||
|
||||
u64 __bootdata_preserved(stfle_fac_list[16]);
|
||||
struct oldmem_data __bootdata_preserved(oldmem_data);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <asm/ctlreg.h>
|
||||
#include <asm/physmem_info.h>
|
||||
#include <asm/maccess.h>
|
||||
#include <asm/machine.h>
|
||||
#include <asm/abs_lowcore.h>
|
||||
#include "decompressor.h"
|
||||
#include "boot.h"
|
||||
@@ -517,7 +518,7 @@ void setup_vmem(unsigned long kernel_start, unsigned long kernel_end, unsigned l
|
||||
__arch_set_page_dat((void *)swapper_pg_dir, 1UL << CRST_ALLOC_ORDER);
|
||||
__arch_set_page_dat((void *)invalid_pg_dir, 1UL << CRST_ALLOC_ORDER);
|
||||
|
||||
if (relocate_lowcore)
|
||||
if (machine_has_relocated_lowcore())
|
||||
lowcore_address = LOWCORE_ALT_ADDRESS;
|
||||
|
||||
/*
|
||||
|
||||
@@ -25,11 +25,4 @@ static inline void put_abs_lowcore(struct lowcore *lc)
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
extern int relocate_lowcore;
|
||||
|
||||
static inline int have_relocated_lowcore(void)
|
||||
{
|
||||
return relocate_lowcore;
|
||||
}
|
||||
|
||||
#endif /* _ASM_S390_ABS_LOWCORE_H */
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#define ALT_TYPE_FACILITY 0
|
||||
#define ALT_TYPE_FEATURE 1
|
||||
#define ALT_TYPE_SPEC 2
|
||||
#define ALT_TYPE_LOWCORE 3
|
||||
|
||||
#define ALT_DATA_SHIFT 0
|
||||
#define ALT_TYPE_SHIFT 20
|
||||
@@ -52,9 +51,6 @@
|
||||
ALT_TYPE_SPEC << ALT_TYPE_SHIFT | \
|
||||
(facility) << ALT_DATA_SHIFT)
|
||||
|
||||
#define ALT_LOWCORE (ALT_CTX_EARLY << ALT_CTX_SHIFT | \
|
||||
ALT_TYPE_LOWCORE << ALT_TYPE_SHIFT)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define _ASM_S390_LOWCORE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/machine.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/ctlreg.h>
|
||||
#include <asm/cpu.h>
|
||||
@@ -222,7 +223,7 @@ static __always_inline struct lowcore *get_lowcore(void)
|
||||
|
||||
if (__is_defined(__DECOMPRESSOR))
|
||||
return NULL;
|
||||
asm(ALTERNATIVE("llilh %[lc],0", "llilh %[lc],%[alt]", ALT_LOWCORE)
|
||||
asm(ALTERNATIVE("llilh %[lc],0", "llilh %[lc],%[alt]", ALT_FEATURE(MFEATURE_LOWCORE))
|
||||
: [lc] "=d" (lc)
|
||||
: [alt] "i" (LOWCORE_ALT_ADDRESS >> 16));
|
||||
return lc;
|
||||
@@ -240,13 +241,13 @@ static inline void set_prefix(__u32 address)
|
||||
.macro GET_LC reg
|
||||
ALTERNATIVE "llilh \reg,0", \
|
||||
__stringify(llilh \reg, LOWCORE_ALT_ADDRESS >> 16), \
|
||||
ALT_LOWCORE
|
||||
ALT_FEATURE(MFEATURE_LOWCORE)
|
||||
.endm
|
||||
|
||||
.macro STMG_LC start, end, savearea
|
||||
ALTERNATIVE "stmg \start, \end, \savearea", \
|
||||
__stringify(stmg \start, \end, LOWCORE_ALT_ADDRESS + \savearea), \
|
||||
ALT_LOWCORE
|
||||
ALT_FEATURE(MFEATURE_LOWCORE)
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
#ifndef __ASM_S390_MACHINE_H
|
||||
#define __ASM_S390_MACHINE_H
|
||||
|
||||
#include <linux/const.h>
|
||||
|
||||
#define MFEATURE_LOWCORE 0
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/bitops.h>
|
||||
@@ -72,5 +76,7 @@ static __always_inline bool machine_has_##name(void) \
|
||||
return test_machine_feature(feature); \
|
||||
}
|
||||
|
||||
DEFINE_MACHINE_HAS_FEATURE(relocated_lowcore, MFEATURE_LOWCORE)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASM_S390_MACHINE_H */
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include <asm/sections.h>
|
||||
|
||||
unsigned long __bootdata_preserved(__abs_lowcore);
|
||||
int __bootdata_preserved(relocate_lowcore);
|
||||
|
||||
int abs_lowcore_map(int cpu, struct lowcore *lc, bool alloc)
|
||||
{
|
||||
|
||||
@@ -33,9 +33,6 @@ void __apply_alternatives(struct alt_instr *start, struct alt_instr *end, unsign
|
||||
case ALT_TYPE_SPEC:
|
||||
replace = nobp_enabled();
|
||||
break;
|
||||
case ALT_TYPE_LOWCORE:
|
||||
replace = have_relocated_lowcore();
|
||||
break;
|
||||
default:
|
||||
replace = false;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/nospec-insn.h>
|
||||
#include <asm/lowcore.h>
|
||||
#include <asm/machine.h>
|
||||
|
||||
_LPP_OFFSET = __LC_LPP
|
||||
|
||||
@@ -44,7 +45,7 @@ _LPP_OFFSET = __LC_LPP
|
||||
ALTERNATIVE_2 "b \lpswe;nopr", \
|
||||
".insn siy,0xeb0000000071,\address,0", ALT_FACILITY(193), \
|
||||
__stringify(.insn siy,0xeb0000000071,LOWCORE_ALT_ADDRESS+\address,0), \
|
||||
ALT_LOWCORE
|
||||
ALT_FEATURE(MFEATURE_LOWCORE)
|
||||
.endm
|
||||
|
||||
.macro MBEAR reg, lowcore
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
|
||||
#include <asm/archrandom.h>
|
||||
#include <asm/boot_data.h>
|
||||
#include <asm/machine.h>
|
||||
#include <asm/ipl.h>
|
||||
#include <asm/facility.h>
|
||||
#include <asm/smp.h>
|
||||
@@ -911,7 +912,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (!boot_earlyprintk)
|
||||
boot_rb_foreach(print_rb_entry);
|
||||
|
||||
if (have_relocated_lowcore())
|
||||
if (machine_has_relocated_lowcore())
|
||||
pr_info("Lowcore relocated to 0x%px\n", get_lowcore());
|
||||
|
||||
log_component_list();
|
||||
|
||||
Reference in New Issue
Block a user