On Mon, 2020-01-27 at 10:42:04 UTC, Christophe Leroy wrote: > Commit f7354ccac844 ("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 e2fb9f544431 ("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: f7354ccac844 ("powerpc/32: Remove CURRENT_THREAD_INFO and rename > TI_CPU") > Fixes: e2fb9f544431 ("powerpc/32: Prepare for Kernel Userspace Access > Protection") > Cc: sta...@vger.kernel.org > Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/9933819099c4600b41a042f27a074470a43cf6b9 cheers