diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2022-11-30 13:46:06 +0300 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2022-11-30 13:46:06 +0300 |
commit | 611c020239fde0e9e81435cd1690f566c0cdd0e0 (patch) | |
tree | 1203519d601fa7a340defc6f2cdcc5d5dc39d8df /arch/powerpc/lib | |
parent | 9a04b0febb07c400902e4cbf9adce02008917932 (diff) | |
parent | 2e7ec190a0e38aaa8a6d87fd5f804ec07947febc (diff) | |
download | linux-611c020239fde0e9e81435cd1690f566c0cdd0e0.tar.xz |
Merge branch 'fixes' into next
Merge our fixes branch to bring in some changes that are prerequisites
for work in next.
Diffstat (limited to 'arch/powerpc/lib')
-rw-r--r-- | arch/powerpc/lib/vmx-helper.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/powerpc/lib/vmx-helper.c b/arch/powerpc/lib/vmx-helper.c index f76a50291fd7..d491da8d1838 100644 --- a/arch/powerpc/lib/vmx-helper.c +++ b/arch/powerpc/lib/vmx-helper.c @@ -36,7 +36,17 @@ int exit_vmx_usercopy(void) { disable_kernel_altivec(); pagefault_enable(); - preempt_enable(); + preempt_enable_no_resched(); + /* + * Must never explicitly call schedule (including preempt_enable()) + * while in a kuap-unlocked user copy, because the AMR register will + * not be saved and restored across context switch. However preempt + * kernels need to be preempted as soon as possible if need_resched is + * set and we are preemptible. The hack here is to schedule a + * decrementer to fire here and reschedule for us if necessary. + */ + if (IS_ENABLED(CONFIG_PREEMPT) && need_resched()) + set_dec(1); return 0; } |