hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/arch/powerpc/kernel/entry_32.S
....@@ -393,7 +393,9 @@
393393 MTMSRD(r10)
394394 lwz r9,TI_FLAGS(r12)
395395 li r8,-MAX_ERRNO
396
- andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
396
+ lis r0,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@h
397
+ ori r0,r0, (_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)@l
398
+ and. r0,r9,r0
397399 bne- syscall_exit_work
398400 cmplw 0,r3,r8
399401 blt+ syscall_exit_cont
....@@ -511,13 +513,13 @@
511513 b syscall_dotrace_cont
512514
513515 syscall_exit_work:
514
- andi. r0,r9,_TIF_RESTOREALL
516
+ andis. r0,r9,_TIF_RESTOREALL@h
515517 beq+ 0f
516518 REST_NVGPRS(r1)
517519 b 2f
518520 0: cmplw 0,r3,r8
519521 blt+ 1f
520
- andi. r0,r9,_TIF_NOERROR
522
+ andis. r0,r9,_TIF_NOERROR@h
521523 bne- 1f
522524 lwz r11,_CCR(r1) /* Load CR */
523525 neg r3,r3
....@@ -526,12 +528,12 @@
526528
527529 1: stw r6,RESULT(r1) /* Save result */
528530 stw r3,GPR3(r1) /* Update return value */
529
-2: andi. r0,r9,(_TIF_PERSYSCALL_MASK)
531
+2: andis. r0,r9,(_TIF_PERSYSCALL_MASK)@h
530532 beq 4f
531533
532534 /* Clear per-syscall TIF flags if any are set. */
533535
534
- li r11,_TIF_PERSYSCALL_MASK
536
+ lis r11,_TIF_PERSYSCALL_MASK@h
535537 addi r12,r12,TI_FLAGS
536538 3: lwarx r8,0,r12
537539 andc r8,r8,r11
....@@ -888,7 +890,14 @@
888890 cmpwi 0,r0,0 /* if non-zero, just restore regs and return */
889891 bne restore
890892 andi. r8,r8,_TIF_NEED_RESCHED
893
+ bne+ 1f
894
+ lwz r0,TI_PREEMPT_LAZY(r9)
895
+ cmpwi 0,r0,0 /* if non-zero, just restore regs and return */
896
+ bne restore
897
+ lwz r0,TI_FLAGS(r9)
898
+ andi. r0,r0,_TIF_NEED_RESCHED_LAZY
891899 beq+ restore
900
+1:
892901 lwz r3,_MSR(r1)
893902 andi. r0,r3,MSR_EE /* interrupts off? */
894903 beq restore /* don't schedule if so */
....@@ -899,11 +908,11 @@
899908 */
900909 bl trace_hardirqs_off
901910 #endif
902
-1: bl preempt_schedule_irq
911
+2: bl preempt_schedule_irq
903912 CURRENT_THREAD_INFO(r9, r1)
904913 lwz r3,TI_FLAGS(r9)
905
- andi. r0,r3,_TIF_NEED_RESCHED
906
- bne- 1b
914
+ andi. r0,r3,_TIF_NEED_RESCHED_MASK
915
+ bne- 2b
907916 #ifdef CONFIG_TRACE_IRQFLAGS
908917 /* And now, to properly rebalance the above, we tell lockdep they
909918 * are being turned back on, which will happen when we return
....@@ -1232,7 +1241,7 @@
12321241 #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */
12331242
12341243 do_work: /* r10 contains MSR_KERNEL here */
1235
- andi. r0,r9,_TIF_NEED_RESCHED
1244
+ andi. r0,r9,_TIF_NEED_RESCHED_MASK
12361245 beq do_user_signal
12371246
12381247 do_resched: /* r10 contains MSR_KERNEL here */
....@@ -1253,7 +1262,7 @@
12531262 MTMSRD(r10) /* disable interrupts */
12541263 CURRENT_THREAD_INFO(r9, r1)
12551264 lwz r9,TI_FLAGS(r9)
1256
- andi. r0,r9,_TIF_NEED_RESCHED
1265
+ andi. r0,r9,_TIF_NEED_RESCHED_MASK
12571266 bne- do_resched
12581267 andi. r0,r9,_TIF_USER_WORK_MASK
12591268 beq restore_user