linux-stable/arch/mips/include/asm
Linus Torvalds 4356e9f841 work around gcc bugs with 'asm goto' with outputs
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>
2024-02-09 15:57:48 -08:00
..
dec MIPS: dec: prom: Address -Warray-bounds warning 2023-06-23 15:00:29 +02:00
fw add intptr_t 2023-06-09 17:44:13 -07:00
ip32
mach-ath25 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-ath79 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-au1x00 MIPS: Alchemy: Fix missing prototypes 2024-01-22 10:32:36 +01:00
mach-bcm47xx MIPS: BCM47XX: Add support for Huawei B593u-12 2023-03-14 17:05:14 +01:00
mach-bcm63xx PCI: Add defines for normal and subtractive PCI bridges 2022-02-17 15:29:35 -06:00
mach-bmips MIPS: cleanup fixup_bigphys_addr handling 2020-04-19 16:09:44 +02:00
mach-cavium-octeon locking: remove spin_lock_prefetch 2023-08-12 09:18:47 -07:00
mach-cobalt MIPS: Cobalt: Fix missing prototypes 2024-01-22 10:32:21 +01:00
mach-db1x00
mach-dec MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-generic MIPS: Remove no longer used ide.h 2023-04-05 10:08:51 +02:00
mach-ingenic MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-ip22 MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-ip27 MIPS: IP27: Remove incorrect `cpu_has_fpu' override 2022-05-04 22:23:14 +02:00
mach-ip28 MIPS: SGI-IP28: disable use of ll/sc in kernel 2020-10-08 10:33:27 +02:00
mach-ip30 MIPS: IP30: Remove incorrect `cpu_has_fpu' override 2022-05-04 22:23:18 +02:00
mach-ip32 MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-jazz mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
mach-lantiq MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mach-loongson2ef MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-loongson32 MIPS: loongson32: Remove dma.h and nand.h 2023-10-06 10:10:13 +02:00
mach-loongson64 Just cleanups and fixes 2024-01-17 11:20:50 -08:00
mach-malta MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mach-n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
mach-pic32 MIPS: Add header files reference with path prefix 2020-03-19 13:12:27 +01:00
mach-ralink mips: ralink: mt7620: remove clock related code 2023-06-21 14:50:23 +02:00
mach-rc32434 MIPS: Fix a compilation issue 2023-01-27 17:22:06 +01:00
mach-rm MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-sibyte MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-tx49xx MIPS: TXX9: Remove rbtx4939 board support 2022-01-02 14:10:40 +01:00
mips-boards MIPS: Fix typos 2024-01-08 10:39:12 +01:00
octeon MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pci MIPS: PCI: Support mapping of INTB/C/D for pci-xtalk-bridge 2020-01-09 15:30:53 -08:00
sgi MIPS: Fix typos 2024-01-08 10:39:12 +01:00
sibyte MIPS: sibyte: Remove Sibyte CARMEL and CRHINE board support 2023-03-17 10:27:21 +01:00
sn MIPS: Fix typos 2024-01-08 10:39:12 +01:00
txx9 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
vdso MIPS: Fix typos 2024-01-08 10:39:12 +01:00
xtalk
abi.h
addrspace.h
amon.h
arch_hweight.h
asm-eva.h MIPS: Fix typo for user_ld macro definition 2020-04-16 17:30:16 +02:00
asm-offsets.h
asm-prototypes.h MIPS: Restore symbol versions for copy_page_cpu and clear_page_cpu 2022-12-01 11:46:05 +01:00
asm.h MIPS: Workaround clang inline compat branch issue 2023-02-28 23:09:49 +01:00
asmmacro-32.h MIPS: Always use -Wa,-msoft-float and eliminate GAS_HAS_SET_HARDFLOAT 2023-01-26 12:41:16 +09:00
asmmacro-64.h
asmmacro.h MIPS: Drop unused positional parameter in local_irq_{dis,en}able 2023-04-05 10:20:00 +02:00
atomic.h locking/atomic: make atomic*_{cmp,}xchg optional 2023-06-05 09:57:14 +02:00
barrier.h
bcache.h
bitops.h mm: delete checks for xor_unlock_is_negative_byte() 2023-10-18 14:34:17 -07:00
bitrev.h
bmips-spaces.h
bmips.h
bootinfo.h MIPS: Ingenic: Add system type for new Ingenic SoCs. 2021-07-19 13:16:42 +02:00
branch.h MIPS: Fix the declaration conflict of mm_isBranchInstr() 2020-04-24 18:17:44 +02:00
break.h
bug.h
bugs.h mips/cpu: Switch to arch_cpu_finalize_init() 2023-06-16 10:16:00 +02:00
cache.h mips: move cache declarations into header 2023-12-10 17:21:41 -08:00
cacheflush.h mm: Introduce flush_cache_vmap_early() 2023-12-14 00:23:17 -08:00
cacheops.h MIPS: Rename the "Fill" cache ops to avoid build failure 2020-04-26 15:40:50 +02:00
cdmm.h
cevt-r4k.h
checksum.h MIPS: Rewrite `csum_tcpudp_nofold' in plain C 2022-05-23 11:29:59 +02:00
clocksource.h mips: Introduce asm/vdso/clocksource.h 2020-03-21 15:23:55 +01:00
cmp.h
cmpxchg.h locking/arch: Rename all internal __xchg() names to __arch_xchg() 2023-04-29 09:08:44 +02:00
compat-signal.h
compat.h asm-generic: compat: Cleanup duplicate definitions 2022-04-26 13:35:54 -07:00
compiler.h MIPS: remove GCC < 4.9 support 2020-11-11 23:49:22 +01:00
cop2.h MIPS: Remove NETLOGIC support 2021-10-24 17:24:47 +02:00
cpu-features.h MIPS: cpu-features: Use boot_cpu_type for CPU type based features 2023-06-09 09:56:22 +02:00
cpu-info.h MIPS: emulate CPUCFG instruction on older Loongson64 cores 2020-05-24 09:26:55 +02:00
cpu-type.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
cpu.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
cpufeature.h
debug.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
delay.h
div64.h MIPS: Avoid handcoded DIVU in `__div64_32' altogether 2021-04-23 13:40:31 +02:00
dma-direct.h dma-direct: rename and cleanup __phys_to_dma 2020-09-11 09:14:43 +02:00
dma-mapping.h dma-mapping: no need to pass a bus_type into get_arch_dma_ops() 2023-02-15 12:35:20 +01:00
dma.h PCI: Move isa_dma_bridge_buggy out of asm/dma.h 2022-07-22 17:24:47 -05:00
dmi.h mips: dmi: Fix early remap on MIPS32 2023-12-21 15:31:25 +01:00
ds1287.h
dsemul.h
dsp.h
edac.h
elf.h mips compat: switch to compat_binfmt_elf.c 2021-01-06 08:42:49 -05:00
elfcore-compat.h mips compat: switch to compat_binfmt_elf.c 2021-01-06 08:42:49 -05:00
errno.h
eva.h
exec.h
extable.h
fb.h fbdev: Replace fb_pgprotect() with pgprot_framebuffer() 2023-10-12 09:20:46 +02:00
fixmap.h mips: fix comment about pgtable_init() 2023-04-05 19:42:52 -07:00
floppy.h
fpregdef.h MIPS: Always use -Wa,-msoft-float and eliminate GAS_HAS_SET_HARDFLOAT 2023-01-26 12:41:16 +09:00
fpu.h MIPS: Fix unreachable code issue 2021-07-13 15:08:15 -05:00
fpu_emulator.h MIPS: Fix the declaration conflict of mm_isBranchInstr() 2020-04-24 18:17:44 +02:00
ftrace.h arch: add missing prepare_ftrace_return() prototypes 2023-11-23 11:32:32 +01:00
futex.h MIPS: remove asm/war.h 2022-02-22 09:35:49 +01:00
ginvt.h MIPS: Avoid macro redefinitions 2021-09-23 11:23:35 +02:00
gio_device.h MIPS: ip22-gio: Make gio_match_device() static 2020-01-13 10:55:40 -08:00
gt64120.h
hardirq.h
hazards.h MIPS: Remove NETLOGIC support 2021-10-24 17:24:47 +02:00
highmem.h MIPS: Fix PKMAP with 32-bit MIPS huge page support 2021-06-30 14:41:32 +02:00
hpet.h
hugetlb.h mm: change huge_ptep_clear_flush() to return the original pte 2022-05-13 16:48:55 -07:00
hw_irq.h
i8259.h irqchip: Add driver for Loongson-3 HyperTransport PIC controller 2020-03-25 10:56:43 +01:00
idle.h MIPS: idle: Add prototype for function check_wait 2020-09-27 13:00:45 +02:00
inst.h MIPS: Make definitions of MIPSInst_FMA_{FUNC,FMTM} consistent with MIPS64 manual 2021-01-22 11:45:52 +01:00
io.h Just cleanups and fixes 2024-01-17 11:20:50 -08:00
irq.h nmi_backtrace: allow excluding an arbitrary CPU 2023-08-18 10:19:00 -07:00
irq_cpu.h MIPS: Kill RM7K & RM9K IRQ Code 2021-01-04 11:37:27 +01:00
irq_gt641xx.h
irq_regs.h
irqflags.h mips: Implement arch_irqs_disabled() 2020-08-26 12:41:55 +02:00
isa-rev.h
isadep.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
jazz.h
jazzdma.h MIPS/jazzdma: remove the unused vdma_remap function 2020-09-11 08:13:49 +02:00
jump_label.h work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
Kbuild mips: remove <asm/export.h> 2023-08-15 10:22:23 +02:00
kdebug.h
kexec.h mips, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC 2023-12-12 17:20:18 -08:00
kgdb.h mips: kgdb: adjust the comment to the actual ifdef condition 2021-12-16 15:47:58 +01:00
kprobes.h kprobes: unify kprobes_exceptions_nofify() prototypes 2023-11-10 19:59:05 +09:00
kvm_host.h KVM: Convert KVM_ARCH_WANT_MMU_NOTIFIER to CONFIG_KVM_GENERIC_MMU_NOTIFIER 2023-11-13 05:29:09 -05:00
kvm_types.h KVM: MIPS: Use common KVM implementation of MMU memory caches 2020-07-09 13:29:44 -04:00
linkage.h
local.h locking/local, arch: Rewrite local_add_unless() as a static inline function 2023-10-04 11:38:11 +02:00
maar.h mips: MAAR: Add XPA mode support 2020-05-19 17:39:32 +02:00
machine.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
mc146818-time.h
mc146818rtc.h
mips-cm.h mips: cm: Convert to bitfield API to fix out-of-bounds access 2021-11-02 10:53:52 +01:00
mips-cpc.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mips-cps.h MIPS: CPS: Use bitfield helpers 2021-11-29 12:43:06 +01:00
mips-gic.h
mips-r2-to-r6-emul.h
mips_mt.h
mipsmtregs.h MIPS: remove asm/war.h 2022-02-22 09:35:49 +01:00
mipsprom.h
mipsregs.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mmiowb.h mips: add <asm-generic/io.h> including 2023-11-23 10:32:52 +01:00
mmu.h
mmu_context.h mips: use asm-generic/mmu_context.h for no-op implementations 2020-10-27 16:02:36 +01:00
mmzone.h mips: fix setup_zero_pages() prototype 2023-12-10 17:21:40 -08:00
module.h mips: Add MIPS Warrior P5600 support 2020-05-22 09:10:53 +02:00
msa.h MIPS: Avoid macro redefinitions 2021-09-23 11:23:35 +02:00
msc01_ic.h
paccess.h
page.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pci.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
perf_event.h
pgalloc.h mm: add statistics for PUD level pagetable 2023-10-06 14:44:10 -07:00
pgtable-32.h mips: implement the new page table range API 2023-08-24 16:20:22 -07:00
pgtable-64.h mips: implement the new page table range API 2023-08-24 16:20:22 -07:00
pgtable-bits.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pgtable.h mm/mglru: add dummy pmd_dirty() 2024-01-05 10:17:44 -08:00
pm-cps.h
pm.h
prefetch.h
processor.h mips: add missing declarations 2023-12-10 17:21:41 -08:00
prom.h MIPS: Fix wrong comments in asm/prom.h 2022-03-14 15:09:27 +01:00
ptrace.h Revert "MIPS: Add basic support for ptrace single step" 2021-02-18 11:57:44 +01:00
r4k-timer.h MIPS: Correct the header guard of r4k-timer.h 2020-09-18 15:29:00 +02:00
r4kcache.h mips: move cache declarations into header 2023-12-10 17:21:41 -08:00
reboot.h
reg.h
regdef.h
rtlx.h MIPS: Remove deprecated CONFIG_MIPS_CMP 2023-04-12 15:01:09 +02:00
seccomp.h seccomp: Use -1 marker for end of mode 1 syscall list 2020-07-10 16:01:52 -07:00
setup.h mips: fix tlb_init() prototype 2023-12-10 17:21:40 -08:00
sgialib.h
sgiarcs.h
shmparam.h
sigcontext.h
signal.h mips: add missing declarations 2023-12-10 17:21:41 -08:00
sim.h
smp-cps.h MIPS: smp-cps: Don't rely on CP0_CMGCRBASE 2023-02-27 23:44:57 +01:00
smp-ops.h asm-generic cleanups for 6.8 2024-01-10 18:13:44 -08:00
smp.h asm-generic cleanups for 6.8 2024-01-10 18:13:44 -08:00
sni.h MIPS: remove orphan sni_cpu_time_init() declaration 2022-09-19 16:36:55 +02:00
socket.h
sparsemem.h
spinlock.h locking/arch: Move qrwlock.h include after qspinlock.h 2021-02-11 07:59:54 -05:00
spinlock_types.h
spram.h mips: spram: fix missing prototype warning for spram_config 2023-12-10 17:21:41 -08:00
stackframe.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
stackprotector.h stackprotector: actually use get_random_canary() 2022-11-18 02:18:10 +01:00
stacktrace.h
string.h
switch_to.h MIPS: context switch: Use save/restore instead of set/clear for Status.CU2 2020-09-21 22:14:47 +02:00
sync.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
syscall.h mips: fix syscall_get_nr 2023-02-19 09:28:30 +01:00
syscalls.h mips: add asm/syscalls.h header 2023-12-10 17:21:38 -08:00
thread_info.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
time.h
timex.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
tlb.h
tlbdebug.h
tlbex.h mips: move build_tlb_refill_handler() prototype 2023-12-10 17:21:39 -08:00
tlbflush.h
tlbmisc.h
topology.h
traps.h asm-generic cleanups for 6.8 2024-01-10 18:13:44 -08:00
txx9irq.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
txx9pio.h
txx9tmr.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
types.h mips: Remove #include <uapi/asm/types.h> from <asm/types.h> 2020-11-11 23:45:46 +01:00
uaccess.h uaccess: generalize access_ok() 2022-02-25 09:36:05 +01:00
uasm.h mips: unhide uasm_in_compat_space_p() declaration 2023-12-10 17:21:40 -08:00
unaligned-emul.h MIPS: Fix build error due to PTR used in more places 2022-01-27 09:04:19 +01:00
unistd.h fs: stat: compat: Add __ARCH_WANT_COMPAT_STAT 2022-04-26 13:35:45 -07:00
unroll.h treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
uprobes.h
vdso.h
vermagic.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
vga.h
vmalloc.h
vpe.h MIPS: Remove deprecated CONFIG_MIPS_CMP 2023-04-12 15:01:09 +02:00
watch.h
wbflush.h
yamon-dt.h