linux/arch/powerpc/kernel
Nicholas Piggin 13799748b9 powerpc/64: use interrupt restart table to speed up return from interrupt
Use the restart table facility to return from interrupt or system calls
without disabling MSR[EE] or MSR[RI].

Interrupt return asm is put into the low soft-masked region, to prevent
interrupts being processed here, although they are still taken as masked
interrupts which causes SRRs to be clobbered, and a pending soft-masked
interrupt to require replaying.

The return code uses restart table regions to redirct to a fixup handler
rather than continue with the exit, if such an interrupt happens. In
this case the interrupt return is redirected to a fixup handler which
reloads r1 for the interrupt stack and reloads registers and sets state
up to replay the soft-masked interrupt and try the exit again.

Some types of security exit fallback flushes and barriers are currently
unable to cope with reentrant interrupts, e.g., because they store some
state in the scratch SPR which would be clobbered even by masked
interrupts. For now the interrupts-enabled exits are disabled when these
flushes are used.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[mpe: Guard unused exit_must_hard_disable() as reported by lkp]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210617155116.2167984-13-npiggin@gmail.com
2021-06-25 00:06:56 +10:00
..
ptrace powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
syscalls Add Landlock, a new LSM from Mickaël Salaün <mic@linux.microsoft.com> 2021-05-01 18:50:44 -07: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: Add support for time namespaces 2021-04-14 23:04:44 +10:00
.gitignore
align.c powerpc: Rename probe_kernel_read_inst() 2021-04-21 22:52:33 +10:00
asm-offsets.c powerpc/64: use interrupt restart table to speed up return from interrupt 2021-06-25 00:06:56 +10:00
audit.c
btext.c
cacheinfo.c powerpc/cacheinfo: Print correct cache-sibling map/list for L2 cache 2020-12-11 00:10:25 +11:00
cacheinfo.h
compat_audit.c
cpu_setup_6xx.S
cpu_setup_44x.S
cpu_setup_fsl_booke.S powerpc: Retire e200 core (mpc555x processor) 2020-12-05 21:49:18 +11:00
cpu_setup_pa6t.S
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
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
dbell.c powerpc: handle irq_enter/irq_exit in interrupt handler wrappers 2021-02-09 00:10:49 +11:00
dma-iommu.c powerpc/dma: Fallback to dma_ops when persistent memory present 2020-11-27 10:33:42 +01:00
dma-mask.c
dma-swiotlb.c
dt_cpu_ftrs.c arch: powerpc: Stop building and using oprofile 2021-01-29 10:05:51 +05:30
early_32.c
eeh.c powerpc: Fix reverse map real-mode address lookup with huge vmalloc 2021-05-28 22:54:27 +10:00
eeh_cache.c
eeh_driver.c
eeh_event.c
eeh_pe.c
eeh_sysfs.c
entry_32.S powerpc: Don't handle ALTIVEC/SPE in ASM in _switch(). Do it in C. 2021-06-16 00:16:47 +10:00
entry_64.S powerpc/64: move interrupt return asm to interrupt_64.S 2021-06-25 00:06:55 +10:00
epapr_hcalls.S
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/64: treat low kernel text as irqs soft-masked 2021-06-25 00:06:56 +10:00
exceptions-64s.S powerpc/64: treat low kernel text as irqs soft-masked 2021-06-25 00:06:56 +10:00
fadump.c powerpc/fadump: Fix sparse warnings 2021-04-22 20:59:04 +10:00
firmware.c powerpc: Reintroduce is_kvm_guest() as a fast-path check 2020-12-04 01:01:22 +11:00
fpu.S powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
fsl_booke_entry_mapping.S
head_8xx.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
head_32.h powerpc/32s: Move KUEP locking/unlocking in C 2021-03-29 13:22:10 +11:00
head_40x.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
head_44x.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
head_64.S powerpc/64: move interrupt return asm to interrupt_64.S 2021-06-25 00:06:55 +10:00
head_book3s_32.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
head_booke.h powerpc/32s: Move KUEP locking/unlocking in C 2021-03-29 13:22:10 +11:00
head_fsl_booke.S powerpc: Define swapper_pg_dir[] in C 2021-06-17 00:09:10 +10:00
hw_breakpoint.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
hw_breakpoint_constraints.c powerpc/uaccess: Remove __get/put_user_inatomic() 2021-04-03 21:21:41 +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
idle_book3s.S powerpc/64s: power4 nap fixup in C 2021-04-08 21:17:45 +10:00
idle_e500.S powerpc/32: Return directly from power_save_ppc32_restore() 2021-03-29 13:22:10 +11:00
ima_arch.c
interrupt.c powerpc/64: use interrupt restart table to speed up return from interrupt 2021-06-25 00:06:56 +10:00
interrupt_64.S powerpc/64: use interrupt restart table to speed up return from interrupt 2021-06-25 00:06:56 +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
iomap.c powerpc: inline iomap accessors 2020-12-04 01:01:09 +11:00
iommu.c Revert "powerpc/kernel/iommu: Align size for IOMMU_PAGE_SIZE() to save TCEs" 2021-06-01 11:17:08 +10:00
irq.c powerpc/64: interrupt soft-enable race fix 2021-06-25 00:06:56 +10: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
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 powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
kprobes.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
kvm.c
kvm_emul.S
l2cr_6xx.S
legacy_serial.c powerpc/legacy_serial: Fix UBSAN: array-index-out-of-bounds 2021-05-12 11:07:39 +10:00
Makefile powerpc/vdso: Make sure vdso_wrapper.o is rebuilt everytime vdso.so is rebuilt 2021-04-02 00:18:09 +11:00
mce.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +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
misc_32.S powerpc/32: Remove __main() 2021-06-17 00:09:10 +10:00
misc_64.S powerpc/irq: Inline call_do_irq() and call_do_softirq() 2021-03-29 13:22:17 +11: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
note.S
nvram_64.c printk: introduce a kmsg_dump iterator 2021-03-08 11:43:27 +01:00
of_platform.c
optprobes.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
optprobes_head.S powerpc: Enable OPTPROBES on PPC32 2021-04-21 22:52:32 +10:00
paca.c powerpc/paca: Remove mm_ctx_id and mm_ctx_slb_addr_limit 2021-05-17 15:27:15 +10:00
pci-common.c powerpc/pci: Add ppc_md.discover_phbs() 2021-02-03 09:46:36 +11:00
pci-hotplug.c
pci_32.c
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
pmc.c
ppc32.h
ppc_save_regs.S
proc_powerpc.c
process.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
prom.c powerpc/smp: Cache CPU to chip lookup 2021-04-17 10:40:51 +10:00
prom_init.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
prom_init_check.sh
prom_parse.c
reloc_32.S
reloc_64.S
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
rtas.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
rtas_flash.c
rtas_pci.c
rtasd.c
secure_boot.c
security.c powerpc/security: Add a security feature for STF barrier 2021-06-21 21:13:19 +10:00
secvar-ops.c
secvar-sysfs.c
setup-common.c powerpc: Fix section mismatch warning in smp_setup_pacas() 2021-03-29 13:22:14 +11: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 powerpc: Fix early setup to make early_ioremap() work 2021-05-20 16:43:26 +10:00
signal.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
signal.h powerpc/signal: Fix possible build failure with unsafe_copy_fpr_{to/from}_user 2021-05-12 11:07:39 +10:00
signal_32.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
signal_64.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
smp-tbsync.c
smp.c powerpc/32s: Initialise KUAP and KUEP in C 2021-06-17 00:09:08 +10:00
stacktrace.c powerpc: make stack walking KASAN-safe 2021-06-17 00:09:11 +10:00
suspend.c
swsusp.c
swsusp_32.S
swsusp_64.c
swsusp_asm64.S
swsusp_booke.S
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/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
sysfs.c
systbl.S powerpc/syscalls: switch to generic syscalltbl.sh 2021-04-14 23:04:16 +10:00
systbl_chk.sh
tau_6xx.c powerpc/tau: Remove superfluous parameter in alloc_workqueue() call 2021-06-15 23:47:10 +10:00
time.c KVM: PPC: Book3S HV P9: Reduce irq_work vs guest decrementer races 2021-06-10 22:12:13 +10:00
tm.S
traps.c powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
ucall.S
udbg.c
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
vector.S powerpc/64s: avoid reloading (H)SRR registers if they are still valid 2021-06-25 00:06:55 +10:00
vmlinux.lds.S powerpc/64: allow alternate return locations for soft-masked interrupts 2021-06-25 00:06:56 +10:00
watchdog.c powerpc/watchdog: include linux/processor.h for spin_until_cond 2021-06-17 00:09:12 +10:00