linux-stable/arch/s390/include/asm
Linus Torvalds aaff74d886 work around gcc bugs with 'asm goto' with outputs
commit 4356e9f841 upstream.

We've had issues with gcc and 'asm goto' before, and we created a
'asm_volatile_goto()' macro for that in the past: see commits
3f0116c323 ("compiler/gcc4: Add quirk for 'asm goto' miscompilation
bug") and a9f180345f ("compiler/gcc4: Make quirk for
asm_volatile_goto() unconditional").

Then, much later, we ended up removing the workaround in commit
43c249ea0b ("compiler-gcc.h: remove ancient workaround for gcc PR
58670") because we no longer supported building the kernel with the
affected gcc versions, but we left the macro uses around.

Now, Sean Christopherson reports a new version of a very similar
problem, which is fixed by re-applying that ancient workaround.  But the
problem in question is limited to only the 'asm goto with outputs'
cases, so instead of re-introducing the old workaround as-is, let's
rename and limit the workaround to just that much less common case.

It looks like there are at least two separate issues that all hit in
this area:

 (a) some versions of gcc don't mark the asm goto as 'volatile' when it
     has outputs:

        https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98619
        https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110420

     which is easy to work around by just adding the 'volatile' by hand.

 (b) Internal compiler errors:

        https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110422

     which are worked around by adding the extra empty 'asm' as a
     barrier, as in the original workaround.

but the problem Sean sees may be a third thing since it involves bad
code generation (not an ICE) even with the manually added 'volatile'.

but the same old workaround works for this case, even if this feels a
bit like voodoo programming and may only be hiding the issue.

Reported-and-tested-by: Sean Christopherson <seanjc@google.com>
Link: https://lore.kernel.org/all/20240208220604.140859-1-seanjc@google.com/
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Uros Bizjak <ubizjak@gmail.com>
Cc: Jakub Jelinek <jakub@redhat.com>
Cc: Andrew Pinski <quic_apinski@quicinc.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-23 09:24:47 +01:00
..
fpu s390/vx: fix save/restore of fpu kernel context 2024-01-01 12:42:26 +00:00
trace
vdso s390/vdso: use system call functions 2021-07-27 09:39:15 +02:00
Kbuild s390: remove <asm/export.h> 2023-08-09 15:20:51 +02:00
abs_lowcore.h s390/mm: allocate Absolute Lowcore Area in decompressor 2023-01-13 14:15:06 +01:00
airq.h s390/airq: remove lsi_mask from airq_struct 2023-08-30 11:03:28 +02:00
alternative-asm.h s390/alternatives: remove padding generation code 2022-05-17 15:16:28 +02:00
alternative.h s390/alternatives: remove padding generation code 2022-05-17 15:16:28 +02:00
ap.h s390: fix various typos 2023-07-03 11:19:42 +02:00
appldata.h s390: include linux/io.h instead of asm/io.h 2023-07-03 11:19:40 +02:00
archrandom.h Random number generator updates for Linux 6.0-rc1. 2022-08-02 17:31:35 -07:00
asm-const.h
asm-extable.h s390: consistently use .balign instead of .align 2023-06-28 13:57:09 +02:00
asm-prototypes.h s390: select ARCH_SUPPORTS_INT128 2023-05-15 14:12:14 +02:00
atomic.h locking/atomic: make ARCH_ATOMIC a Kconfig symbol 2021-05-26 13:20:49 +02:00
atomic_ops.h s390/atomic,cmpxchg: make constraints work with old compilers 2021-04-15 17:47:42 +02:00
barrier.h s390: add KCSAN instrumentation to barriers and spinlocks 2022-04-25 13:54:16 +02:00
bitops.h provide arch_test_bit_acquire for architectures that define test_bit 2022-08-27 09:49:54 -07:00
boot_data.h
bug.h bug: Use normal relative pointers in 'struct bug_entry' 2022-05-19 23:46:10 +02:00
cache.h
ccwdev.h s390/cio: introduce locking for register/unregister functions 2023-01-31 18:56:36 +01:00
ccwgroup.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
checksum.h s390/checksum: remove not needed uaccess.h include 2023-04-13 17:36:25 +02:00
chpid.h
chsc.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
cio.h s390/stp: clock_delta should be signed 2022-05-11 14:40:57 +02:00
clocksource.h
clp.h
cmb.h
cmpxchg.h arch: Remove cmpxchg_double 2023-06-05 09:36:39 +02:00
compat.h s390/uapi: cover statfs padding by growing f_spare 2023-05-17 15:20:17 +02:00
cpacf.h s390/pkey: add support for ecc clear key 2023-06-01 17:10:21 +02:00
cpcmd.h
cpu.h s390: add support for BEAR enhancement facility 2021-10-26 15:21:29 +02:00
cpu_mf-insn.h
cpu_mf.h s390/cpum_sf: Convert to cmpxchg128() 2023-06-05 09:36:40 +02:00
cpufeature.h s390/uvdevice: autoload module based on CPU facility 2022-07-19 16:18:49 +02:00
cputime.h s390/idle: remove arch_cpu_idle_time() and corresponding code 2023-02-09 20:11:23 +01:00
crw.h s390: remove invalid email address of Heiko Carstens 2022-02-06 23:31:29 +01:00
css_chars.h
ctl_reg.h s390/pai: Add support for PAI Extension 1 NNPA counters 2022-09-16 18:36:25 +02:00
current.h
debug.h docs: move s390 under arch 2023-07-24 12:12:24 +02:00
delay.h
diag.h s390/diag: handle diag 204 subcode 4 address correctly 2023-07-24 12:12:21 +02:00
dis.h
dma.h s390/mm: fix MAX_DMA_ADDRESS physical vs virtual confusion 2023-09-05 20:12:51 +02:00
dwarf.h
eadm.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
ebcdic.h
elf.h s390/hwcaps: make sie capability regular hwcap 2021-07-27 09:39:21 +02:00
entry-common.h s390: move on_thread_stack() to processor.h 2023-04-04 18:34:56 +02:00
exec.h
extable.h s390/extable: convert to relative table with data 2022-03-08 00:33:00 +01:00
extmem.h
facility.h include/linux/delay.h: replace kernel.h with the necessary inclusions 2021-11-09 10:02:49 -08:00
fcx.h s390/fcx: replace zero-length array with flexible-array member 2023-04-13 17:36:28 +02:00
ftrace.h s390/ftrace: enable HAVE_FUNCTION_GRAPH_RETVAL 2023-07-24 12:12:22 +02:00
ftrace.lds.h s390/ftrace: implement hotpatching 2021-08-03 14:31:40 +02:00
futex.h s390/futex: add missing EX_TABLE entry to __futex_atomic_op() 2022-10-26 14:47:31 +02:00
gmap.h KVM: s390: pv: refactor s390_reset_acc 2022-07-13 14:42:11 +00:00
hardirq.h
hugetlb.h mm: hugetlb: add huge page size param to set_huge_pte_at() 2023-09-29 17:20:47 -07:00
hw_irq.h
idals.h vfio/ccw: calculate number of IDAWs regardless of format 2023-01-09 14:34:08 +01:00
idle.h s390/irq,idle: simplify idle check 2023-02-15 11:07:01 +01:00
io.h s390: mm: convert to GENERIC_IOREMAP 2023-08-18 10:12:34 -07:00
ipl.h s390/ipl: add eckd dump support 2022-12-06 16:18:22 +01:00
irq.h s390/irq: use assignment instead of cast 2022-03-08 00:33:01 +01:00
irq_work.h arch: consolidate arch_irq_work_raise prototypes 2024-02-05 20:14:17 +00:00
irqflags.h s390/irqflags: always inline arch irqflags functions 2021-06-18 16:41:19 +02:00
isc.h
itcw.h
jump_label.h work around gcc bugs with 'asm goto' with outputs 2024-02-23 09:24:47 +01:00
kasan.h s390/kasan: move shadow mapping to decompressor 2023-03-20 11:02:51 +01:00
kdebug.h exit: Remove calls of do_exit after noreturn versions of die 2021-10-20 13:09:47 -05:00
kexec.h kexec: drop weak attribute from functions 2022-07-15 12:21:16 -04:00
kfence.h s390/mm: make virt_to_pfn() a static inline 2023-08-16 15:13:03 +02:00
kprobes.h s390/rethook: add local rethook header file 2023-02-06 11:13:53 +01:00
kvm_host.h KVM: s390: Add UV feature negotiation 2023-08-28 09:27:55 +00:00
kvm_para.h KVM: s390: generate kvm hypercall functions 2021-08-25 11:03:35 +02:00
linkage.h s390: make use of CONFIG_FUNCTION_ALIGNMENT 2023-03-20 11:12:46 +01:00
lowcore.h s390/entry: remove mcck clock 2023-07-03 11:19:42 +02:00
maccess.h s390/mm: define Real Memory Copy size and mask macros 2023-08-16 15:13:02 +02:00
mem_encrypt.h s390/mm: fix virtual-physical address confusion for swiotlb 2022-11-07 14:33:40 +01:00
mmu.h s390 updates for 5.20 merge window 2022-08-06 17:05:21 -07:00
mmu_context.h KVM: s390: pv: usage counter instead of flag 2022-07-13 14:42:11 +00:00
mmzone.h
module.h s390/ftrace: implement hotpatching 2021-08-03 14:31:40 +02:00
msi.h irq/s390: Add arch_is_isolated_msi() for s390 2023-01-11 16:27:23 -04:00
nmi.h s390/mcck: cleanup user process termination path 2023-02-28 13:19:05 +01:00
nospec-branch.h s390: introduce nospec_uses_trampoline() 2021-10-26 15:21:29 +02:00
nospec-insn.h s390/expoline: use __ALIGN instead of open coded .align 2023-03-20 11:12:47 +01:00
numa.h
os_info.h s390/ipl: add REIPL_CLEAR flag to os_info 2023-06-01 17:07:56 +02:00
page-states.h
page.h s390/mm: make virt_to_pfn() a static inline 2023-08-16 15:13:03 +02:00
pai.h s390/pai: move enum definition to header file 2022-10-26 14:46:51 +02:00
pci.h s390/pci: use lock-free I/O translation updates 2022-11-19 10:28:18 +01:00
pci_clp.h s390/pci: stash dtsm and maxstbl 2022-07-11 09:54:24 +02:00
pci_debug.h s390/pci: add error record for CC 2 retries 2022-04-25 13:54:15 +02:00
pci_dma.h iommu/s390: Push the gfp parameter to the kmem_cache_alloc()'s 2023-01-25 11:52:06 +01:00
pci_insn.h KVM: s390: pci: do initial setup for AEN interpretation 2022-07-11 09:54:28 +02:00
pci_io.h s390/pci: fix max size calculation in zpci_memcpy_toio() 2024-01-25 15:35:56 -08:00
percpu.h arch: Remove cmpxchg_double 2023-06-05 09:36:39 +02:00
perf_event.h s390/cpum_sf: remove flag PERF_CPUM_SF_FULL_BLOCKS 2023-03-27 17:19:52 +02:00
pfault.h s390/pfault: cleanup inline assemblies 2023-07-29 14:57:18 +02:00
pgalloc.h s390: convert various pgalloc functions to use ptdescs 2023-08-21 13:37:54 -07:00
pgtable.h Add x86 shadow stack support 2023-08-31 12:20:12 -07:00
physmem_info.h s390/boot: fix physmem_info virtual vs physical address confusion 2023-06-20 19:52:13 +02:00
pkey.h s390/pkey: do not use struct pkey_protkey 2023-06-01 17:10:21 +02:00
pnet.h
preempt.h s390/preempt: disable __preempt_count_add() optimization for PROFILE_ALL_BRANCHES 2022-05-11 14:40:58 +02:00
processor.h s390/stackleak: provide fast __stackleak_poison() implementation 2023-04-20 11:36:35 +02:00
ptdump.h
ptrace.h s390/ptrace: make all psw related defines also available for asm 2023-07-03 11:19:39 +02:00
purgatory.h
qdio.h s390/qdio: Fix spelling mistake 2022-06-30 19:40:36 +02:00
runtime_instr.h
rwonce.h s390/rwonce: add READ_ONCE_ALIGNED_128() macro 2023-02-28 13:19:05 +01:00
schid.h
sclp.h s390: add support for user-defined certificates 2023-07-24 12:12:21 +02:00
scsw.h s390/dasd: suppress generic error messages for PPRC secondary devices 2022-09-21 08:32:51 -06:00
seccomp.h
sections.h s390/amode31: change type of __samode31, __eamode31, etc 2023-08-30 11:03:27 +02:00
set_memory.h s390/set_memory: add __set_memory() variant 2023-08-30 11:03:28 +02:00
setup.h s390: remove "noexec" option 2023-08-30 11:03:27 +02:00
signal.h
sigp.h s390/sigp: use register pair instead of register asm 2021-06-18 16:41:22 +02:00
smp.h s390/dump: save IPL CPU registers once DAT is available 2022-09-14 16:46:00 +02:00
softirq_stack.h asm-generic: Conditionally enable do_softirq_own_stack() via Kconfig. 2022-09-05 17:20:55 +02:00
sparsemem.h
spinlock.h s390/alternatives: provide identical sized orginal/alternative sequences 2022-05-17 15:16:28 +02:00
spinlock_types.h locking: Allow to include asm/spinlock_types.h from linux/spinlock_types_raw.h 2021-12-07 15:14:12 +01:00
stacktrace.h s390/kdump: remove nodat stack restriction for calling nodat functions 2023-04-19 17:24:16 +02:00
stp.h s390/stp: fix todoff size 2022-05-11 14:40:57 +02:00
string.h s390/kasan: remove override of mem*() functions 2023-04-19 17:24:16 +02:00
switch_to.h
syscall.h arch: remove unused function syscall_set_arguments() 2021-09-14 16:06:20 +02:00
syscall_wrapper.h posix-timers: Get rid of [COMPAT_]SYS_NI() uses 2024-01-20 11:51:46 +01:00
sysinfo.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
text-patching.h s390: introduce text_poke_sync() 2021-10-11 20:55:58 +02:00
thread_info.h thread_info: move function declarations to linux/thread_info.h 2023-06-09 17:44:16 -07:00
timex.h s390/time: Provide sched_clock_noinstr() 2023-06-05 21:11:06 +02:00
tlb.h s390: convert various pgalloc functions to use ptdescs 2023-08-21 13:37:54 -07:00
tlbflush.h s390: convert ".insn" encoding to instruction names 2022-03-10 15:58:17 +01:00
topology.h
tpi.h KVM: s390: pci: enable host forwarding of Adapter Event Notifications 2022-07-11 09:54:29 +02:00
types.h s390: introduce register pair union 2021-06-18 16:41:21 +02:00
uaccess.h s390/uaccess: avoid __ashlti3() call 2023-01-04 17:54:50 +01:00
unistd.h fs: stat: compat: Add __ARCH_WANT_COMPAT_STAT 2022-04-26 13:35:45 -07:00
unwind.h s390/kprobes: replace kretprobe with rethook 2023-01-22 18:42:35 +01:00
uprobes.h
user.h asm/user.h: killed unused macros 2022-01-30 21:17:00 -05:00
uv.h KVM: s390: pv: Allow AP-instructions for pv-guests 2023-08-28 09:27:56 +00:00
vdso.h s390/vdso: add minimal compat vdso 2021-07-08 15:37:28 +02:00
vmalloc.h
vmlinux.lds.h
vtime.h
vtimer.h
vx-insn-asm.h s390/vx: add vx-insn.h wrapper include file 2022-12-06 16:18:23 +01:00
vx-insn.h s390/vx: add vx-insn.h wrapper include file 2022-12-06 16:18:23 +01:00
xor.h