]> git.baikalelectronics.ru Git - kernel.git/commit
compiler-gcc.h: remove ancient workaround for gcc PR 58670
authorUros Bizjak <ubizjak@gmail.com>
Fri, 24 Jun 2022 14:14:12 +0000 (16:14 +0200)
committerakpm <akpm@linux-foundation.org>
Mon, 18 Jul 2022 00:31:38 +0000 (17:31 -0700)
commitdd5b728a53054d921531d5003bb39c2c912ed03f
tree338054a85d0960a804cef2785306515411dab120
parentbf815d24698b1d9c986514aea3faee18e389df9d
compiler-gcc.h: remove ancient workaround for gcc PR 58670

The workaround for 'asm goto' miscompilation introduces a compiler barrier
quirk that inhibits many useful compiler optimizations.  For example,
__try_cmpxchg_user compiles to:

   11375: 41 8b 4d 00           mov    0x0(%r13),%ecx
   11379: 41 8b 02              mov    (%r10),%eax
   1137c: f0 0f b1 0a           lock cmpxchg %ecx,(%rdx)
   11380: 0f 94 c2              sete   %dl
   11383: 84 d2                 test   %dl,%dl
   11385: 75 c4                 jne    1134b <...>
   11387: 41 89 02              mov    %eax,(%r10)

where the barrier inhibits flags propagation from asm when compiled with
gcc-12.

When the mentioned quirk is removed, the following code is generated:

   11553: 41 8b 4d 00           mov    0x0(%r13),%ecx
   11557: 41 8b 02              mov    (%r10),%eax
   1155a: f0 0f b1 0a           lock cmpxchg %ecx,(%rdx)
   1155e: 74 c9                 je     11529 <...>
   11560: 41 89 02              mov    %eax,(%r10)

The refered compiler bug:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670

was fixed for gcc-4.8.2.

Current minimum required version of GCC is version 5.1 which has the above
'asm goto' miscompilation fixed, so remove the workaround.

Link: https://lkml.kernel.org/r/20220624141412.72274-1-ubizjak@gmail.com
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/compiler-gcc.h