mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-19 00:04:18 +00:00
Pull s390 updates from Heiko Carstens:
- Large cleanup of the con3270/tty3270 driver. Among others this fixes:
- Background Color Support
- ASCII Line Character Support
- VT100 Support
- Geometries other than 80x24
- Cleanup and improve cmpxchg() code. Also add cmpxchg_user_key() to
uaccess functions, which will be used by KVM to access KVM guest
memory with a specific storage key
- Add support for user space events counting to CPUMF
- Cleanup the vfio/ccw code, which also allows now to properly support
2K Format-2 IDALs
- Move kernel page table allocation and initialization to decompressor,
which finally allows to enter the kernel with dynamic address
translation enabled. This in turn allows to get rid of code with
special handling in the kernel, which has to distinguish if DAT is on
or off
- Replace kretprobe with rethook
- Various improvements to vfio/ap queue resets:
- Use TAPQ to verify completion of a reset in progress rather than
multiple invocations of ZAPQ.
- Check TAPQ response codes when verifying successful completion of
ZAPQ.
- Fix erroneous handling of some error response codes.
- Increase the maximum amount of time to wait for successful
completion of ZAPQ
- Rework system call wrappers to get rid of alias functions, which were
only left on s390
- Cleanup diag288_wdt watchdog driver. It has been agreed on with
Guenter Roeck that this goes upstream via the s390 tree
- Add missing loadparm parameter handling for list-directed ECKD
ipl/reipl
- Various improvements to memory detection code
- Remove arch_cpu_idle_time() since the current implementation is
broken, and allows user space observable accounted idle times which
can temporarily decrease
- Add Reset DAT-Protection support: (only) allow to change PTEs from RO
to RW with a new RDP instruction. Unlike the currently used IPTE
instruction, this does not necessarily guarantee that TLBs of all
CPUs are synchronously flushed; and that remote CPUs can see spurious
protection faults. The overall improvement for not requiring an all
CPU synchronization, like it is required with IPTE, should be
beneficial
- Fix KFENCE page fault reporting
- Smaller cleanups and improvement all over the place
* tag 's390-6.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (182 commits)
s390/irq,idle: simplify idle check
s390/processor: add test_and_set_cpu_flag() and test_and_clear_cpu_flag()
s390/processor: let cpu helper functions return boolean values
s390/kfence: fix page fault reporting
s390/zcrypt: introduce ctfm field in struct CPRBX
s390: remove confusing comment from uapi types header file
vfio/ccw: remove WARN_ON during shutdown
s390/entry: remove toolchain dependent micro-optimization
s390/mem_detect: do not truncate online memory ranges info
s390/vx: remove __uint128_t type from __vector128 struct again
s390/mm: add support for RDP (Reset DAT-Protection)
s390/mm: define private VM_FAULT_* reasons from top bits
Documentation: s390: correct spelling
s390/ap: fix status returned by ap_qact()
s390/ap: fix status returned by ap_aqic()
s390: vfio-ap: tighten the NIB validity check
Revert "s390/mem_detect: do not update output parameters on failure"
s390/idle: remove arch_cpu_idle_time() and corresponding code
s390/vx: use simple assignments to access __vector128 members
s390/vx: add 64 and 128 bit members to __vector128 struct
...
236 lines
5.0 KiB
ArmAsm
236 lines
5.0 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* ld script to make s390 Linux kernel
|
|
* Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
|
|
*/
|
|
|
|
#include <asm/thread_info.h>
|
|
#include <asm/page.h>
|
|
#include <asm/ftrace.lds.h>
|
|
|
|
/*
|
|
* Put .bss..swapper_pg_dir as the first thing in .bss. This will
|
|
* make sure it has 16k alignment.
|
|
*/
|
|
#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir) \
|
|
*(.bss..invalid_pg_dir)
|
|
|
|
/* Handle ro_after_init data on our own. */
|
|
#define RO_AFTER_INIT_DATA
|
|
|
|
#define RUNTIME_DISCARD_EXIT
|
|
|
|
#define EMITS_PT_NOTE
|
|
|
|
#include <asm-generic/vmlinux.lds.h>
|
|
#include <asm/vmlinux.lds.h>
|
|
|
|
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
|
|
OUTPUT_ARCH(s390:64-bit)
|
|
ENTRY(startup_continue)
|
|
jiffies = jiffies_64;
|
|
|
|
PHDRS {
|
|
text PT_LOAD FLAGS(5); /* R_E */
|
|
data PT_LOAD FLAGS(7); /* RWE */
|
|
note PT_NOTE FLAGS(0); /* ___ */
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
. = 0x100000;
|
|
.text : {
|
|
_stext = .; /* Start of text section */
|
|
_text = .; /* Text and read-only data */
|
|
HEAD_TEXT
|
|
TEXT_TEXT
|
|
SCHED_TEXT
|
|
LOCK_TEXT
|
|
KPROBES_TEXT
|
|
IRQENTRY_TEXT
|
|
SOFTIRQENTRY_TEXT
|
|
FTRACE_HOTPATCH_TRAMPOLINES_TEXT
|
|
*(.text.*_indirect_*)
|
|
*(.gnu.warning)
|
|
. = ALIGN(PAGE_SIZE);
|
|
_etext = .; /* End of text section */
|
|
} :text = 0x0700
|
|
|
|
RO_DATA(PAGE_SIZE)
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
_sdata = .; /* Start of data section */
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
__start_ro_after_init = .;
|
|
.data..ro_after_init : {
|
|
*(.data..ro_after_init)
|
|
JUMP_TABLE_DATA
|
|
} :data
|
|
EXCEPTION_TABLE(16)
|
|
. = ALIGN(PAGE_SIZE);
|
|
__end_ro_after_init = .;
|
|
|
|
RW_DATA(0x100, PAGE_SIZE, THREAD_SIZE)
|
|
BOOT_DATA_PRESERVED
|
|
|
|
. = ALIGN(8);
|
|
.amode31.refs : {
|
|
_start_amode31_refs = .;
|
|
*(.amode31.refs)
|
|
_end_amode31_refs = .;
|
|
}
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
_edata = .; /* End of data section */
|
|
|
|
/* will be freed after init */
|
|
. = ALIGN(PAGE_SIZE); /* Init code and data */
|
|
__init_begin = .;
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
|
|
_sinittext = .;
|
|
INIT_TEXT
|
|
. = ALIGN(PAGE_SIZE);
|
|
_einittext = .;
|
|
}
|
|
|
|
/*
|
|
* .exit.text is discarded at runtime, not link time,
|
|
* to deal with references from __bug_table
|
|
*/
|
|
.exit.text : {
|
|
EXIT_TEXT
|
|
}
|
|
|
|
.exit.data : {
|
|
EXIT_DATA
|
|
}
|
|
|
|
/*
|
|
* struct alt_inst entries. From the header (alternative.h):
|
|
* "Alternative instructions for different CPU types or capabilities"
|
|
* Think locking instructions on spinlocks.
|
|
* Note, that it is a part of __init region.
|
|
*/
|
|
. = ALIGN(8);
|
|
.altinstructions : {
|
|
__alt_instructions = .;
|
|
*(.altinstructions)
|
|
__alt_instructions_end = .;
|
|
}
|
|
|
|
/*
|
|
* And here are the replacement instructions. The linker sticks
|
|
* them as binary blobs. The .altinstructions has enough data to
|
|
* get the address and the length of them to patch the kernel safely.
|
|
* Note, that it is a part of __init region.
|
|
*/
|
|
.altinstr_replacement : {
|
|
*(.altinstr_replacement)
|
|
}
|
|
|
|
/*
|
|
* Table with the patch locations to undo expolines
|
|
*/
|
|
. = ALIGN(4);
|
|
.nospec_call_table : {
|
|
__nospec_call_start = . ;
|
|
*(.s390_indirect*)
|
|
__nospec_call_end = . ;
|
|
}
|
|
.nospec_return_table : {
|
|
__nospec_return_start = . ;
|
|
*(.s390_return*)
|
|
__nospec_return_end = . ;
|
|
}
|
|
|
|
BOOT_DATA
|
|
|
|
/*
|
|
* .amode31 section for code, data, ex_table that need to stay
|
|
* below 2 GB, even when the kernel is relocated above 2 GB.
|
|
*/
|
|
. = ALIGN(PAGE_SIZE);
|
|
_samode31 = .;
|
|
.amode31.text : {
|
|
_stext_amode31 = .;
|
|
*(.amode31.text)
|
|
*(.amode31.text.*_indirect_*)
|
|
. = ALIGN(PAGE_SIZE);
|
|
_etext_amode31 = .;
|
|
}
|
|
. = ALIGN(16);
|
|
.amode31.ex_table : {
|
|
_start_amode31_ex_table = .;
|
|
KEEP(*(.amode31.ex_table))
|
|
_stop_amode31_ex_table = .;
|
|
}
|
|
. = ALIGN(PAGE_SIZE);
|
|
.amode31.data : {
|
|
*(.amode31.data)
|
|
}
|
|
. = ALIGN(PAGE_SIZE);
|
|
_eamode31 = .;
|
|
|
|
/* early.c uses stsi, which requires page aligned data. */
|
|
. = ALIGN(PAGE_SIZE);
|
|
INIT_DATA_SECTION(0x100)
|
|
|
|
PERCPU_SECTION(0x100)
|
|
|
|
.dynsym ALIGN(8) : {
|
|
__dynsym_start = .;
|
|
*(.dynsym)
|
|
__dynsym_end = .;
|
|
}
|
|
.rela.dyn ALIGN(8) : {
|
|
__rela_dyn_start = .;
|
|
*(.rela*)
|
|
__rela_dyn_end = .;
|
|
}
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
__init_end = .; /* freed after init ends here */
|
|
|
|
BSS_SECTION(PAGE_SIZE, 4 * PAGE_SIZE, PAGE_SIZE)
|
|
|
|
. = ALIGN(PAGE_SIZE);
|
|
_end = . ;
|
|
|
|
/*
|
|
* uncompressed image info used by the decompressor
|
|
* it should match struct vmlinux_info
|
|
*/
|
|
.vmlinux.info 0 (INFO) : {
|
|
QUAD(_stext) /* default_lma */
|
|
QUAD(startup_continue) /* entry */
|
|
QUAD(__bss_start - _stext) /* image_size */
|
|
QUAD(__bss_stop - __bss_start) /* bss_size */
|
|
QUAD(__boot_data_start) /* bootdata_off */
|
|
QUAD(__boot_data_end - __boot_data_start) /* bootdata_size */
|
|
QUAD(__boot_data_preserved_start) /* bootdata_preserved_off */
|
|
QUAD(__boot_data_preserved_end -
|
|
__boot_data_preserved_start) /* bootdata_preserved_size */
|
|
QUAD(__dynsym_start) /* dynsym_start */
|
|
QUAD(__rela_dyn_start) /* rela_dyn_start */
|
|
QUAD(__rela_dyn_end) /* rela_dyn_end */
|
|
QUAD(_eamode31 - _samode31) /* amode31_size */
|
|
QUAD(init_mm)
|
|
QUAD(swapper_pg_dir)
|
|
QUAD(invalid_pg_dir)
|
|
} :NONE
|
|
|
|
/* Debugging sections. */
|
|
STABS_DEBUG
|
|
DWARF_DEBUG
|
|
ELF_DETAILS
|
|
|
|
/* Sections to be discarded */
|
|
DISCARDS
|
|
/DISCARD/ : {
|
|
*(.eh_frame)
|
|
*(.interp)
|
|
}
|
|
}
|