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/15/26 21:12, Boqun Feng wrote: > [Cc s390] > > On Mon, Jul 13, 2026 at 12:45:07PM +0800, kernel test robot wrote: >> tree: https://git.kernel.org/pub/scm/linux/kernel/git/boqun/linux.git rust-rcu >> head: dcecd5f6e71e2437c8abe333ee2426fbe63e6398 >> commit: 27e30521043c39ca18ea3e28f825f9c7bd30b580 [14/27] rust: Introduce interrupt module >> config: s390-randconfig-002-20260713 (https://download.01.org/0day-ci/archive/20260713/[email protected]/config) >> compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) >> rustc: rustc 1.96.0 (ac68faa20 2026-05-25) >> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260713/[email protected]/reproduce) >> >> If you fix the issue in a separate patch/commit (i.e. not just a new version of >> the same patch/commit), kindly add following tags >> | Reported-by: kernel test robot <[email protected]> >> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ >> >> All warnings (new ones prefixed by >>): >> >> 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. >> -- >> 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? Hi, Unfortunately if a function is inlined, then noinstr is not honored. The reason for using noinstr for these functions is interaction of instrumentation with lockdep, so inlining them into non-noinstr callers breaks KMSAN in a way that is described in the commit message. Best regards, Ilya > > Regards, > Boqun > >> >> vim +/arch_local_save_flags +17 rust/helpers/interrupt.c >> >> 14 >> 15 __rust_helper bool rust_helper_irqs_disabled(void) >> 16 { >> > 17 return irqs_disabled(); >> >> -- >> 0-DAY CI Kernel Test Service >> https://github.com/intel/lkp-tests/wiki