mirror_ubuntu-kernels/arch/powerpc
Christophe Leroy 9933819099 powerpc/32s: Fix CPU wake-up from sleep mode
Commit f7354ccac8 ("powerpc/32: Remove CURRENT_THREAD_INFO and
rename TI_CPU") broke the CPU wake-up from sleep mode (i.e. when
_TLF_SLEEPING is set) by delaying the tovirt(r2, r2).

This is because r2 is not restored by fast_exception_return. It used
to work (by chance ?) because CPU wake-up interrupt never comes from
user, so r2 is expected to point to 'current' on return.

Commit e2fb9f5444 ("powerpc/32: Prepare for Kernel Userspace Access
Protection") broke it even more by clobbering r0 which is not
restored by fast_exception_return either.

Use r6 instead of r0. This is possible because r3-r6 are restored by
fast_exception_return and only r3-r5 are used for exception arguments.

For r2 it could be converted back to virtual address, but stay on the
safe side and restore it from the stack instead. It should be live
in the cache at that moment, so loading from the stack should make
no difference compared to converting it from phys to virt.

Fixes: f7354ccac8 ("powerpc/32: Remove CURRENT_THREAD_INFO and rename TI_CPU")
Fixes: e2fb9f5444 ("powerpc/32: Prepare for Kernel Userspace Access Protection")
Cc: stable@vger.kernel.org
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/6d02c3ae6ad77af34392e98117e44c2bf6d13ba1.1580121710.git.christophe.leroy@c-s.fr
2020-01-28 23:01:19 +11:00
..
boot powerpc/devicetrees: Change 'gpios' to 'cs-gpios' on fsl, spi nodes 2020-01-23 21:31:14 +11:00
configs Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2019-12-01 13:26:18 -08:00
crypto powerpc updates for 5.5 2019-11-30 14:35:43 -08:00
include powerpc/32: Add support of KASAN_VMALLOC 2020-01-27 22:37:33 +11:00
kernel powerpc/32s: Fix CPU wake-up from sleep mode 2020-01-28 23:01:19 +11:00
kexec powerpc: Avoid clang warnings around setjmp and longjmp 2019-11-25 21:45:43 +11:00
kvm powerpc/mm: Remove kvm radix prefetch workaround for Power9 DD2.2 2020-01-26 00:11:37 +11:00
lib powerpc: Fix __clear_user() with KUAP enabled 2019-12-16 23:19:44 +11:00
math-emu treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
mm powerpc/32: Reuse orphaned memblocks in kasan_init_shadow_page_tables() 2020-01-27 22:37:45 +11:00
net treewide: Use sizeof_field() macro 2019-12-09 10:36:44 -08:00
oprofile powerpc: use probe_user_read() and probe_user_write() 2020-01-26 00:11:35 +11:00
perf powerpc/8xx: Use alternative scratch registers in DTLB miss handler 2020-01-27 22:36:16 +11:00
platforms powerpc/32: Force KASAN_VMALLOC for modules 2020-01-27 22:37:41 +11:00
purgatory treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
sysdev powerpc: use probe_user_read() and probe_user_write() 2020-01-26 00:11:35 +11:00
tools powerpc/tools: Don't quote $objdump in scripts 2019-10-30 22:55:12 +11:00
xmon powerpc/xmon: Fix compile error in print_insn* functions 2020-01-26 00:11:35 +11:00
Kbuild powerpc/kexec: Move kexec files into a dedicated subdir. 2019-11-21 15:41:34 +11:00
Kconfig powerpc/kconfig: Move CONFIG_PPC32 into Kconfig.cputype 2020-01-27 22:37:37 +11:00
Kconfig.debug powerpc/ptdump: Only enable PPC_CHECK_WX with STRICT_KERNEL_RWX 2020-01-23 21:31:13 +11:00
Makefile powerpc: Don't add -mabi= flags when building with Clang 2019-11-25 21:45:43 +11:00
Makefile.postlink kbuild: add $(BASH) to run scripts with bash-extension 2019-09-04 22:54:13 +09:00