Commit f7354cca authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/32: Remove CURRENT_THREAD_INFO and rename TI_CPU



Now that thread_info is similar to task_struct, its address is in r2
so CURRENT_THREAD_INFO() macro is useless. This patch removes it.

This patch also moves the 'tovirt(r2, r2)' down just before the
reactivation of MMU translation, so that we keep the physical address
of 'current' in r2 until then. It avoids a few calls to tophys().

At the same time, as the 'cpu' field is not anymore in thread_info,
TI_CPU is renamed TASK_CPU by this patch.

It also allows to get rid of a couple of
'#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE' as ACCOUNT_CPU_USER_ENTRY()
and ACCOUNT_CPU_USER_EXIT() are empty when
CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not defined.

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
[mpe: Fix a missed conversion of TI_CPU idle_6xx.S]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 7c19c2e5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -431,7 +431,7 @@ ifdef CONFIG_SMP
prepare: task_cpu_prepare

task_cpu_prepare: prepare0
	$(eval KBUILD_CFLAGS += -D_TASK_CPU=$(shell awk '{if ($$2 == "TI_CPU") print $$3;}' include/generated/asm-offsets.h))
	$(eval KBUILD_CFLAGS += -D_TASK_CPU=$(shell awk '{if ($$2 == "TASK_CPU") print $$3;}' include/generated/asm-offsets.h))
endif

# Check toolchain versions:
+0 −2
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@

#ifdef CONFIG_PPC64
#define CURRENT_THREAD_INFO(dest, sp)	stringify_in_c(ld dest, PACACURRENT(r13))
#else
#define CURRENT_THREAD_INFO(dest, sp)	stringify_in_c(mr dest, r2)
#endif

#ifndef __ASSEMBLY__
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ int main(void)
#endif /* CONFIG_PPC64 */
	OFFSET(TASK_STACK, task_struct, stack);
#ifdef CONFIG_SMP
	OFFSET(TI_CPU, task_struct, cpu);
	OFFSET(TASK_CPU, task_struct, cpu);
#endif

#ifdef CONFIG_LIVEPATCH
+18 −37
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ transfer_to_handler:
	stw	r2,_XER(r11)
	mfspr	r12,SPRN_SPRG_THREAD
	addi	r2,r12,-THREAD
	tovirt(r2,r2)			/* set r2 to current */
	beq	2f			/* if from user, fix up THREAD.regs */
	addi	r11,r1,STACK_FRAME_OVERHEAD
	stw	r11,PT_REGS(r12)
@@ -161,11 +160,7 @@ transfer_to_handler:
	lwz	r12,THREAD_DBCR0(r12)
	andis.	r12,r12,DBCR0_IDM@h
#endif
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
	CURRENT_THREAD_INFO(r9, r1)
	tophys(r9, r9)
	ACCOUNT_CPU_USER_ENTRY(r9, r11, r12)
#endif
	ACCOUNT_CPU_USER_ENTRY(r2, r11, r12)
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
	beq+	3f
	/* From user and task is ptraced - load up global dbcr0 */
@@ -175,8 +170,7 @@ transfer_to_handler:
	tophys(r11,r11)
	addi	r11,r11,global_dbcr0@l
#ifdef CONFIG_SMP
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r9,TI_CPU(r9)
	lwz	r9,TASK_CPU(r2)
	slwi	r9,r9,3
	add	r11,r11,r9
#endif
@@ -197,9 +191,7 @@ transfer_to_handler:
	ble-	stack_ovf		/* then the kernel stack overflowed */
5:
#if defined(CONFIG_PPC_BOOK3S_32) || defined(CONFIG_E500)
	CURRENT_THREAD_INFO(r9, r1)
	tophys(r9,r9)			/* check local flags */
	lwz	r12,TI_LOCAL_FLAGS(r9)
	lwz	r12,TI_LOCAL_FLAGS(r2)
	mtcrf	0x01,r12
	bt-	31-TLF_NAPPING,4f
	bt-	31-TLF_SLEEPING,7f
@@ -208,6 +200,7 @@ transfer_to_handler:
transfer_to_handler_cont:
3:
	mflr	r9
	tovirt(r2, r2)			/* set r2 to current */
	lwz	r11,0(r9)		/* virtual address of handler */
	lwz	r9,4(r9)		/* where to go when done */
#if defined(CONFIG_PPC_8xx) && defined(CONFIG_PERF_EVENTS)
@@ -271,11 +264,11 @@ reenable_mmu: /* re-enable mmu so we can */

#if defined (CONFIG_PPC_BOOK3S_32) || defined(CONFIG_E500)
4:	rlwinm	r12,r12,0,~_TLF_NAPPING
	stw	r12,TI_LOCAL_FLAGS(r9)
	stw	r12,TI_LOCAL_FLAGS(r2)
	b	power_save_ppc32_restore

7:	rlwinm	r12,r12,0,~_TLF_SLEEPING
	stw	r12,TI_LOCAL_FLAGS(r9)
	stw	r12,TI_LOCAL_FLAGS(r2)
	lwz	r9,_MSR(r11)		/* if sleeping, clear MSR.EE */
	rlwinm	r9,r9,0,~MSR_EE
	lwz	r12,_LINK(r11)		/* and return to address in LR */
@@ -347,8 +340,7 @@ _GLOBAL(DoSyscall)
	mtmsr	r11
1:
#endif /* CONFIG_TRACE_IRQFLAGS */
	CURRENT_THREAD_INFO(r10, r1)
	lwz	r11,TI_FLAGS(r10)
	lwz	r11,TI_FLAGS(r2)
	andi.	r11,r11,_TIF_SYSCALL_DOTRACE
	bne-	syscall_dotrace
syscall_dotrace_cont:
@@ -381,13 +373,12 @@ ret_from_syscall:
	lwz	r3,GPR3(r1)
#endif
	mr	r6,r3
	CURRENT_THREAD_INFO(r12, r1)
	/* disable interrupts so current_thread_info()->flags can't change */
	LOAD_MSR_KERNEL(r10,MSR_KERNEL)	/* doesn't include MSR_EE */
	/* Note: We don't bother telling lockdep about it */
	SYNC
	MTMSRD(r10)
	lwz	r9,TI_FLAGS(r12)
	lwz	r9,TI_FLAGS(r2)
	li	r8,-MAX_ERRNO
	andi.	r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
	bne-	syscall_exit_work
@@ -434,8 +425,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX)
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
	andi.	r4,r8,MSR_PR
	beq	3f
	CURRENT_THREAD_INFO(r4, r1)
	ACCOUNT_CPU_USER_EXIT(r4, r5, r7)
	ACCOUNT_CPU_USER_EXIT(r2, r5, r7)
3:
#endif
	lwz	r4,_LINK(r1)
@@ -528,7 +518,7 @@ syscall_exit_work:
	/* Clear per-syscall TIF flags if any are set.  */

	li	r11,_TIF_PERSYSCALL_MASK
	addi	r12,r12,TI_FLAGS
	addi	r12,r2,TI_FLAGS
3:	lwarx	r8,0,r12
	andc	r8,r8,r11
#ifdef CONFIG_IBM405_ERR77
@@ -536,7 +526,6 @@ syscall_exit_work:
#endif
	stwcx.	r8,0,r12
	bne-	3b
	subi	r12,r12,TI_FLAGS
	
4:	/* Anything which requires enabling interrupts? */
	andi.	r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP)
@@ -815,8 +804,7 @@ ret_from_except:

user_exc_return:		/* r10 contains MSR_KERNEL here */
	/* Check current_thread_info()->flags */
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r9,TI_FLAGS(r9)
	lwz	r9,TI_FLAGS(r2)
	andi.	r0,r9,_TIF_USER_WORK_MASK
	bne	do_work

@@ -828,18 +816,14 @@ restore_user:
	andis.	r10,r0,DBCR0_IDM@h
	bnel-	load_dbcr0
#endif
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
	CURRENT_THREAD_INFO(r9, r1)
	ACCOUNT_CPU_USER_EXIT(r9, r10, r11)
#endif
	ACCOUNT_CPU_USER_EXIT(r2, r10, r11)

	b	restore

/* N.B. the only way to get here is from the beq following ret_from_except. */
resume_kernel:
	/* check current_thread_info, _TIF_EMULATE_STACK_STORE */
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r8,TI_FLAGS(r9)
	lwz	r8,TI_FLAGS(r2)
	andis.	r0,r8,_TIF_EMULATE_STACK_STORE@h
	beq+	1f

@@ -865,7 +849,7 @@ resume_kernel:

	/* Clear _TIF_EMULATE_STACK_STORE flag */
	lis	r11,_TIF_EMULATE_STACK_STORE@h
	addi	r5,r9,TI_FLAGS
	addi	r5,r2,TI_FLAGS
0:	lwarx	r8,0,r5
	andc	r8,r8,r11
#ifdef CONFIG_IBM405_ERR77
@@ -877,7 +861,7 @@ resume_kernel:

#ifdef CONFIG_PREEMPT
	/* check current_thread_info->preempt_count */
	lwz	r0,TI_PREEMPT(r9)
	lwz	r0,TI_PREEMPT(r2)
	cmpwi	0,r0,0		/* if non-zero, just restore regs and return */
	bne	restore
	andi.	r8,r8,_TIF_NEED_RESCHED
@@ -893,8 +877,7 @@ resume_kernel:
	bl	trace_hardirqs_off
#endif
1:	bl	preempt_schedule_irq
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r3,TI_FLAGS(r9)
	lwz	r3,TI_FLAGS(r2)
	andi.	r0,r3,_TIF_NEED_RESCHED
	bne-	1b
#ifdef CONFIG_TRACE_IRQFLAGS
@@ -1190,8 +1173,7 @@ load_dbcr0:
	lis	r11,global_dbcr0@ha
	addi	r11,r11,global_dbcr0@l
#ifdef CONFIG_SMP
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r9,TI_CPU(r9)
	lwz	r9,TASK_CPU(r2)
	slwi	r9,r9,3
	add	r11,r11,r9
#endif
@@ -1231,8 +1213,7 @@ recheck:
	LOAD_MSR_KERNEL(r10,MSR_KERNEL)
	SYNC
	MTMSRD(r10)		/* disable interrupts */
	CURRENT_THREAD_INFO(r9, r1)
	lwz	r9,TI_FLAGS(r9)
	lwz	r9,TI_FLAGS(r2)
	andi.	r0,r9,_TIF_NEED_RESCHED
	bne-	do_resched
	andi.	r0,r9,_TIF_USER_WORK_MASK
+2 −3
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@
#ifndef CONFIG_PPC64
/* epapr_ev_idle() was derived from e500_idle() */
_GLOBAL(epapr_ev_idle)
	CURRENT_THREAD_INFO(r3, r1)
	PPC_LL	r4, TI_LOCAL_FLAGS(r3)	/* set napping bit */
	PPC_LL	r4, TI_LOCAL_FLAGS(r2)	/* set napping bit */
	ori	r4, r4,_TLF_NAPPING	/* so when we take an exception */
	PPC_STL	r4, TI_LOCAL_FLAGS(r3)	/* it will return to our caller */
	PPC_STL	r4, TI_LOCAL_FLAGS(r2)	/* it will return to our caller */

	wrteei	1

Loading