From: Nicholas Piggin > Sent: 15 July 2024 09:25 > > On Sun Jul 14, 2024 at 6:27 PM AEST, Naveen N Rao wrote: > > Function profile sequence on powerpc includes two instructions at the > > beginning of each function: > > mflr r0 > > bl ftrace_caller > > > > The call to ftrace_caller() gets nop'ed out during kernel boot and is > > patched in when ftrace is enabled. > > > > Given the sequence, we cannot return from ftrace_caller with 'blr' as we > > need to keep LR and r0 intact. This results in link stack (return > > address predictor) imbalance when ftrace is enabled. To address that, we > > would like to use a three instruction sequence: > > mflr r0 > > bl ftrace_caller > > mtlr r0 > > > > Further more, to support DYNAMIC_FTRACE_WITH_CALL_OPS, we need to > > reserve two instruction slots before the function. This results in a > > total of five instruction slots to be reserved for ftrace use on each > > function that is traced. > > > > Move the function profile sequence out-of-line to minimize its impact. > > To do this, we reserve a single nop at function entry using > > -fpatchable-function-entry=1 and add a pass on vmlinux.o to determine > > the total number of functions that can be traced. This is then used to > > generate a .S file reserving the appropriate amount of space for use as > > ftrace stubs, which is built and linked into vmlinux. > > These are all going into .tramp.ftrace.text AFAIKS? Should that be > moved after some of the other text in the linker script then if it > could get quite large? sched and lock and other things should be > closer to the rest of text and hot code. Can't you allocate the space for the 'function profile sequence' at run-time when (if) ftrace is enabled? When ftrace gets disabled it is likely possible to save the trampoline number in the nop - so the same memory can be used next time. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)