diff options
Diffstat (limited to 'arch/powerpc/kernel/trace')
| -rw-r--r-- | arch/powerpc/kernel/trace/Makefile | 1 | ||||
| -rw-r--r-- | arch/powerpc/kernel/trace/ftrace.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/kernel/trace/ftrace_64_mprofile.S | 45 | 
3 files changed, 17 insertions, 30 deletions
| diff --git a/arch/powerpc/kernel/trace/Makefile b/arch/powerpc/kernel/trace/Makefile index 729dffc5f7bc..d22d8bafb643 100644 --- a/arch/powerpc/kernel/trace/Makefile +++ b/arch/powerpc/kernel/trace/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the powerpc trace subsystem  # diff --git a/arch/powerpc/kernel/trace/ftrace.c b/arch/powerpc/kernel/trace/ftrace.c index 32509de6ce4c..4741fe112f05 100644 --- a/arch/powerpc/kernel/trace/ftrace.c +++ b/arch/powerpc/kernel/trace/ftrace.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Code for replacing ftrace calls with jumps.   * diff --git a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S index c98e90b4ea7b..b4e2b7165f79 100644 --- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S +++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S @@ -181,34 +181,25 @@ _GLOBAL(ftrace_stub)  	 *  - we have no stack frame and can not allocate one  	 *  - LR points back to the original caller (in A)  	 *  - CTR holds the new NIP in C -	 *  - r0 & r12 are free -	 * -	 * r0 can't be used as the base register for a DS-form load or store, so -	 * we temporarily shuffle r1 (stack pointer) into r0 and then put it back. +	 *  - r0, r11 & r12 are free  	 */  livepatch_handler:  	CURRENT_THREAD_INFO(r12, r1) -	/* Save stack pointer into r0 */ -	mr	r0, r1 -  	/* Allocate 3 x 8 bytes */ -	ld	r1, TI_livepatch_sp(r12) -	addi	r1, r1, 24 -	std	r1, TI_livepatch_sp(r12) +	ld	r11, TI_livepatch_sp(r12) +	addi	r11, r11, 24 +	std	r11, TI_livepatch_sp(r12)  	/* Save toc & real LR on livepatch stack */ -	std	r2,  -24(r1) +	std	r2,  -24(r11)  	mflr	r12 -	std	r12, -16(r1) +	std	r12, -16(r11)  	/* Store stack end marker */  	lis     r12, STACK_END_MAGIC@h  	ori     r12, r12, STACK_END_MAGIC@l -	std	r12, -8(r1) - -	/* Restore real stack pointer */ -	mr	r1, r0 +	std	r12, -8(r11)  	/* Put ctr in r12 for global entry and branch there */  	mfctr	r12 @@ -216,36 +207,30 @@ livepatch_handler:  	/*  	 * Now we are returning from the patched function to the original -	 * caller A. We are free to use r0 and r12, and we can use r2 until we +	 * caller A. We are free to use r11, r12 and we can use r2 until we  	 * restore it.  	 */  	CURRENT_THREAD_INFO(r12, r1) -	/* Save stack pointer into r0 */ -	mr	r0, r1 - -	ld	r1, TI_livepatch_sp(r12) +	ld	r11, TI_livepatch_sp(r12)  	/* Check stack marker hasn't been trashed */  	lis     r2,  STACK_END_MAGIC@h  	ori     r2,  r2, STACK_END_MAGIC@l -	ld	r12, -8(r1) +	ld	r12, -8(r11)  1:	tdne	r12, r2  	EMIT_BUG_ENTRY 1b, __FILE__, __LINE__ - 1, 0  	/* Restore LR & toc from livepatch stack */ -	ld	r12, -16(r1) +	ld	r12, -16(r11)  	mtlr	r12 -	ld	r2,  -24(r1) +	ld	r2,  -24(r11)  	/* Pop livepatch stack frame */ -	CURRENT_THREAD_INFO(r12, r0) -	subi	r1, r1, 24 -	std	r1, TI_livepatch_sp(r12) - -	/* Restore real stack pointer */ -	mr	r1, r0 +	CURRENT_THREAD_INFO(r12, r1) +	subi	r11, r11, 24 +	std	r11, TI_livepatch_sp(r12)  	/* Return to original caller of live patched function */  	blr |