Re: [PATCH] riscv: ftrace: only use pre-function NOPs with call ops

"Rui Qi" <[email protected]>
Newsgroups org.infradead.lists.linux-riscv,org.kernel.vger.linux-kernel,org.kernel.vger.linux-trace-kernel,org.kernel.vger.stable
Message-ID <[email protected]>
On 7/6/26 8:35 PM, Rui Qi wrote:
> Commit c217157bcd1d ("riscv: Implement
> HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS") changed CC_FLAGS_FTRACE to use
> -fpatchable-function-entry=8,4 or -fpatchable-function-entry=4,2
> for all dynamic ftrace builds. That layout makes the compiler place an
> 8-byte area before the function entry, which is used as the per-callsite
> ftrace_ops literal when CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS is enabled.
> 
> RISC-V can still build with CONFIG_DYNAMIC_FTRACE=y and
> CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS=n, for example when
> CONFIG_CFI_CLANG is enabled because HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS
> is selected only when !CFI_CLANG. In that configuration
> ftrace_call_adjust() does not skip the pre-function literal area and
> only returns addr + MCOUNT_AUIPC_SIZE. With the pre-function layout,
> that points into the pre-entry padding instead of the callsite jalr, so
> dynamic ftrace records the wrong patch address.
> 
> Use the pre-function literal layout only when call ops are enabled.
> Otherwise keep the previous patchable-function-entry counts so the
> recorded address matches ftrace_call_adjust() non-call-ops path.
> 
> Fixes: c217157bcd1d ("riscv: Implement HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS")
> Cc: [email protected]
> Signed-off-by: Rui Qi <[email protected]>
> ---
>  arch/riscv/Makefile | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 3070c3874305..235730a243aa 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -14,11 +14,19 @@ endif
>  ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
>  	LDFLAGS_vmlinux += --no-relax
>  	KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
> +ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS),y)
>  ifeq ($(CONFIG_RISCV_ISA_C),y)
>  	CC_FLAGS_FTRACE := -fpatchable-function-entry=8,4
>  else
>  	CC_FLAGS_FTRACE := -fpatchable-function-entry=4,2
>  endif
> +else
> +ifeq ($(CONFIG_RISCV_ISA_C),y)
> +	CC_FLAGS_FTRACE := -fpatchable-function-entry=4
> +else
> +	CC_FLAGS_FTRACE := -fpatchable-function-entry=2
> +endif
> +endif
>  endif
>  
>  ifeq ($(CONFIG_CMODEL_MEDLOW),y)


Hi,

Gentle ping on this patch. It's been about two months since submission
without any review feedback.

The patch fixes a bug where ftrace_call_adjust() returns the wrong
patch address when CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS is disabled
(e.g., under CONFIG_CFI_CLANG), because the pre-function literal
layout is still used unconditionally.

Adding the ftrace maintainers and mailing list, which were missing
from the original submission — that likely explains the lack of
response.

Link:
https://lore.kernel.org/r/[email protected]

Thanks,
Rui

_______________________________________________
linux-riscv mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-riscv
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.