Hi Alexander,

Today's linux-next merge of the kvm-ppc tree got a conflict in
arch/powerpc/kernel/entry_64.S between commit c58ce2b1e3c7 ("ppc64: fix
missing to check all bits of _TIF_USER_WORK_MASK in preempt") from Linus'
tree and commit bc8cc4993e19 ("PPC: use CURRENT_THREAD_INFO instead of
open coded assembly") from the kvm-ppc tree.

Just context changes.  I fixed it up (see below) and can carry the fix as
necessary.
-- 
Cheers,
Stephen Rothwell                    s...@canb.auug.org.au

diff --cc arch/powerpc/kernel/entry_64.S
index cf38a17,ba943b9..0000000
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@@ -559,54 -558,27 +559,54 @@@ _GLOBAL(ret_from_except_lite
        mtmsrd  r10,1             /* Update machine state */
  #endif /* CONFIG_PPC_BOOK3E */
  
-       clrrdi  r9,r1,THREAD_SHIFT      /* current_thread_info() */
 -#ifdef CONFIG_PREEMPT
+       CURRENT_THREAD_INFO(r9, r1)
 -      li      r0,_TIF_NEED_RESCHED    /* bits to check */
        ld      r3,_MSR(r1)
        ld      r4,TI_FLAGS(r9)
 -      /* Move MSR_PR bit in r3 to _TIF_SIGPENDING position in r0 */
 -      rlwimi  r0,r3,32+TIF_SIGPENDING-MSR_PR_LG,_TIF_SIGPENDING
 -      and.    r0,r4,r0        /* check NEED_RESCHED and maybe SIGPENDING */
 -      bne     do_work
 -
 -#else /* !CONFIG_PREEMPT */
 -      ld      r3,_MSR(r1)     /* Returning to user mode? */
        andi.   r3,r3,MSR_PR
 -      beq     restore         /* if not, just restore regs and return */
 +      beq     resume_kernel
  
        /* Check current_thread_info()->flags */
 +      andi.   r0,r4,_TIF_USER_WORK_MASK
 +      beq     restore
 +
 +      andi.   r0,r4,_TIF_NEED_RESCHED
 +      beq     1f
 +      bl      .restore_interrupts
 +      bl      .schedule
 +      b       .ret_from_except_lite
 +
 +1:    bl      .save_nvgprs
 +      bl      .restore_interrupts
 +      addi    r3,r1,STACK_FRAME_OVERHEAD
 +      bl      .do_notify_resume
 +      b       .ret_from_except
 +
 +resume_kernel:
 +#ifdef CONFIG_PREEMPT
 +      /* Check if we need to preempt */
 +      andi.   r0,r4,_TIF_NEED_RESCHED
 +      beq+    restore
 +      /* Check that preempt_count() == 0 and interrupts are enabled */
 +      lwz     r8,TI_PREEMPT(r9)
 +      cmpwi   cr1,r8,0
 +      ld      r0,SOFTE(r1)
 +      cmpdi   r0,0
 +      crandc  eq,cr1*4+eq,eq
 +      bne     restore
 +
 +      /*
 +       * Here we are preempting the current task. We want to make
 +       * sure we are soft-disabled first
 +       */
 +      SOFT_DISABLE_INTS(r3,r4)
 +1:    bl      .preempt_schedule_irq
 +
 +      /* Re-test flags and eventually loop */
-       clrrdi  r9,r1,THREAD_SHIFT
+       CURRENT_THREAD_INFO(r9, r1)
        ld      r4,TI_FLAGS(r9)
 -      andi.   r0,r4,_TIF_USER_WORK_MASK
 -      bne     do_work
 -#endif /* !CONFIG_PREEMPT */
 +      andi.   r0,r4,_TIF_NEED_RESCHED
 +      bne     1b
 +#endif /* CONFIG_PREEMPT */
  
        .globl  fast_exc_return_irq
  fast_exc_return_irq:

Attachment: pgphKpZG6oauo.pgp
Description: PGP signature

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to