]> git.baikalelectronics.ru Git - kernel.git/commit
s390: introduce CPU alternatives
authorVasily Gorbik <gor@linux.vnet.ibm.com>
Thu, 12 Oct 2017 11:01:47 +0000 (13:01 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 18 Oct 2017 12:11:29 +0000 (14:11 +0200)
commitb988cbbc5e8298b1ba6b9dbe1f4f2c510be730b8
tree2d19e98601a9d9855f7eac6cca6cb364f5a9d650
parentc50b62dbf696568c45bb2e5a0cf344a691238cbb
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>
Documentation/admin-guide/kernel-parameters.txt
arch/s390/Kconfig
arch/s390/include/asm/alternative.h [new file with mode: 0644]
arch/s390/kernel/Makefile
arch/s390/kernel/alternative.c [new file with mode: 0644]
arch/s390/kernel/module.c
arch/s390/kernel/setup.c
arch/s390/kernel/vmlinux.lds.S