linux-next: manual merge of the kvm-ppc tree with Linus' tree

Stephen Rothwell sfr at canb.auug.org.au
Thu Jul 5 15:37:28 EST 2012


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                    sfr at 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:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20120705/5408bfc1/attachment.sig>


More information about the Linuxppc-dev mailing list