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
Ilya Leoshkevich <[email protected]>
| Newsgroups | dev.linux.lists.llvm,dev.linux.lists.oe-kbuild-all,org.kernel.vger.linux-s390 |
|---|---|
| Message-ID | <[email protected]> |
On 7/16/26 13:56, Heiko Carstens wrote:
> 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?
Hi, sure, making them out-of-line would make life easier.
I will look into it.