mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 's390-6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 updates from Alexander Gordeev: - Standardize on the __ASSEMBLER__ macro that is provided by GCC and Clang compilers and replace __ASSEMBLY__ with __ASSEMBLER__ in both uapi and non-uapi headers - Explicitly include <linux/export.h> in architecture and driver files which contain an EXPORT_SYMBOL() and remove the include from the files which do not contain the EXPORT_SYMBOL() - Use the full title of "z/Architecture Principles of Operation" manual and the name of a section where facility bits are listed - Use -D__DISABLE_EXPORTS for files in arch/s390/boot to avoid unnecessary slowing down of the build and confusing external kABI tools that process symtypes data - Print additional unrecoverable machine check information to make the root cause analysis easier - Move cmpxchg_user_key() handling to uaccess library code, since the generated code is large anyway and there is no benefit if it is inlined - Fix a problem when cmpxchg_user_key() is executing a code with a non-default key: if a system is IPL-ed with "LOAD NORMAL", and the previous system used storage keys where the fetch-protection bit was set for some pages, and the cmpxchg_user_key() is located within such page, a protection exception happens - Either the external call or emergency signal order is used to send an IPI to a remote CPU. Use the external order only, since it is at least as good and sometimes even better, than the emergency signal - In case of an early crash the early program check handler prints more or less random value of the last breaking event address, since it is not initialized properly. Copy the last breaking event address from the lowcore to pt_regs to address this - During STP synchronization check udelay() can not be used, since the first CPU modifies tod_clock_base and get_tod_clock_monotonic() might return a non-monotonic time. Instead, busy-loop on other CPUs, while the the first CPU actually handles the synchronization operation - When debugging the early kernel boot using QEMU with the -S flag and GDB attached, skip the decompressor and start directly in kernel - Rename PAI Crypto event 4210 according to z16 and z17 "z/Architecture Principles of Operation" manual - Remove the in-kernel time steering support in favour of the new s390 PTP driver, which allows the kernel clock steered more precisely - Remove a possible false-positive warning in pte_free_defer(), which could be triggered in a valid case KVM guest process is initializing * tag 's390-6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (29 commits) s390/mm: Remove possible false-positive warning in pte_free_defer() s390/stp: Default to enabled s390/stp: Remove leap second support s390/time: Remove in-kernel time steering s390/sclp: Use monotonic clock in sclp_sync_wait() s390/smp: Use monotonic clock in smp_emergency_stop() s390/time: Use monotonic clock in get_cycles() s390/pai_crypto: Rename PAI Crypto event 4210 scripts/gdb/symbols: make lx-symbols skip the s390 decompressor s390/boot: Introduce jump_to_kernel() function s390/stp: Remove udelay from stp_sync_clock() s390/early: Copy last breaking event address to pt_regs s390/smp: Remove conditional emergency signal order code usage s390/uaccess: Merge cmpxchg_user_key() inline assemblies s390/uaccess: Prevent kprobes on cmpxchg_user_key() functions s390/uaccess: Initialize code pages executed with non-default access key s390/skey: Provide infrastructure for executing with non-default access key s390/uaccess: Make cmpxchg_user_key() library code s390/page: Add memory clobber to page_set_storage_key() s390/page: Cleanup page_set_storage_key() inline assemblies ...
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#define KMSG_COMPONENT "appldata"
|
||||
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sched/stat.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
@@ -19,15 +19,15 @@ CC_FLAGS_MARCH_MINIMUM := -march=z10
|
||||
|
||||
KBUILD_AFLAGS := $(filter-out $(CC_FLAGS_MARCH),$(KBUILD_AFLAGS_DECOMPRESSOR))
|
||||
KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_MARCH),$(KBUILD_CFLAGS_DECOMPRESSOR))
|
||||
KBUILD_AFLAGS += $(CC_FLAGS_MARCH_MINIMUM)
|
||||
KBUILD_CFLAGS += $(CC_FLAGS_MARCH_MINIMUM)
|
||||
KBUILD_AFLAGS += $(CC_FLAGS_MARCH_MINIMUM) -D__DISABLE_EXPORTS
|
||||
KBUILD_CFLAGS += $(CC_FLAGS_MARCH_MINIMUM) -D__DISABLE_EXPORTS
|
||||
|
||||
CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char
|
||||
|
||||
obj-y := head.o als.o startup.o physmem_info.o ipl_parm.o ipl_report.o vmem.o
|
||||
obj-y += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o
|
||||
obj-y += version.o pgm_check.o ctype.o ipl_data.o relocs.o alternative.o
|
||||
obj-y += uv.o printk.o
|
||||
obj-y += uv.o printk.o trampoline.o
|
||||
obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o
|
||||
obj-y += $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
|
||||
obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o
|
||||
|
||||
@@ -65,7 +65,7 @@ static void facility_mismatch(void)
|
||||
boot_emerg("The Linux kernel requires more recent processor hardware\n");
|
||||
boot_emerg("Detected machine-type number: %4x\n", id.machine);
|
||||
print_missing_facilities();
|
||||
boot_emerg("See Principles of Operations for facility bits\n");
|
||||
boot_emerg("See z/Architecture Principles of Operation - Facility Indications\n");
|
||||
disabled_wait();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#define IPL_START 0x200
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/printk.h>
|
||||
#include <asm/physmem_info.h>
|
||||
@@ -74,6 +74,7 @@ void print_stacktrace(unsigned long sp);
|
||||
void error(char *m);
|
||||
int get_random(unsigned long limit, unsigned long *value);
|
||||
void boot_rb_dump(void);
|
||||
void __noreturn jump_to_kernel(psw_t *psw);
|
||||
|
||||
#ifndef boot_fmt
|
||||
#define boot_fmt(fmt) fmt
|
||||
@@ -121,5 +122,5 @@ static inline bool intersects(unsigned long addr0, unsigned long size0,
|
||||
{
|
||||
return addr0 + size0 > addr1 && addr1 + size1 > addr0;
|
||||
}
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* BOOT_BOOT_H */
|
||||
|
||||
@@ -16,7 +16,9 @@ struct ipl_lowcore {
|
||||
struct ccw0 ccwpgm[2]; /* 0x0008 */
|
||||
u8 fill[56]; /* 0x0018 */
|
||||
struct ccw0 ccwpgmcc[20]; /* 0x0050 */
|
||||
u8 pad_0xf0[0x01a0-0x00f0]; /* 0x00f0 */
|
||||
u8 pad_0xf0[0x0140-0x00f0]; /* 0x00f0 */
|
||||
psw_t svc_old_psw; /* 0x0140 */
|
||||
u8 pad_0x150[0x01a0-0x0150]; /* 0x0150 */
|
||||
psw_t restart_psw; /* 0x01a0 */
|
||||
psw_t external_new_psw; /* 0x01b0 */
|
||||
psw_t svc_new_psw; /* 0x01c0 */
|
||||
@@ -75,6 +77,11 @@ static struct ipl_lowcore ipl_lowcore __used __section(".ipldata") = {
|
||||
[18] = CCW0(CCW_CMD_READ_IPL, 0x690, 0x50, CCW_FLAG_SLI | CCW_FLAG_CC),
|
||||
[19] = CCW0(CCW_CMD_READ_IPL, 0x6e0, 0x50, CCW_FLAG_SLI),
|
||||
},
|
||||
/*
|
||||
* Let the GDB's lx-symbols command find the jump_to_kernel symbol
|
||||
* without having to load decompressor symbols.
|
||||
*/
|
||||
.svc_old_psw = { .mask = 0, .addr = (unsigned long)jump_to_kernel },
|
||||
.restart_psw = { .mask = 0, .addr = IPL_START, },
|
||||
.external_new_psw = { .mask = PSW_MASK_DISABLED, .addr = __LC_EXT_NEW_PSW, },
|
||||
.svc_new_psw = { .mask = PSW_MASK_DISABLED, .addr = __LC_SVC_NEW_PSW, },
|
||||
|
||||
@@ -642,5 +642,5 @@ void startup_kernel(void)
|
||||
psw.addr = __kaslr_offset + vmlinux.entry;
|
||||
psw.mask = PSW_KERNEL_BITS;
|
||||
boot_debug("Starting kernel at: 0x%016lx\n", psw.addr);
|
||||
__load_psw(psw);
|
||||
jump_to_kernel(&psw);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
# This function is identical to __load_psw(), but the lx-symbols GDB command
|
||||
# puts a breakpoint on it, so it needs to be kept separate.
|
||||
SYM_CODE_START(jump_to_kernel)
|
||||
lpswe 0(%r2)
|
||||
SYM_CODE_END(jump_to_kernel)
|
||||
@@ -6,6 +6,7 @@
|
||||
* Author(s): Harald Freudenberger
|
||||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/random.h>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <crypto/internal/hash.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/cpacf.h>
|
||||
#include "sha.h"
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
ALT_TYPE_SPEC << ALT_TYPE_SHIFT | \
|
||||
(facility) << ALT_DATA_SHIFT)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
@@ -183,7 +183,7 @@ static inline void apply_alternatives(struct alt_instr *start, struct alt_instr
|
||||
/* Use this macro if clobbers are needed without inputs. */
|
||||
#define ASM_NO_INPUT_CLOBBER(clobber...) : clobber
|
||||
|
||||
#else /* __ASSEMBLY__ */
|
||||
#else /* __ASSEMBLER__ */
|
||||
|
||||
/*
|
||||
* Issue one struct alt_instr descriptor entry (need to put it into
|
||||
@@ -233,6 +233,6 @@ static inline void apply_alternatives(struct alt_instr *start, struct alt_instr
|
||||
.popsection
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_S390_ALTERNATIVE_H */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#ifndef _ASM_S390_ASM_CONST_H
|
||||
#define _ASM_S390_ASM_CONST_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
# define stringify_in_c(...) __VA_ARGS__
|
||||
#else
|
||||
/* This version of stringify will deal with commas... */
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#ifndef _ASM_S390_CPU_H
|
||||
#define _ASM_S390_CPU_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/jump_label.h>
|
||||
@@ -24,5 +24,5 @@ struct cpuid
|
||||
|
||||
DECLARE_STATIC_KEY_FALSE(cpu_has_bear);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* _ASM_S390_CPU_H */
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#ifndef _ASM_S390_CPU_MF_INSN_H
|
||||
#define _ASM_S390_CPU_MF_INSN_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* Macro to generate the STCCTM instruction with a customized
|
||||
* M3 field designating the counter set.
|
||||
@@ -17,6 +17,6 @@
|
||||
.insn rsy,0xeb0000000017,\r1,\m3 & 0xf,\db2
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
#define CR14_EXTERNAL_DAMAGE_SUBMASK BIT(CR14_EXTERNAL_DAMAGE_SUBMASK_BIT)
|
||||
#define CR14_WARNING_SUBMASK BIT(CR14_WARNING_SUBMASK_BIT)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/bug.h>
|
||||
|
||||
@@ -252,5 +252,5 @@ union ctlreg15 {
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* __ASM_S390_CTLREG_H */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#ifndef _ASM_S390_DWARF_H
|
||||
#define _ASM_S390_DWARF_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#define CFI_STARTPROC .cfi_startproc
|
||||
#define CFI_ENDPROC .cfi_endproc
|
||||
@@ -33,6 +33,6 @@
|
||||
.cfi_sections .eh_frame, .debug_frame
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_S390_DWARF_H */
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#ifndef _ASM_S390X_DCSS_H
|
||||
#define _ASM_S390X_DCSS_H
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/*
|
||||
* DCSS segment is defined as a contiguous range of pages using DEFSEG command.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#error only <asm/fpu-insn.h> can be included directly
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* Macros to generate vector instruction byte code */
|
||||
|
||||
@@ -750,5 +750,5 @@
|
||||
MRXBOPC 0, 0x77, v1, v2, v3
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* __ASM_S390_FPU_INSN_ASM_H */
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
#include <asm/fpu-insn-asm.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/instrumented.h>
|
||||
#include <asm/asm-extable.h>
|
||||
@@ -475,5 +475,5 @@ static __always_inline void fpu_vzero(u8 v)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* __ASM_S390_FPU_INSN_H */
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define ARCH_SUPPORTS_FTRACE_OPS 1
|
||||
#define MCOUNT_INSN_SIZE 6
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <asm/stacktrace.h>
|
||||
|
||||
static __always_inline unsigned long return_address(unsigned int n)
|
||||
@@ -134,7 +134,7 @@ void ftrace_graph_func(unsigned long ip, unsigned long parent_ip,
|
||||
struct ftrace_ops *op, struct ftrace_regs *fregs);
|
||||
#define ftrace_graph_func ftrace_graph_func
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#ifdef CONFIG_FUNCTION_TRACER
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define EXT_IRQ_CP_SERVICE 0x2603
|
||||
#define EXT_IRQ_IUCV 0x4000
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/percpu.h>
|
||||
@@ -120,6 +120,6 @@ void irq_subclass_unregister(enum irq_subclass subclass);
|
||||
|
||||
#define irq_canonicalize(irq) (irq)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_IRQ_H */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user