On Mon, 10 Jun 2024 14:08:16 +0530
Naveen N Rao <nav...@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 <nav...@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

Reply via email to