]> git.baikalelectronics.ru Git - kernel.git/commit
s390/preempt: disable __preempt_count_add() optimization for PROFILE_ALL_BRANCHES
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 6 May 2022 09:33:19 +0000 (11:33 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 11 May 2022 12:40:58 +0000 (14:40 +0200)
commitad4ab272fa8e35ae4c17f49bf47fabc0bcdb1c22
treebcb49f8eb4c0824719baec46ce380bbc0e5c8cd6
parent2640763348b325956d24ee9f5c02a2bec26de84b
s390/preempt: disable __preempt_count_add() optimization for PROFILE_ALL_BRANCHES

gcc 12 does not (always) optimize away code that should only be generated
if parameters are constant and within in a certain range. This depends on
various obscure kernel config options, however in particular
PROFILE_ALL_BRANCHES can trigger this compile error:

In function ‘__atomic_add_const’,
    inlined from ‘__preempt_count_add.part.0’ at ./arch/s390/include/asm/preempt.h:50:3:
./arch/s390/include/asm/atomic_ops.h:80:9: error: impossible constraint in ‘asm’
   80 |         asm volatile(                                                   \
      |         ^~~

Workaround this by simply disabling the optimization for
PROFILE_ALL_BRANCHES, since the kernel will be so slow, that this
optimization won't matter at all.

Reported-by: Thomas Richter <tmricht@linux.ibm.com>
Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/include/asm/preempt.h