Sorry for the noise, On Mon, Jun 17, 2024 at 10:38 AM Andy Chiu <andy.c...@sifive.com> wrote: > > On Fri, Jun 14, 2024 at 3:09 AM Nathan Chancellor <nat...@kernel.org> wrote: > > > > Hi Andy, > > > > On Thu, Jun 13, 2024 at 03:11:09PM +0800, Andy Chiu wrote: > > > We are changing ftrace code patching in order to remove dependency from > > > stop_machine() and enable kernel preemption. This requires us to align > > > functions entry at a 4-B align address. > > > > > > However, -falign-functions on older versions of GCC alone was not strong > > > enoungh to align all functions. In fact, cold functions are not aligned > > > after turning on optimizations. We consider this is a bug in GCC and > > > turn off guess-branch-probility as a workaround to align all functions. > > > > > > GCC bug id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88345 > > > > > > The option -fmin-function-alignment is able to align all functions > > > properly on newer versions of gcc. So, we add a cc-option to test if > > > the toolchain supports it. > > > > > > Suggested-by: Evgenii Shatokhin <e.shatok...@yadro.com> > > > Signed-off-by: Andy Chiu <andy.c...@sifive.com> > > > --- > > > arch/riscv/Kconfig | 1 + > > > arch/riscv/Makefile | 7 ++++++- > > > 2 files changed, 7 insertions(+), 1 deletion(-) > > > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > index b94176e25be1..80b8d48e1e46 100644 > > > --- a/arch/riscv/Kconfig > > > +++ b/arch/riscv/Kconfig > > > @@ -203,6 +203,7 @@ config CLANG_SUPPORTS_DYNAMIC_FTRACE > > > config GCC_SUPPORTS_DYNAMIC_FTRACE > > > def_bool CC_IS_GCC > > > depends on $(cc-option,-fpatchable-function-entry=8) > > > + depends on $(cc-option,-fmin-function-alignment=4) || !RISCV_ISA_C > > > > Please use CC_HAS_MIN_FUNCTION_ALIGNMENT (from arch/Kconfig), which > > already checks for support for this option. > > Thanks for the suggestion! > > > > > > config HAVE_SHADOW_CALL_STACK > > > def_bool $(cc-option,-fsanitize=shadow-call-stack) > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > > index 06de9d365088..74628ad8dcf8 100644 > > > --- a/arch/riscv/Makefile > > > +++ b/arch/riscv/Makefile > > > @@ -14,8 +14,13 @@ endif > > > ifeq ($(CONFIG_DYNAMIC_FTRACE),y) > > > LDFLAGS_vmlinux += --no-relax > > > KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY > > > +ifeq ($(CONFIG_CC_IS_CLANG),y) > > > > Same here, please invert this and use > > > > ifdef CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT > > > > like the main Makefile does. > > Hope this makes sense to you. I am going to add the following in riscv Kconig: > > select FUNCTION_ALIGNMENT_4B if DYNAMIC_FTRACE && !RISCV_ISA_C
This should be: select FUNCTION_ALIGNMENT_4B if DYNAMIC_FTRACE && RISCV_ISA_C as RISCV_ISA_C == y means that there are 2B instructions. In this case, functions can be non 4B aligned, so we need to enforce the alignment requirement from the compiler. > > So we will not need any of these > > > > > > + cflags_ftrace_align := -falign-functions=4 > > > +else > > > + cflags_ftrace_align := -fmin-function-alignment=4 > > > +endif > > > ifeq ($(CONFIG_RISCV_ISA_C),y) > > > - CC_FLAGS_FTRACE := -fpatchable-function-entry=4 > > > + CC_FLAGS_FTRACE := -fpatchable-function-entry=4 > > > $(cflags_ftrace_align) > > > else > > > CC_FLAGS_FTRACE := -fpatchable-function-entry=2 > > > endif > > > > > > -- > > > 2.43.0 > > > > > > > > Thanks, > Andy