[RFC PATCH v2 3/5] powerpc/ftrace: Unify 32-bit and 64-bit ftrace entry code

Steven Rostedt rostedt at goodmis.org
Tue Jun 11 06:06:32 AEST 2024


On Mon, 10 Jun 2024 14:08:16 +0530
Naveen N Rao <naveen at kernel.org> wrote:

> On 32-bit powerpc, gcc generates a three instruction sequence for
> function profiling:
> 	mflr	r0
> 	stw	r0, 4(r1)
> 	bl	_mcount
> 
> On kernel boot, the call to _mcount() is nop-ed out, to be patched back
> in when ftrace is actually enabled. The 'stw' instruction therefore is
> not necessary unless ftrace is enabled. Nop it out during ftrace init.
> 
> When ftrace is enabled, we want the 'stw' so that stack unwinding works
> properly. Perform the same within the ftrace handler, similar to 64-bit
> powerpc.
> 
> For 64-bit powerpc, early versions of gcc used to emit a three
> instruction sequence for function profiling (with -mprofile-kernel) with
> a 'std' instruction to mimic the 'stw' above. Address that scenario also
> by nop-ing out the 'std' instruction during ftrace init.
> 
> Signed-off-by: Naveen N Rao <naveen at kernel.org>

Isn't there still the race that there's a preemption between the:

	stw	r0, 4(r1)
and
	bl	_mcount

And if this breaks stack unwinding, couldn't this cause an issue for live
kernel patching?

I know it's very unlikely, but in theory, I think the race exists.

-- Steve


More information about the Linuxppc-dev mailing list