Re: [PATCH] kbuild: rust: add AutoFDO support

From: Gary Guo

Date: Thu Mar 19 2026 - 07:36:26 EST


On Thu Mar 19, 2026 at 11:22 AM GMT, Alice Ryhl wrote:
> This patch enables AutoFDO build support for Rust code within the Linux
> kernel. This allows Rust code to be profiled and optimized based on the
> profile.
>
> This was verified by inspecting the object files and confirming that
> they look correct. It was also verified in conjuction with my helpers
> inlining series, and it also appears to have worked correctly when
> combined with that series once one missing thing [1] was fixed in the
> helpers inlining series.
>
> Link: https://lore.kernel.org/all/aasPsbMEsX6iGUl8@xxxxxxxxxx/ [1]
> Signed-off-by: Alice Ryhl <aliceryhl@xxxxxxxxxx>
> ---
> scripts/Makefile.autofdo | 6 +++++-
> scripts/Makefile.lib | 3 +++
> 2 files changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/Makefile.autofdo b/scripts/Makefile.autofdo
> index 1caf2457e585..3f08acab4549 100644
> --- a/scripts/Makefile.autofdo
> +++ b/scripts/Makefile.autofdo
> @@ -3,14 +3,18 @@
> # Enable available and selected Clang AutoFDO features.
>
> CFLAGS_AUTOFDO_CLANG := -fdebug-info-for-profiling -mllvm -enable-fs-discriminator=true -mllvm -improved-fs-discriminator=true
> +RUSTFLAGS_AUTOFDO_CLANG := -Zdebug-info-for-profiling -Cllvm-args=-enable-fs-discriminator=true -Cllvm-args=-improved-fs-discriminator=true

I get that it's currently named as AUTOFDO_CLANG, but this really ought to be
AUTOFDO_LLVM...

The flag translations look correct to me.

Best,
Gary

>
> ifndef CONFIG_DEBUG_INFO
> CFLAGS_AUTOFDO_CLANG += -gmlt
> + RUSTFLAGS_AUTOFDO_CLANG += -Cdebuginfo=line-tables-only
> endif
>
> ifdef CLANG_AUTOFDO_PROFILE
> CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -ffunction-sections
> CFLAGS_AUTOFDO_CLANG += -fsplit-machine-functions
> + RUSTFLAGS_AUTOFDO_CLANG += -Zprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -Zfunction-sections=y
> + RUSTFLAGS_AUTOFDO_CLANG += -Cllvm-args=-split-machine-functions
> endif
>
> ifdef CONFIG_LTO_CLANG_THIN
> @@ -21,4 +25,4 @@ ifdef CONFIG_LTO_CLANG_THIN
> KBUILD_LDFLAGS += -plugin-opt=-split-machine-functions
> endif
>
> -export CFLAGS_AUTOFDO_CLANG
> +export CFLAGS_AUTOFDO_CLANG RUSTFLAGS_AUTOFDO_CLANG
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 0718e39cedda..eaddf6637669 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -123,6 +123,9 @@ ifeq ($(CONFIG_AUTOFDO_CLANG),y)
> _c_flags += $(if $(patsubst n%,, \
> $(AUTOFDO_PROFILE_$(target-stem).o)$(AUTOFDO_PROFILE)$(is-kernel-object)), \
> $(CFLAGS_AUTOFDO_CLANG))
> +_rust_flags += $(if $(patsubst n%,, \
> + $(AUTOFDO_PROFILE_$(target-stem).o)$(AUTOFDO_PROFILE)$(is-kernel-object)), \
> + $(RUSTFLAGS_AUTOFDO_CLANG))
> endif
>
> #
>
> ---
> base-commit: 1f318b96cc84d7c2ab792fcc0bfd42a7ca890681
> change-id: 20260309-autofdo-8d01e7977fed
>
> Best regards,