linux/arch/s390/kernel
Vasily Gorbik 686140a1a9 s390: introduce CPU alternatives
Implement CPU alternatives, which allows to optionally patch newer
instructions at runtime, based on CPU facilities availability.

A new kernel boot parameter "noaltinstr" disables patching.

Current implementation is derived from x86 alternatives. Although
ideal instructions padding (when altinstr is longer then oldinstr)
is added at compile time, and no oldinstr nops optimization has to be
done at runtime. Also couple of compile time sanity checks are done:
1. oldinstr and altinstr must be <= 254 bytes long,
2. oldinstr and altinstr must not have an odd length.

alternative(oldinstr, altinstr, facility);
alternative_2(oldinstr, altinstr1, facility1, altinstr2, facility2);

Both compile time and runtime padding consists of either 6/4/2 bytes nop
or a jump (brcl) + 2 bytes nop filler if padding is longer then 6 bytes.

.altinstructions and .altinstr_replacement sections are part of
__init_begin : __init_end region and are freed after initialization.

Signed-off-by: Vasily Gorbik <gor@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2017-10-18 14:11:29 +02:00
..
vdso32 s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
vdso64 s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
.gitignore
als.c s390/sclp: don't add new lines to each printed string 2017-02-08 14:13:20 +01:00
alternative.c s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
asm-offsets.c s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
audit.c
audit.h
base.S
cache.c
compat_audit.c
compat_linux.c s390: kernel: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:31 +01:00
compat_linux.h
compat_ptrace.h
compat_signal.c signal: Remove kernel interal si_code magic 2017-07-24 14:30:28 -05:00
compat_wrapper.c s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
cpcmd.c s390/cpcmd,vmcp: avoid GFP_DMA allocations 2017-08-09 09:09:35 -04:00
crash_dump.c s390/kdump: Add final note 2017-03-28 16:54:31 +02:00
debug.c s390/debug: only write data once 2017-10-18 14:11:23 +02:00
diag.c s390/diag: add diag26c support 2017-06-20 15:44:15 -04:00
dis.c s390/disassembler: add new z14 instructions 2017-09-29 15:52:24 +02:00
dumpstack.c s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
early_printk.c s390/sclp: make early sclp code readable 2017-02-08 14:13:19 +01:00
early.c s390/topology: alternative topology for topology-less machines 2017-09-20 13:47:54 +02:00
ebcdic.c s390: kernel: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:31 +01:00
entry.h s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
entry.S s390,kvm: provide plumbing for machines checks when running guests 2017-06-28 12:57:47 +02:00
fpu.c s390/fpu: improve kernel_fpu_[begin|end] 2016-08-29 11:05:01 +02:00
ftrace.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-05-16 09:24:44 -07:00
guarded_storage.c s390/guarded storage: simplify task exit handling 2017-09-28 07:29:40 +02:00
head64.S s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
head_kdump.S
head.S s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
idle.c sched/headers: Prepare to move cputime functionality from <linux/sched.h> into <linux/sched/cputime.h> 2017-03-02 08:42:39 +01:00
ipl.c s390/ipl: revert Load Normal semantics for LPAR CCW-type re-IPL 2017-06-14 15:35:31 +02:00
irq.c s390/time: add support for the TOD clock epoch extension 2017-07-26 08:25:14 +02:00
jump_label.c s390: Prevent hotplug rwsem recursion 2017-05-26 10:10:46 +02:00
kdebugfs.c s390/debugfs: introduce top-level 's390' directory 2017-03-22 08:29:15 +01:00
kprobes.c s390/kprobes: remove KPROBE_SWAP_INST state 2017-10-12 07:16:50 +02:00
lgr.c s390: kernel: make lgr explicitly non-modular 2016-10-31 17:55:42 +01:00
machine_kexec.c s390/kexec: Fix checksum validation return code for kdump 2017-10-18 14:11:16 +02:00
Makefile s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
mcount.S s390: move exports to definitions 2016-08-07 23:47:20 -04:00
module.c s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
nmi.c KVM: s390: Backup the guest's machine check info 2017-06-27 16:05:38 +02:00
os_info.c s390: proper type casts for csum_partial invocations 2017-01-16 07:27:53 +01:00
perf_cpum_cf_events.c s390/cpum_cf: correct variable naming (cleanup) 2017-03-31 07:53:33 +02:00
perf_cpum_cf.c s390/cpum_cf: make hw_perf_event_update() a void function 2017-03-31 07:53:35 +02:00
perf_cpum_sf.c s390/cpumf: remove superfluous nr_cpumask_bits check 2017-09-28 07:29:43 +02:00
perf_event.c s390/perf: fix null string in perf list pmu command 2017-06-12 16:26:00 +02:00
pgm_check.S
process.c s390: get rid of exit_thread() 2017-09-28 07:29:40 +02:00
processor.c s390/cpuinfo: show facilities as reported by stfle 2017-03-22 08:29:02 +01:00
ptrace.c s390/ptrace: add runtime instrumention register get/set 2017-09-28 07:29:41 +02:00
reipl.S
relocate_kernel.S s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
runtime_instr.c s390/runtime_instrumentation: clean up struct runtime_instr_cb 2017-09-28 07:29:40 +02:00
setup.c s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
signal.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/task_stack.h> 2017-03-02 08:42:36 +01:00
smp.c s390/spinlock: introduce spinlock wait queueing 2017-09-28 07:29:44 +02:00
stacktrace.c sched/headers: Prepare for new header dependencies before moving code to <linux/sched/debug.h> 2017-03-02 08:42:34 +01:00
sthyi.c s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
suspend.c s390/mm: tag normal pages vs pages used in page tables 2017-07-25 06:55:28 +02:00
swsusp.S s390/sclp: don't add new lines to each printed string 2017-02-08 14:13:20 +01:00
sys_s390.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
syscalls.S s390/sthyi: add s390_sthyi system call 2017-10-09 11:15:36 +02:00
sysinfo.c S390/sysinfo: use uuid_is_null instead of opencoding it 2017-06-05 16:59:06 +02:00
time.c s390/dasd: Change unsigned long long to unsigned long 2017-08-23 13:31:51 +02:00
topology.c s390/topology: add detection of dedicated vs shared CPUs 2017-09-28 07:29:43 +02:00
trace.c
traps.c s390: add missing header includes for type checking 2017-06-12 16:25:55 +02:00
uprobes.c s390: rename struct psw_bits members 2017-06-12 16:26:02 +02:00
vdso.c s390/mm: use memset64 instead of clear_table 2017-10-09 11:18:06 +02:00
vmlinux.lds.S s390: introduce CPU alternatives 2017-10-18 14:11:29 +02:00
vtime.c s390/cputime: simplify account_system_index_scaled 2017-06-12 16:25:57 +02:00