Re: [boqun:rust-rcu 14/27] rust/helpers/interrupt.c:17:9: warning: static function 'arch_local_save_flags' is used in an inline function with external linkage
Heiko Carstens <[email protected]>
| Newsgroups | dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all,org.kernel.vger.linux-s390 |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Jul 15, 2026 at 12:12:53PM -0700, Boqun Feng wrote:
> [Cc s390]
> > In file included from rust/helpers/helpers.c:68:
> > >> rust/helpers/interrupt.c:17:9: warning: static function 'arch_local_save_flags' is used in an inline function with external linkage [-Wstatic-in-inline]
> > 17 | return irqs_disabled();
> > | ^
> > include/linux/irqflags.h:256:3: note: expanded from macro 'irqs_disabled'
> > 256 | raw_local_save_flags(_flags); \
> > | ^
> > include/linux/irqflags.h:184:11: note: expanded from macro 'raw_local_save_flags'
> > 184 | flags = arch_local_save_flags(); \
> > | ^
> > rust/helpers/interrupt.c:15:1: note: use 'static' to give inline function 'rust_helper_irqs_disabled' internal linkage
> > 15 | __rust_helper bool rust_helper_irqs_disabled(void)
> > | ^
> > | static
> > rust/helpers/helpers.c:38:23: note: expanded from macro '__rust_helper'
> > 38 | #define __rust_helper __always_inline
> > | ^
> > include/linux/compiler_attributes.h:55:41: note: expanded from macro '__always_inline'
> > 55 | #define __always_inline inline __attribute__((__always_inline__))
> > | ^
> > include/linux/compiler_types.h:235:16: note: expanded from macro 'inline'
> > 235 | #define inline inline __gnu_inline __inline_maybe_unused notrace
> > | ^
> > arch/s390/include/asm/irqflags.h:46:48: note: 'arch_local_save_flags' declared here
> > 46 | static arch_local_irq_attributes unsigned long arch_local_save_flags(void)
> > | ^
> > 1 warning generated.
> > warning: 1 warning emitted
> >
>
> This seems not a Rust-only issue to me, basically you got the warning
> whenever you have an inline function calling irqs_disabled(). I'm a bit
> curious why 1b301f5f28ba ("s390/irqflags: do not instrument
> arch_local_irq_*() with KMSAN") wanted to add noinline when KMSAN=y, all
> you need is noinstr, no?
While the combination of __always_inline and noinstr _seems_ to work
with clang, this looks just wrong to me. I guess we really would need
a (single) out-of-line variant of the affected functions in question
for KMSAN.
Ilya, since that was your commit, does that sound sane?