lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [day] [month] [year] [list]
Date:	Thu, 5 Jul 2012 15:37:28 +1000
From:	Stephen Rothwell <sfr@...b.auug.org.au>
To:	Alexander Graf <agraf@...e.de>
Cc:	linux-next@...r.kernel.org, linux-kernel@...r.kernel.org,
	Stuart Yoder <stuart.yoder@...escale.com>,
	Tiejun Chen <tiejun.chen@...driver.com>,
	Benjamin Herrenschmidt <benh@...nel.crashing.org>,
	ppc-dev <linuxppc-dev@...ts.ozlabs.org>
Subject: linux-next: manual merge of the kvm-ppc tree with Linus' tree

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@...b.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:

Content of type "application/pgp-signature" skipped

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ