]> git.ipfire.org Git - thirdparty/linux.git/commit
s390/alternatives: Add debug functionality
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 7 Feb 2025 14:49:11 +0000 (15:49 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 4 Mar 2025 16:18:08 +0000 (17:18 +0100)
commitf0f6db9ffe33d4f5abed2e9c522743a8c8686a0f
tree08f3700ec82427e4dd097371a91ad9a2e39e8bdc
parent66ec751719d62c5c5eb7143af0a48e93ec079b5e
s390/alternatives: Add debug functionality

Similar to x86 and loongarch add a "debug-alternative" command line
parameter, which allows for alternative debugging. The parameter
itself comes with architecture specific semantics:

"debug-alternative"
 -> print debug message for every single alternative

"debug-alternative=0;2"
-> print debug message for all alternatives with type 0 and 2

"debug-alternative=0:0-7"
-> print debug message for all alternatives with type 0 which have a
   facility number within the range of 0-7

"debug-alternative=0:!8;1"
-> print debug message for all alternatives with type 0, for all
   facility numbers, except facility 8, and in addition print all
   alternatives with type 1

A defconfig build currently results in a kernel with more than 20.000
alternatives, where the majority is for the niai alternative (spinlocks),
and the relocated lowcore alternative. The following kernel command like
options limit alternative debug output, and enable dynamic debug messages:

debug-alternative=0:!49;1:!0
earlyprintk
bootdebug
ignore_loglevel
loglevel=8
dyndbg="file alternative.c +p"

This results in output like this:

 alt: [0/ 11] 0000021b9ce8680cc0f400000089 -> c00400000000
 alt: [0/ 64] 0000021b9ce87e60c0f400000043 -> c00400000000
 alt: [0/133] 0000021b9ce88c56c0f400000027 -> c00400000000
 alt: [0/ 74] 0000021b9ce89410c0f40000002a -> c00400000000
 alt: [0/ 40] 0000021b9dc3720a47000000 -> b280d398
 alt: [0/193] 0000021b9dc3730647000000 -> b201d2b0
 alt: [0/193] 0000021b9dc37354c00400000000 -> d20720c0d2b0
 alt: [1/  5] 0000038d720d7bf2c0f400000016 -> c00400000000

With

[<alternative type>/<alternative data>] <address> oldcode -> newcode

Alternative data depends on the alternative type: for type 0
(ALT_TYPE_FACILITY) data is the facility. For type 1 (ALT_TYPE_FEATURE)
data is the corresponding machine feature.

Acked-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>
arch/s390/boot/alternative.c
arch/s390/boot/boot.h
arch/s390/boot/ipl_parm.c
arch/s390/kernel/alternative.c
arch/s390/kernel/early.c