1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/arch/powerpc/kernel
Mark Rutland 08b0af5b2a powerpc: Avoid discarding flags in system_call_exception()
Some thread flags can be set remotely, and so even when IRQs are disabled,
the flags can change under our feet. Thus, when setting flags we must use
an atomic operation rather than a plain read-modify-write sequence, as a
plain read-modify-write may discard flags which are concurrently set by a
remote thread, e.g.

	// task A			// task B
	tmp = A->thread_info.flags;
					set_tsk_thread_flag(A, NEWFLAG_B);
	tmp |= NEWFLAG_A;
	A->thread_info.flags = tmp;

arch/powerpc/kernel/interrupt.c's system_call_exception() sets
_TIF_RESTOREALL in the thread info flags with a read-modify-write, which
may result in other flags being discarded.

Elsewhere in the file it uses clear_bits() to atomically remove flag bits,
so use set_bits() here for consistency with those.

There may be reasons (e.g. instrumentation) that prevent the use of
set_thread_flag() and clear_thread_flag() here, which would otherwise be
preferable.

Fixes: ae7aaecc3f ("powerpc/64s: system call rfscv workaround for TM bugs")
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Eirik Fuller <efuller@redhat.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Link: https://lore.kernel.org/r/20211129130653.2037928-10-mark.rutland@arm.com
2021-12-01 00:06:44 +01:00
..
ptrace powerpc: Add dear as a synonym for pt_regs.dar register 2021-08-26 21:21:07 +10:00
syscalls futex: Wireup futex_waitv syscall 2021-11-25 14:26:12 +01:00
trace powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
vdso32 powerpc updates for 5.13 2021-04-30 12:22:28 -07:00
vdso64 powerpc/vdso: Don't use r30 to avoid breaking Go lang 2021-07-29 23:13:12 +10:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
align.c powerpc: warn on emulation of dcbz instruction in kernel mode 2021-10-22 15:22:05 +11:00
asm-offsets.c powerpc: smp: remove hack to obtain offset of task_struct::cpu 2021-09-30 16:13:11 +02:00
audit.c Revert "powerpc/audit: Convert powerpc to AUDIT_ARCH_COMPAT_GENERIC" 2021-10-27 22:30:32 +11:00
btext.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
cacheinfo.c powerpc/smp: Use existing L2 cache_map cpumask to find L3 cache siblings 2021-08-04 10:53:39 +10:00
cacheinfo.h powerpc/cacheinfo: add cacheinfo_teardown, cacheinfo_rebuild 2019-06-15 16:52:06 +10:00
compat_audit.c Revert "powerpc/audit: Convert powerpc to AUDIT_ARCH_COMPAT_GENERIC" 2021-10-27 22:30:32 +11:00
cpu_setup_6xx.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
cpu_setup_44x.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cpu_setup_fsl_booke.S powerpc: Retire e200 core (mpc555x processor) 2020-12-05 21:49:18 +11:00
cpu_setup_pa6t.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
cpu_setup_power.c powerpc/perf: MMCR0 control for PMU registers under PMCC=00 2020-12-04 01:01:29 +11:00
cpu_setup_ppc970.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cputable.c arch: powerpc: Stop building and using oprofile 2021-01-29 10:05:51 +05:30
crash_dump.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
dawr.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
dbell.c powerpc: handle irq_enter/irq_exit in interrupt handler wrappers 2021-02-09 00:10:49 +11:00
dma-iommu.c powerpc/iommu: Report the correct most efficient DMA mask for PCI devices 2021-09-30 17:10:17 +10:00
dma-mask.c dma-mapping, powerpc: simplify the arch dma_set_mask override 2019-02-18 22:41:03 +11:00
dma-swiotlb.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dt_cpu_ftrs.c memblock: use memblock_free for freeing virtual pointers 2021-11-06 13:30:41 -07:00
early_32.c powerpc/fsl_booke/32: implement KASLR infrastructure 2019-11-13 19:27:40 +11:00
eeh.c pci-v5.16-changes 2021-11-06 14:36:12 -07:00
eeh_cache.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
eeh_driver.c powerpc/eeh: Use to_pci_driver() instead of pci_dev->driver 2021-10-18 09:20:15 -05:00
eeh_event.c powerpc/eeh: Fix build with STACKTRACE=n 2019-09-14 00:01:14 +10:00
eeh_pe.c powerpc/eeh: Delete eeh_pe->config_addr 2020-10-07 22:34:47 +11:00
eeh_sysfs.c powerpc/eeh: Pass eeh_dev to eeh_ops->resume_notify() 2020-07-26 23:34:20 +10:00
entry_32.S powerpc/32: indirect function call use bctrl rather than blrl in ret_from_kernel_thread 2021-08-25 13:35:47 +10:00
entry_64.S powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto 2021-08-15 13:49:24 +10:00
epapr_hcalls.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
epapr_paravirt.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
exceptions-64e.S powerpc/64e: Get dear offset with _DEAR macro 2021-08-26 21:21:07 +10:00
exceptions-64s.S powerpc/64s: Fix unrecoverable MCE calling async handler from NMI 2021-10-07 19:54:55 +11:00
fadump.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
firmware.c powerpc: fix unbalanced node refcount in check_kvm_guest() 2021-10-09 00:15:59 +11:00
fpu.S powerpc/32: Remove unneccessary calculations in load_up_{fpu/altivec} 2021-08-18 23:49:55 +10:00
fsl_booke_entry_mapping.S powerpc/booke: Avoid link stack corruption in several places 2021-08-25 13:35:47 +10:00
head_8xx.S powerpc/8xx: Fix pinned TLBs with CONFIG_STRICT_KERNEL_RWX 2021-11-16 21:37:10 +11:00
head_32.h powerpc/32: Fix hardlockup on vmap stack overflow 2021-11-24 21:00:51 +11:00
head_40x.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
head_44x.S powerpc/booke: Avoid link stack corruption in several places 2021-08-25 13:35:47 +10:00
head_64.S powerpc/kexec: blacklist functions called in real mode for kprobe 2021-07-26 20:38:51 +10:00
head_book3s_32.S powerpc/32s: Fix napping restore in data storage interrupt (DSI) 2021-08-07 08:53:59 +10:00
head_booke.h powerpc/32e: Ignore ESR in instruction storage interrupt handler 2021-10-29 23:12:37 +11:00
head_fsl_booke.S powerpc updates for 5.15 2021-09-03 11:22:50 -07:00
hw_breakpoint.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
hw_breakpoint_constraints.c powerpc/breakpoint: Cleanup 2021-10-22 15:22:06 +11:00
idle.c sched/idle: Fix arch_cpu_idle() vs tracing 2020-11-24 16:47:35 +01:00
idle_6xx.S powerpc/32: Return directly from power_save_ppc32_restore() 2021-03-29 13:22:10 +11:00
idle_book3e.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
idle_book3s.S powerpc/idle: Don't corrupt back chain when going idle 2021-10-20 21:37:58 +11:00
idle_e500.S powerpc/32: Return directly from power_save_ppc32_restore() 2021-03-29 13:22:10 +11:00
ima_arch.c powerpc/ima: Fix secure boot rules in ima arch policy 2020-05-07 17:25:54 +10:00
interrupt.c powerpc: Avoid discarding flags in system_call_exception() 2021-12-01 00:06:44 +01:00
interrupt_64.S powerpc/64s: system call scv tabort fix for corrupt irq soft-mask state 2021-09-13 22:34:11 +10:00
io-workarounds.c powerpc: Fix reverse map real-mode address lookup with huge vmalloc 2021-05-28 22:54:27 +10:00
io.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
iomap.c powerpc: inline iomap accessors 2020-12-04 01:01:09 +11:00
iommu.c powerpc updates for 5.15 2021-09-03 11:22:50 -07:00
irq.c powerpc/64: warn if local irqs are enabled in NMI or hardirq context 2021-10-07 19:54:55 +11:00
isa-bridge.c mm/vmalloc: remove unmap_kernel_range 2021-04-30 11:20:40 -07:00
jump_label.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
kdebugfs.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
kgdb.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
kprobes-ftrace.c ftrace: disable preemption when recursion locked 2021-10-27 11:21:49 -04:00
kprobes.c kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
kvm.c gup: Turn fault_in_pages_{readable,writeable} into fault_in_{readable,writeable} 2021-10-18 16:33:03 +02:00
kvm_emul.S powerpc/kvm: Add ifdefs around template code 2019-09-14 00:04:40 +10:00
l2cr_6xx.S powerpc: Drop SYNC_601() ISYNC_601() and SYNC() 2020-10-08 21:17:13 +11:00
legacy_serial.c powerpc/legacy_serial: Fix UBSAN: array-index-out-of-bounds 2021-05-12 11:07:39 +10:00
Makefile powerpc: clean vdso32 and vdso64 directories 2021-11-15 15:46:45 +11:00
mce.c powerpc/mce: Fix access error in mce handler 2021-09-13 22:34:12 +10:00
mce_power.c powerpc/powernv: Fix machine check reporting of async store errors 2021-06-21 21:13:19 +10:00
misc.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
misc_32.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
misc_64.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
module.c powerpc/modules: Make module_alloc() Strict Module RWX aware 2021-06-21 21:13:20 +10:00
module_32.c powerpc/modules: Use PPC_RAW_xx() macros 2021-06-16 00:16:48 +10:00
module_64.c powerpc/modules: Use PPC_RAW_xx() macros 2021-06-16 00:16:48 +10:00
msi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
note.S powerpc: Add PowerPC Capabilities ELF note 2019-08-30 09:40:15 +10:00
nvram_64.c printk: introduce a kmsg_dump iterator 2021-03-08 11:43:27 +01:00
of_platform.c powerpc/eeh: Remove eeh_dev_phb_init_dynamic() 2020-07-26 23:34:19 +10:00
optprobes.c kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
optprobes_head.S powerpc: Enable OPTPROBES on PPC32 2021-04-21 22:52:32 +10:00
paca.c memblock: rename memblock_free to memblock_phys_free 2021-11-06 13:30:41 -07:00
pci-common.c PCI: Rename pcibios_add_device() to pcibios_device_add() 2021-09-21 15:26:09 -05:00
pci-hotplug.c powerpc/eeh: Release EEH device state synchronously 2020-05-18 21:58:44 +10:00
pci_32.c powerpc/64: Adjust order in pcibios_init() 2019-08-22 23:11:48 +10:00
pci_64.c mm/vmalloc: remove unmap_kernel_range 2021-04-30 11:20:40 -07:00
pci_dn.c powerpc/pci: Move PHB discovery for PCI_DN using platforms 2021-02-09 00:01:05 +11:00
pci_of_scan.c powerpc/pci: Remove pcibios_setup_bus_devices() 2020-01-06 16:25:29 +11:00
pmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ppc32.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ppc_save_regs.S powerpc: Improve ppc_save_regs() 2020-04-04 21:40:57 +11:00
proc_powerpc.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
process.c sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
prom.c Kbuild updates for v5.15 2021-09-03 15:33:47 -07:00
prom_init.c Kbuild updates for v5.15 2021-09-03 15:33:47 -07:00
prom_init_check.sh powerpc/prom_init: Undo relocation before entering secure mode 2019-10-29 15:12:17 +11:00
prom_parse.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
reloc_32.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
reloc_64.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtas-proc.c powerpc/rtas: rename RTAS_RMOBUF_MAX to RTAS_USER_REGION_SIZE 2021-04-14 23:04:16 +10:00
rtas-rtc.c powerpc/rtas-rtc: remove unused constant 2021-06-25 14:47:20 +10:00
rtas.c isystem: ship and use stdarg.h 2021-08-19 09:02:55 +09:00
rtas_flash.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
rtas_pci.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
rtasd.c powerpc: Replace deprecated CPU-hotplug functions. 2021-08-10 23:14:56 +10:00
secure_boot.c powerpc/pseries: Detect secure and trusted boot state of the system. 2020-07-16 14:49:53 +10:00
security.c powerpc/security: Add a helper to query stf_barrier type 2021-10-07 19:52:58 +11:00
secvar-ops.c powerpc/powernv: Add OPAL API interface to access secure variable 2019-11-13 00:33:22 +11:00
secvar-sysfs.c powerpc: expose secure variables to userspace via sysfs 2019-11-13 00:33:22 +11:00
setup-common.c Merge branch 'akpm' (patches from Andrew) 2021-11-06 14:08:17 -07:00
setup.h powerpc: remove unneeded semicolons 2021-02-09 00:10:50 +11:00
setup_32.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
setup_64.c mm/memory_hotplug: remove CONFIG_MEMORY_HOTPLUG_SPARSE 2021-11-06 13:30:42 -07:00
signal.c entry: rseq: Call rseq_handle_notify_resume() in tracehook_notify_resume() 2021-09-22 10:24:01 -04:00
signal.h powerpc/signal32: Fix sigset_t copy 2021-11-16 21:24:16 +11:00
signal_32.c signal: Replace force_fatal_sig with force_exit_sig when in doubt 2021-11-19 09:15:58 -06:00
signal_64.c signal: Replace force_fatal_sig with force_exit_sig when in doubt 2021-11-19 09:15:58 -06:00
smp-tbsync.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
smp.c Devicetree updates for v5.16: 2021-11-02 22:22:13 -07:00
stacktrace.c kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
static_call.c powerpc/32: Add support for out-of-line static calls 2021-10-22 15:22:05 +11:00
suspend.c PM: hibernate: powerpc: Expose pfn_is_nosave() prototype 2019-06-14 10:48:56 +02:00
swsusp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
swsusp_32.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
swsusp_64.c powerpc/machdep: Remove stale functions from ppc_md structure 2021-10-22 15:22:05 +11:00
swsusp_asm64.S powerpc/machdep: Remove stale functions from ppc_md structure 2021-10-22 15:22:05 +11:00
swsusp_booke.S License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sys_ppc32.c powerpc/compat_sys: swap hi/lo parts of 64-bit syscall args in LE mode 2021-02-11 23:35:07 +11:00
syscalls.c powerpc/syscalls: Simplify do_mmap2() 2021-08-25 13:35:48 +10:00
sysfs.c powerpc/cpuhp: BUG -> WARN conversion in offline path 2021-10-09 00:16:00 +11:00
systbl.S powerpc/syscalls: switch to generic syscalltbl.sh 2021-04-14 23:04:16 +10:00
systbl_chk.sh treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
tau_6xx.c powerpc/tau: Add 'static' storage qualifier to 'tau_work' definition 2021-08-20 17:00:53 +10:00
time.c powerpc/time: Remove generic_suspend_{dis/en}able_irqs() 2021-10-22 15:22:05 +11:00
tm.S powerpc/tm: Save and restore AMR on treclaim and trechkpt 2020-10-06 23:22:25 +11:00
traps.c powerpc/64s: Fix unrecoverable MCE calling async handler from NMI 2021-10-07 19:54:55 +11:00
ucall.S powerpc/kernel: Add ucall_norets() ultravisor call handler 2019-08-30 09:40:15 +10:00
udbg.c isystem: ship and use stdarg.h 2021-08-19 09:02:55 +09:00
udbg_16550.c powerpc/microwatt: Use standard 16550 UART for console 2021-06-21 21:16:31 +10:00
uprobes.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
vdso.c powerpc/vdso: Add support for time namespaces 2021-04-14 23:04:44 +10:00
vdso32_wrapper.S powerpc/vdso: fix unnecessary rebuilds of vgettimeofday.o 2021-01-30 22:23:42 +11:00
vdso64_wrapper.S powerpc/vdso: fix unnecessary rebuilds of vgettimeofday.o 2021-01-30 22:23:42 +11:00
vecemu.c powerpc: Define and use get_user_instr() et. al. 2020-05-19 00:10:37 +10:00
vector.S powerpc/32: Remove unneccessary calculations in load_up_{fpu/altivec} 2021-08-18 23:49:55 +10:00
vmlinux.lds.S powerpc: Mark .opd section read-only 2021-10-14 21:47:34 +11:00
watchdog.c Merge branch 'rework/printk_safe-removal' into for-linus 2021-11-18 10:03:47 +01:00