Kernel
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 
- 30 participants
 - 21067 discussions
 
                        
                            
                                
                            
                            [openeuler:openEuler-1.0-LTS 1743/1743] kernel/sched/cputime.c:571:38: warning: ignoring attribute 'section (".data..percpu..shared_aligned")' because it conflicts with previous 'section (".data..percpu")'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   ba07135cf74b1424e2f7f0c60e59c5b206ab320c
commit: 1af75aa95dc59c902a0ce961fa499b44a2fdf97c [1743/1743] sched/cputime: use sched idle time accounting
config: x86_64-buildonly-randconfig-2004-20250802 (https://download.01.org/0day-ci/archive/20250804/202508041745.lcYK6ulr-lkp@…)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041745.lcYK6ulr-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041745.lcYK6ulr-lkp@intel.com/
All warnings (new ones prefixed by >>):
   In file included from include/asm-generic/percpu.h:7,
                    from arch/x86/include/asm/percpu.h:544,
                    from arch/x86/include/asm/current.h:6,
                    from include/linux/sched.h:12,
                    from kernel/sched/sched.h:5,
                    from kernel/sched/cputime.c:4:
>> kernel/sched/cputime.c:571:38: warning: ignoring attribute 'section (".data..percpu..shared_aligned")' because it conflicts with previous 'section (".data..percpu")' [-Wattributes]
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         |                                      ^~~~~~~~~~
   include/linux/percpu-defs.h:93:45: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
      93 |         extern __PCPU_ATTRS(sec) __typeof__(type) name;                 \
         |                                             ^~~~
   kernel/sched/cputime.c:571:1: note: in expansion of macro 'DEFINE_PER_CPU_SHARED_ALIGNED'
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/sched/sched.h:935:36: note: previous declaration here
     935 | DECLARE_PER_CPU(struct rq_cputime, rq_cputimes);
         |                                    ^~~~~~~~~~~
   include/linux/percpu-defs.h:87:51: note: in definition of macro 'DECLARE_PER_CPU_SECTION'
      87 |         extern __PCPU_ATTRS(sec) __typeof__(type) name
         |                                                   ^~~~
   kernel/sched/sched.h:935:1: note: in expansion of macro 'DECLARE_PER_CPU'
     935 | DECLARE_PER_CPU(struct rq_cputime, rq_cputimes);
         | ^~~~~~~~~~~~~~~
>> kernel/sched/cputime.c:571:38: warning: ignoring attribute 'section (".data..percpu..shared_aligned")' because it conflicts with previous 'section (".data..percpu")' [-Wattributes]
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         |                                      ^~~~~~~~~~
   include/linux/percpu-defs.h:95:20: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
      95 |         __typeof__(type) name
         |                    ^~~~
   kernel/sched/cputime.c:571:1: note: in expansion of macro 'DEFINE_PER_CPU_SHARED_ALIGNED'
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/sched/cputime.c:571:50: note: previous declaration here
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         |                                                  ^~~~~~~~~~~
   include/linux/percpu-defs.h:93:51: note: in definition of macro 'DEFINE_PER_CPU_SECTION'
      93 |         extern __PCPU_ATTRS(sec) __typeof__(type) name;                 \
         |                                                   ^~~~
   kernel/sched/cputime.c:571:1: note: in expansion of macro 'DEFINE_PER_CPU_SHARED_ALIGNED'
     571 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +571 kernel/sched/cputime.c
   569	
   570	int use_sched_idle_time __read_mostly;
 > 571	DEFINE_PER_CPU_SHARED_ALIGNED(struct rq_cputime, rq_cputimes);
   572	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2630/2630] include/trace/events/kmem.h:438:1: error: conflicting types for '__traceiter_spe_boost_spe_record'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   e46fbbc0ad301c3517340bf966d39b8493a2ebb0
commit: c99ab2e30089c85721b1d05b616cfb7daacf32d6 [2630/2630] arm-spe: Export boost SPE sampling info via tracefs tracepoint
config: arm64-randconfig-r111-20250803 (https://download.01.org/0day-ci/archive/20250804/202508042343.eV7Ma2ft-lkp@…)
compiler: clang version 16.0.6 (https://github.com/llvm/llvm-project 7cbf1a2591520c2491aa35339f227775f4d3adf6)
reproduce: (https://download.01.org/0day-ci/archive/20250804/202508042343.eV7Ma2ft-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508042343.eV7Ma2ft-lkp@intel.com/
All errors (new ones prefixed by >>):
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:305:6: note: expanded from macro 'DEFINE_TRACE_FN'
           int __traceiter_##_name(void *__data, proto);                   \
               ^
   <scratch space>:127:1: note: expanded from here
   __traceiter_mm_spe_record
   ^
   include/trace/events/kmem.h:416:1: note: previous declaration is here
   TRACE_EVENT(mm_spe_record,
   ^
   include/linux/tracepoint.h:566:2: note: expanded from macro 'TRACE_EVENT'
           DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:432:2: note: expanded from macro 'DECLARE_TRACE'
           __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
           ^
   include/linux/tracepoint.h:252:13: note: expanded from macro '__DECLARE_TRACE'
           extern int __traceiter_##name(data_proto);                      \
                      ^
   <scratch space>:50:1: note: expanded from here
   __traceiter_mm_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:95:
   include/trace/events/kmem.h:417:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:417:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
   include/trace/events/kmem.h:416:1: error: conflicting types for '__traceiter_mm_spe_record'
   TRACE_EVENT(mm_spe_record,
   ^
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:319:6: note: expanded from macro 'DEFINE_TRACE_FN'
           int __traceiter_##_name(void *__data, proto)                    \
               ^
   <scratch space>:137:1: note: expanded from here
   __traceiter_mm_spe_record
   ^
   include/trace/events/kmem.h:416:1: note: previous declaration is here
   TRACE_EVENT(mm_spe_record,
   ^
   include/linux/tracepoint.h:566:2: note: expanded from macro 'TRACE_EVENT'
           DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:432:2: note: expanded from macro 'DECLARE_TRACE'
           __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
           ^
   include/linux/tracepoint.h:252:13: note: expanded from macro '__DECLARE_TRACE'
           extern int __traceiter_##name(data_proto);                      \
                      ^
   <scratch space>:50:1: note: expanded from here
   __traceiter_mm_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:95:
   include/trace/events/kmem.h:417:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:416:1: error: conflicting types for '__probestub_mm_spe_record'
   TRACE_EVENT(mm_spe_record,
   ^
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:335:7: note: expanded from macro 'DEFINE_TRACE_FN'
           void __probestub_##_name(void *__data, proto)                   \
                ^
   <scratch space>:2:1: note: expanded from here
   __probestub_mm_spe_record
   ^
   include/trace/events/kmem.h:416:1: note: previous declaration is here
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:306:7: note: expanded from macro 'DEFINE_TRACE_FN'
           void __probestub_##_name(void *__data, proto);                  \
                ^
   <scratch space>:128:1: note: expanded from here
   __probestub_mm_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:95:
   include/trace/events/kmem.h:439:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
>> include/trace/events/kmem.h:438:1: error: conflicting types for '__traceiter_spe_boost_spe_record'
   TRACE_EVENT(spe_boost_spe_record,
   ^
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:305:6: note: expanded from macro 'DEFINE_TRACE_FN'
           int __traceiter_##_name(void *__data, proto);                   \
               ^
   <scratch space>:12:1: note: expanded from here
   __traceiter_spe_boost_spe_record
   ^
   include/trace/events/kmem.h:438:1: note: previous declaration is here
   TRACE_EVENT(spe_boost_spe_record,
   ^
   include/linux/tracepoint.h:566:2: note: expanded from macro 'TRACE_EVENT'
           DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:432:2: note: expanded from macro 'DECLARE_TRACE'
           __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
           ^
   include/linux/tracepoint.h:252:13: note: expanded from macro '__DECLARE_TRACE'
           extern int __traceiter_##name(data_proto);                      \
                      ^
   <scratch space>:5:1: note: expanded from here
   __traceiter_spe_boost_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:95:
   include/trace/events/kmem.h:439:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:439:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
>> include/trace/events/kmem.h:438:1: error: conflicting types for '__traceiter_spe_boost_spe_record'
   TRACE_EVENT(spe_boost_spe_record,
   ^
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:319:6: note: expanded from macro 'DEFINE_TRACE_FN'
           int __traceiter_##_name(void *__data, proto)                    \
               ^
   <scratch space>:22:1: note: expanded from here
   __traceiter_spe_boost_spe_record
   ^
   include/trace/events/kmem.h:438:1: note: previous declaration is here
   TRACE_EVENT(spe_boost_spe_record,
   ^
   include/linux/tracepoint.h:566:2: note: expanded from macro 'TRACE_EVENT'
           DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:432:2: note: expanded from macro 'DECLARE_TRACE'
           __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args),              \
           ^
   include/linux/tracepoint.h:252:13: note: expanded from macro '__DECLARE_TRACE'
           extern int __traceiter_##name(data_proto);                      \
                      ^
   <scratch space>:5:1: note: expanded from here
   __traceiter_spe_boost_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:95:
   include/trace/events/kmem.h:439:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
>> include/trace/events/kmem.h:438:1: error: conflicting types for '__probestub_spe_boost_spe_record'
   TRACE_EVENT(spe_boost_spe_record,
   ^
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:335:7: note: expanded from macro 'DEFINE_TRACE_FN'
           void __probestub_##_name(void *__data, proto)                   \
                ^
   <scratch space>:33:1: note: expanded from here
   __probestub_spe_boost_spe_record
   ^
   include/trace/events/kmem.h:438:1: note: previous declaration is here
   include/trace/define_trace.h:28:2: note: expanded from macro 'TRACE_EVENT'
           DEFINE_TRACE(name, PARAMS(proto), PARAMS(args))
           ^
   include/linux/tracepoint.h:341:2: note: expanded from macro 'DEFINE_TRACE'
           DEFINE_TRACE_FN(name, NULL, NULL, PARAMS(proto), PARAMS(args));
           ^
   include/linux/tracepoint.h:306:7: note: expanded from macro 'DEFINE_TRACE_FN'
           void __probestub_##_name(void *__data, proto);                  \
                ^
   <scratch space>:13:1: note: expanded from here
   __probestub_spe_boost_spe_record
   ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:102:
   In file included from include/trace/trace_events.h:286:
   include/trace/events/kmem.h:417:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:439:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:102:
   In file included from include/trace/trace_events.h:460:
   include/trace/events/kmem.h:417:18: warning: declaration of 'struct mem_sampling_record' will not be visible outside of this function [-Wvisibility]
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:419:10: error: incompatible pointer types passing 'struct mem_sampling_record *' to parameter of type 'struct mem_sampling_record *' [-Werror,-Wincompatible-pointer-types]
           TP_ARGS(record),
                   ^~~~~~
   include/linux/tracepoint.h:148:26: note: expanded from macro 'TP_ARGS'
   #define TP_ARGS(args...)        args
                                   ^~~~
   include/trace/trace_events.h:42:16: note: expanded from macro 'TRACE_EVENT'
                                PARAMS(args),                     \
                                       ^~~~
   include/linux/tracepoint.h:107:25: note: expanded from macro 'PARAMS'
   #define PARAMS(args...) args
                           ^~~~
   include/trace/trace_events.h:427:51: note: expanded from macro 'DECLARE_EVENT_CLASS'
   __DECLARE_EVENT_CLASS(call, PARAMS(proto), PARAMS(args), PARAMS(tstruct), \
                                                     ^~~~
   include/linux/tracepoint.h:107:25: note: expanded from macro 'PARAMS'
   #define PARAMS(args...) args
                           ^~~~
   include/trace/trace_events.h:410:64: note: expanded from macro '\
   __DECLARE_EVENT_CLASS'
           __data_size = trace_event_get_offsets_##call(&__data_offsets, args); \
                                                                         ^~~~
   include/trace/events/kmem.h:417:39: note: passing argument to parameter 'record' here
           TP_PROTO(struct mem_sampling_record *record),
                                                ^
   In file included from mm/slab_common.c:35:
   In file included from include/trace/events/kmem.h:529:
   In file included from include/trace/define_trace.h:102:
   In file included from include/trace/trace_events.h:460:
   include/trace/events/kmem.h:428:26: error: incomplete definition of type 'struct mem_sampling_record'
                   __entry->vaddr = record->virt_addr;
                                    ~~~~~~^
   include/trace/stages/stage6_event_callback.h:135:33: note: expanded from macro 'TP_fast_assign'
   #define TP_fast_assign(args...) args
                                   ^~~~
   include/trace/trace_events.h:44:16: note: expanded from macro 'TRACE_EVENT'
                                PARAMS(assign),                   \
                                       ^~~~~~
   include/linux/tracepoint.h:107:25: note: expanded from macro 'PARAMS'
   #define PARAMS(args...) args
                           ^~~~
   include/trace/trace_events.h:428:16: note: expanded from macro 'DECLARE_EVENT_CLASS'
                         PARAMS(assign), PARAMS(print))                    \
                                ^~~~~~
   include/linux/tracepoint.h:107:25: note: expanded from macro 'PARAMS'
   #define PARAMS(args...) args
                           ^~~~
   include/trace/trace_events.h:420:4: note: expanded from macro '\
   __DECLARE_EVENT_CLASS'
           { assign; }                                                     \
             ^~~~~~
   include/trace/events/kmem.h:417:18: note: forward declaration of 'struct mem_sampling_record'
           TP_PROTO(struct mem_sampling_record *record),
                           ^
   include/trace/events/kmem.h:429:26: error: incomplete definition of type 'struct mem_sampling_record'
                   __entry->paddr = record->phys_addr;
Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for RESCTRL_FS
   Depends on [n]: MISC_FILESYSTEMS [=n] && ARCH_HAS_CPU_RESCTRL [=y]
   Selected by [y]:
   - ARM64_MPAM [=y]
vim +/__traceiter_spe_boost_spe_record +438 include/trace/events/kmem.h
   437	
 > 438	TRACE_EVENT(spe_boost_spe_record,
   439		TP_PROTO(struct mem_sampling_record *record),
   440	
   441		TP_ARGS(record),
   442	
   443		TP_STRUCT__entry(
   444			__field(u64, boost_spe_pa1)
   445			__field(u64, boost_spe_pa2)
   446			__field(u64, boost_spe_pa3)
   447			__field(u64, boost_spe_pa4)
   448			__field(u64, boost_spe_pa5)
   449			__field(u64, boost_spe_pa6)
   450			__field(u64, boost_spe_pa7)
   451			__field(u64, boost_spe_pa8)
   452		),
   453	
   454		TP_fast_assign(
   455			__entry->boost_spe_pa1 = record->boost_spe_addr[0];
   456			__entry->boost_spe_pa2 = record->boost_spe_addr[1];
   457			__entry->boost_spe_pa3 = record->boost_spe_addr[2];
   458			__entry->boost_spe_pa4 = record->boost_spe_addr[3];
   459			__entry->boost_spe_pa5 = record->boost_spe_addr[4];
   460			__entry->boost_spe_pa6 = record->boost_spe_addr[5];
   461			__entry->boost_spe_pa7 = record->boost_spe_addr[6];
   462			__entry->boost_spe_pa8 = record->boost_spe_addr[7];
   463		),
   464	
   465		TP_printk("boost_spe_addr[0]=0x%llx boost_spe_addr[1]=0x%llx tlb_addr[2]=0x%llx tlb_addr[3]=0x%llx tlb_addr[4]=0x%llx tlb_addr[5]=0x%llx tlb_addr[6]=0x%llx tlb_addr[7]=0x%llx",
   466			__entry->boost_spe_pa1, __entry->boost_spe_pa2,
   467			__entry->boost_spe_pa3, __entry->boost_spe_pa4,
   468			__entry->boost_spe_pa5, __entry->boost_spe_pa6,
   469			__entry->boost_spe_pa7, __entry->boost_spe_pa8)
   470	);
   471	#endif /* CONFIG_ARM_SPE_MEM_SAMPLING */
   472	
   473	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2635/2635] fs/nfs/dir.c:1498:6: warning: no previous prototype for 'nfs_check_have_lookup_cache_flag'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   e46fbbc0ad301c3517340bf966d39b8493a2ebb0
commit: 18e360871c3f648ecb0d8cc9b23fd4268a64c17f [2635/2635] add enfs feature
config: x86_64-randconfig-2006-20250804 (https://download.01.org/0day-ci/archive/20250804/202508041629.6wf4G1eb-lkp@…)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041629.6wf4G1eb-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041629.6wf4G1eb-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/nfs/dir.c:1498:6: warning: no previous prototype for 'nfs_check_have_lookup_cache_flag' [-Wmissing-prototypes]
    1498 | bool nfs_check_have_lookup_cache_flag(struct nfs_server *server, int flag)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/nfs_check_have_lookup_cache_flag +1498 fs/nfs/dir.c
  1497	
> 1498	bool nfs_check_have_lookup_cache_flag(struct nfs_server *server, int flag)
  1499	{
  1500	#if IS_ENABLED(CONFIG_ENFS)
  1501		return enfs_check_have_lookup_cache_flag(server, flag);
  1502	#else
  1503		return (server->flags & NFS_MOUNT_LOOKUP_CACHE_NONE);
  1504	#endif
  1505	}
  1506	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2635/2635] include/linux/virtcca_cvm_domain.h:69:51: warning: declaration of 'struct pci_dev' will not be visible outside of this function
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   e46fbbc0ad301c3517340bf966d39b8493a2ebb0
commit: c5161d7e11a7e30755b2ec55aaebfd500193cbbc [2635/2635] virtCCA supports SR-IOV in CoDA scenarios.
config: x86_64-randconfig-2004-20250804 (https://download.01.org/0day-ci/archive/20250804/202508041601.9q74wpPL-lkp@…)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041601.9q74wpPL-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041601.9q74wpPL-lkp@intel.com/
All warnings (new ones prefixed by >>):
   In file included from net/sunrpc/sched.c:24:
>> include/linux/virtcca_cvm_domain.h:69:51: warning: declaration of 'struct pci_dev' will not be visible outside of this function [-Wvisibility]
      69 | static inline int virtcca_add_coda_pci_dev(struct pci_dev *pdev)
         |                                                   ^
   1 warning generated.
Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for PTP_1588_CLOCK
   Depends on [n]: NET [=y] && POSIX_TIMERS [=n]
   Selected by [m]:
   - SXE [=m] && NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_LINKDATA [=y] && (X86 [=y] || ARM64) && PCI [=y]
   - SXE_VF [=m] && NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_LINKDATA [=y] && (X86 [=y] || ARM64) && PCI [=y]
vim +69 include/linux/virtcca_cvm_domain.h
    68	
  > 69	static inline int virtcca_add_coda_pci_dev(struct pci_dev *pdev)
    70	{
    71		return 0;
    72	}
    73	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:openEuler-1.0-LTS] BUILD REGRESSION ba07135cf74b1424e2f7f0c60e59c5b206ab320c
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree/branch: https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
branch HEAD: ba07135cf74b1424e2f7f0c60e59c5b206ab320c  !17040  net: ch9200: fix uninitialised access during mii_nway_restart
Error/Warning (recently discovered and may have been fixed):
    https://lore.kernel.org/oe-kbuild-all/202507150036.2TFl4VP9-lkp@intel.com
    crypto/aegis128.o: warning: objtool: missing symbol for section .init.text
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:184:13: error: variable 'fault_level' set but not used [-Werror=unused-but-set-variable]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:185:13: error: variable 'pcie_src' set but not used [-Werror=unused-but-set-variable]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:384:5: error: no previous prototype for 'sss_init_hwdev' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:487:6: error: no previous prototype for 'sss_deinit_hwdev' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:518:6: error: no previous prototype for 'sss_hwdev_stop' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:531:6: error: no previous prototype for 'sss_hwdev_detach' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_init.c:539:6: error: no previous prototype for 'sss_hwdev_shutdown' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_io_flush.c:91:5: error: no previous prototype for 'sss_hwdev_flush_io' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_mgmt_info.c:54:5: error: no previous prototype for 'sss_init_mgmt_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwdev_mgmt_info.c:90:6: error: no previous prototype for 'sss_deinit_mgmt_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_adm.c:682:5: error: no previous prototype for 'sss_sync_send_adm_msg' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_adm_init.c:689:5: error: no previous prototype for 'sss_hwif_init_adm' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_adm_init.c:738:6: error: no previous prototype for 'sss_hwif_deinit_adm' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_adm_init.c:752:6: error: no previous prototype for 'sss_complete_adm_event' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c:130:13: error: no previous prototype for 'sss_ceq_intr_handle' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ceq.c:95:6: error: no previous prototype for 'sss_init_ceqe_desc' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:277:5: error: no previous prototype for 'sss_reinit_ctrlq_ctx' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:367:6: error: no previous prototype for 'sss_deinit_ctrlq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:501:5: error: no previous prototype for 'sss_init_ctrlq_channel' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:538:6: error: no previous prototype for 'sss_deinit_ctrlq_channel' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:547:6: error: no previous prototype for 'sss_ctrlq_flush_sync_cmd' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_ctrlq_init.c:573:5: error: no previous prototype for 'sss_wait_ctrlq_stop' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:104:4: error: no previous prototype for 'sss_get_pcie_itf_id' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:113:20: error: no previous prototype for 'sss_get_func_type' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:131:5: error: no previous prototype for 'sss_get_glb_pf_vf_offset' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:140:4: error: no previous prototype for 'sss_get_ppf_id' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:15:5: error: no previous prototype for 'sss_alloc_db_addr' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:37:6: error: no previous prototype for 'sss_free_db_addr' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:52:6: error: no previous prototype for 'sss_chip_set_msix_auto_mask' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:70:6: error: no previous prototype for 'sss_chip_set_msix_state' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:86:5: error: no previous prototype for 'sss_get_global_func_id' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_export.c:95:4: error: no previous prototype for 'sss_get_pf_id_of_vf' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_irq.c:111:6: error: no previous prototype for 'sss_deinit_irq_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_irq.c:54:5: error: no previous prototype for 'sss_init_irq_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mbx_init.c:252:5: error: no previous prototype for 'sss_init_func_mbx_msg' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mbx_init.c:401:5: error: no previous prototype for 'sss_hwif_init_mbx' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mbx_init.c:449:6: error: no previous prototype for 'sss_hwif_deinit_mbx' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mbx_init.c:872:6: error: no previous prototype for 'sss_recv_mbx_aeq_handler' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mgmt_init.c:248:6: error: no previous prototype for 'sss_mgmt_msg_aeqe_handler' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mgmt_init.c:271:6: error: no previous prototype for 'sss_force_complete_all' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_hwif_mgmt_init.c:290:6: error: no previous prototype for 'sss_flush_mgmt_workq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_error.c:34:18: error: no previous prototype for 'sss_detect_pci_error' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:37:6: error: no previous prototype for 'sss_init_uld_lock' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:42:6: error: no previous prototype for 'sss_lock_uld' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:47:6: error: no previous prototype for 'sss_unlock_uld' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:52:14: error: no previous prototype for 'sss_get_uld_names' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:57:22: error: no previous prototype for 'sss_get_uld_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_global.c:62:6: error: no previous prototype for 'sss_attach_is_enable' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_probe.c:276:5: error: no previous prototype for 'sss_attach_uld_driver' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_probe.c:548:5: error: no previous prototype for 'sss_pci_probe' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:120:6: error: no previous prototype for 'sss_detach_all_uld_driver' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:138:6: error: no previous prototype for 'sss_dettach_uld_dev' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:179:6: error: no previous prototype for 'sss_deinit_function' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:200:6: error: no previous prototype for 'sss_unmap_pci_bar' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:211:5: error: no previous prototype for 'sss_deinit_adapter' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:237:6: error: no previous prototype for 'sss_deinit_pci_dev' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:249:6: error: no previous prototype for 'sss_pci_remove' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_remove.c:90:6: error: no previous prototype for 'sss_detach_uld_driver' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/hw/sss_pci_shutdown.c:28:6: error: no previous prototype for 'sss_pci_shutdown' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool.c:467:6: error: no previous prototype for 'sss_nic_set_ethtool_ops' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_api.c:644:5: error: no previous prototype for 'sss_nic_finish_loop_test' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_stats.c:120:5: error: no previous prototype for 'sss_nic_set_link_ksettings' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_stats.c:44:5: error: no previous prototype for 'sss_nic_get_sset_count' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_stats.c:62:6: error: no previous prototype for 'sss_nic_get_ethtool_stats' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_stats.c:78:6: error: no previous prototype for 'sss_nic_get_strings' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ethtool_stats.c:98:5: error: no previous prototype for 'sss_nic_get_link_ksettings' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_filter.c:468:6: error: no previous prototype for 'sss_nic_set_rx_mode_work' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_filter.c:67:6: error: no previous prototype for 'sss_nic_clean_mac_list_filter' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_irq.c:266:5: error: no previous prototype for 'sss_nic_request_qp_irq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_irq.c:311:6: error: no previous prototype for 'sss_nic_release_qp_irq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.c:1029:22: error: no previous prototype for 'get_nic_uld_info' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.c:878:6: error: no previous prototype for 'sss_nic_port_module_cable_plug' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.c:884:6: error: no previous prototype for 'sss_nic_port_module_cable_unplug' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_main.c:890:6: error: no previous prototype for 'sss_nic_port_module_link_err' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_netdev_ops.c:297:5: error: no previous prototype for 'sss_nic_ndo_vlan_rx_add_vid' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_netdev_ops.c:318:5: error: no previous prototype for 'sss_nic_ndo_vlan_rx_kill_vid' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_netdev_ops.c:506:5: error: no previous prototype for 'sss_nic_ndo_set_vf_link_state' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_netdev_ops.c:787:6: error: no previous prototype for 'sss_nic_set_netdev_ops' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_netdev_ops.c:795:6: error: no previous prototype for 'sss_nic_is_netdev_ops_match' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:350:6: error: no previous prototype for 'sss_nic_flush_tcam_list' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:366:6: error: no previous prototype for 'sss_nic_flush_tcam_node_list' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:382:6: error: no previous prototype for 'sss_nic_flush_rx_flow_rule' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:397:6: error: no previous prototype for 'sss_nic_flush_tcam' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:797:5: error: no previous prototype for 'sss_nic_ethtool_update_flow' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:842:5: error: no previous prototype for 'sss_nic_ethtool_delete_flow' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:864:5: error: no previous prototype for 'sss_nic_ethtool_get_flow' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:887:5: error: no previous prototype for 'sss_nic_ethtool_get_all_flows' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_ntuple.c:905:6: error: no previous prototype for 'sss_nic_validate_channel_setting_in_ntuple' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:136:6: error: no previous prototype for 'sss_nic_free_rq_res_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:208:5: error: no previous prototype for 'sss_nic_init_rq_desc_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:235:6: error: no previous prototype for 'sss_nic_free_rq_desc_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:241:5: error: no previous prototype for 'sss_nic_alloc_rq_desc_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:267:5: error: no previous prototype for 'sss_nic_update_rx_rss' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:282:6: error: no previous prototype for 'sss_nic_reset_rx_rss' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_init.c:80:5: error: no previous prototype for 'sss_nic_alloc_rq_res_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_rx_reset.c:179:6: error: no previous prototype for 'sss_nic_rq_watchdog_handler' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:104:6: error: no previous prototype for 'sss_nic_init_all_sq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:128:5: error: no previous prototype for 'sss_nic_alloc_sq_desc_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:153:6: error: no previous prototype for 'sss_nic_free_sq_desc_group' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:200:6: error: no previous prototype for 'sss_nic_flush_all_sq' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:42:5: error: no previous prototype for 'sss_nic_alloc_sq_resource' [-Werror=missing-prototypes]
    drivers/net/ethernet/3snic/sssnic/nic/sss_nic_tx_init.c:87:6: error: no previous prototype for 'sss_nic_free_sq_resource' [-Werror=missing-prototypes]
    samples/vfio-mdev/mdpy-fb.o: warning: objtool: missing symbol for section .init.text
Error/Warning ids grouped by kconfigs:
recent_errors
|-- arm64-allmodconfig
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:no-previous-prototype-for-sss_deinit_hwdev
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:no-previous-prototype-for-sss_hwdev_detach
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:no-previous-prototype-for-sss_hwdev_shutdown
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:no-previous-prototype-for-sss_hwdev_stop
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:no-previous-prototype-for-sss_init_hwdev
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:variable-fault_level-set-but-not-used
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_init.c:error:variable-pcie_src-set-but-not-used
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_io_flush.c:error:no-previous-prototype-for-sss_hwdev_flush_io
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_mgmt_info.c:error:no-previous-prototype-for-sss_deinit_mgmt_info
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwdev_mgmt_info.c:error:no-previous-prototype-for-sss_init_mgmt_info
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_adm.c:error:no-previous-prototype-for-sss_sync_send_adm_msg
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_adm_init.c:error:no-previous-prototype-for-sss_complete_adm_event
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_adm_init.c:error:no-previous-prototype-for-sss_hwif_deinit_adm
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_adm_init.c:error:no-previous-prototype-for-sss_hwif_init_adm
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ceq.c:error:no-previous-prototype-for-sss_ceq_intr_handle
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ceq.c:error:no-previous-prototype-for-sss_init_ceqe_desc
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_ctrlq_flush_sync_cmd
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_deinit_ctrlq
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_deinit_ctrlq_channel
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_init_ctrlq_channel
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_reinit_ctrlq_ctx
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_ctrlq_init.c:error:no-previous-prototype-for-sss_wait_ctrlq_stop
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_alloc_db_addr
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_chip_set_msix_auto_mask
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_chip_set_msix_state
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_free_db_addr
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_func_type
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_glb_pf_vf_offset
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_global_func_id
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_pcie_itf_id
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_pf_id_of_vf
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_export.c:error:no-previous-prototype-for-sss_get_ppf_id
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_irq.c:error:no-previous-prototype-for-sss_deinit_irq_info
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_irq.c:error:no-previous-prototype-for-sss_init_irq_info
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mbx_init.c:error:no-previous-prototype-for-sss_hwif_deinit_mbx
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mbx_init.c:error:no-previous-prototype-for-sss_hwif_init_mbx
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mbx_init.c:error:no-previous-prototype-for-sss_init_func_mbx_msg
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mbx_init.c:error:no-previous-prototype-for-sss_recv_mbx_aeq_handler
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mgmt_init.c:error:no-previous-prototype-for-sss_flush_mgmt_workq
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mgmt_init.c:error:no-previous-prototype-for-sss_force_complete_all
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_hwif_mgmt_init.c:error:no-previous-prototype-for-sss_mgmt_msg_aeqe_handler
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_error.c:error:no-previous-prototype-for-sss_detect_pci_error
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_attach_is_enable
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_get_uld_info
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_get_uld_names
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_init_uld_lock
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_lock_uld
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_global.c:error:no-previous-prototype-for-sss_unlock_uld
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_probe.c:error:no-previous-prototype-for-sss_attach_uld_driver
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_probe.c:error:no-previous-prototype-for-sss_pci_probe
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_deinit_adapter
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_deinit_function
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_deinit_pci_dev
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_detach_all_uld_driver
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_detach_uld_driver
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_dettach_uld_dev
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_pci_remove
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_remove.c:error:no-previous-prototype-for-sss_unmap_pci_bar
|   |-- drivers-net-ethernet-3snic-sssnic-hw-sss_pci_shutdown.c:error:no-previous-prototype-for-sss_pci_shutdown
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool.c:error:no-previous-prototype-for-sss_nic_set_ethtool_ops
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_api.c:error:no-previous-prototype-for-sss_nic_finish_loop_test
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_stats.c:error:no-previous-prototype-for-sss_nic_get_ethtool_stats
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_stats.c:error:no-previous-prototype-for-sss_nic_get_link_ksettings
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_stats.c:error:no-previous-prototype-for-sss_nic_get_sset_count
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_stats.c:error:no-previous-prototype-for-sss_nic_get_strings
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ethtool_stats.c:error:no-previous-prototype-for-sss_nic_set_link_ksettings
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_filter.c:error:no-previous-prototype-for-sss_nic_clean_mac_list_filter
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_filter.c:error:no-previous-prototype-for-sss_nic_set_rx_mode_work
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_irq.c:error:no-previous-prototype-for-sss_nic_release_qp_irq
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_irq.c:error:no-previous-prototype-for-sss_nic_request_qp_irq
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_main.c:error:no-previous-prototype-for-get_nic_uld_info
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_main.c:error:no-previous-prototype-for-sss_nic_port_module_cable_plug
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_main.c:error:no-previous-prototype-for-sss_nic_port_module_cable_unplug
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_main.c:error:no-previous-prototype-for-sss_nic_port_module_link_err
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_netdev_ops.c:error:no-previous-prototype-for-sss_nic_is_netdev_ops_match
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_netdev_ops.c:error:no-previous-prototype-for-sss_nic_ndo_set_vf_link_state
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_netdev_ops.c:error:no-previous-prototype-for-sss_nic_ndo_vlan_rx_add_vid
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_netdev_ops.c:error:no-previous-prototype-for-sss_nic_ndo_vlan_rx_kill_vid
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_netdev_ops.c:error:no-previous-prototype-for-sss_nic_set_netdev_ops
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_ethtool_delete_flow
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_ethtool_get_all_flows
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_ethtool_get_flow
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_ethtool_update_flow
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_flush_rx_flow_rule
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_flush_tcam
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_flush_tcam_list
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_flush_tcam_node_list
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_ntuple.c:error:no-previous-prototype-for-sss_nic_validate_channel_setting_in_ntuple
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_alloc_rq_desc_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_alloc_rq_res_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_free_rq_desc_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_free_rq_res_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_init_rq_desc_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_reset_rx_rss
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_init.c:error:no-previous-prototype-for-sss_nic_update_rx_rss
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_rx_reset.c:error:no-previous-prototype-for-sss_nic_rq_watchdog_handler
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_alloc_sq_desc_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_alloc_sq_resource
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_flush_all_sq
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_free_sq_desc_group
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_free_sq_resource
|   |-- drivers-net-ethernet-3snic-sssnic-nic-sss_nic_tx_init.c:error:no-previous-prototype-for-sss_nic_init_all_sq
|   `-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|-- arm64-allnoconfig
|   |-- mm-memory.c:error:implicit-declaration-of-function-hugetlb_insert_hugepage_pte_by_pa
|   `-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled
|-- arm64-randconfig-002-20250804
|   |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|   |-- mm-memory.c:error:implicit-declaration-of-function-hugetlb_insert_hugepage_pte_by_pa
|   `-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled
|-- arm64-randconfig-003-20250804
|   |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|   `-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled
|-- arm64-randconfig-004-20250804
|   |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|   |-- include-linux-uaccess.h:warning:abs-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:addr-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:ai-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:attr-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:blk-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:cap-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:cd-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:dom-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:hypercall-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:i-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:irq_event-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:kdata-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:ke-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:kvm_userspace_mem-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:log-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:mmapcmd-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:ms_info-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:msf-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:msi-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:op-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:policy-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:q-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:ra-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:routing-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:space_args-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:transid-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_api-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_copy-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_register-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_unregister-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_wake-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:uffdio_zeropage-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:user_auxv-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:volctrl-may-be-used-uninitialized
|   |-- include-linux-uaccess.h:warning:zone-may-be-used-uninitialized
|   `-- mm-memory.c:error:implicit-declaration-of-function-hugetlb_insert_hugepage_pte_by_pa
|-- x86_64-allnoconfig
|   `-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled-Werror-Wimplicit-function-declaration
|-- x86_64-allyesconfig
|   `-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|-- x86_64-buildonly-randconfig-001-20250804
|   |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|   |-- kernel-sched-core.c:error:use-of-undeclared-identifier-root_task_group
|   |-- mm-hugetlb.c:warning:no-previous-prototype-for-function-free_huge_page_to_dhugetlb_pool
|   |-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled-Werror-Wimplicit-function-declaration
|   `-- samples-vfio-mdev-mdpy-fb.o:warning:objtool:missing-symbol-for-section-.init.text
|-- x86_64-buildonly-randconfig-005-20250804
|   |-- block-bfq-cgroup.o:warning:objtool:missing-symbol-for-section-.text
|   |-- block-ioctl.o:warning:objtool:missing-symbol-for-section-.text
|   |-- block-partitions-check.o:warning:objtool:missing-symbol-for-section-.text
|   |-- block-scsi_ioctl.o:warning:objtool:missing-symbol-for-section-.text
|   |-- crypto-aegis128.o:warning:objtool:missing-symbol-for-section-.init.text
|   |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
|   |-- mm-memcontrol.o:warning:objtool:missing-symbol-for-section-.text.unlikely.
|   |-- mm-rodata_test.o:warning:objtool:missing-symbol-for-section-.text
|   `-- mm-vmscan.c:error:implicit-declaration-of-function-kernel_swap_enabled-Werror-Wimplicit-function-declaration
`-- x86_64-rhel-9.4-rust
    |-- drivers-pinctrl-core.c:error:Cannot-parse-struct-or-union
    `-- mm-hugetlb.c:warning:no-previous-prototype-for-function-free_huge_page_to_dhugetlb_pool
elapsed time: 724m
configs tested: 17
configs skipped: 122
tested configs:
arm64                        allmodconfig    gcc-15.1.0
arm64                         allnoconfig    gcc-15.1.0
arm64                           defconfig    gcc-15.1.0
arm64             randconfig-001-20250804    gcc-6.5.0
arm64             randconfig-002-20250804    gcc-11.5.0
arm64             randconfig-003-20250804    gcc-11.5.0
arm64             randconfig-004-20250804    gcc-14.3.0
x86_64                        allnoconfig    clang-20
x86_64                       allyesconfig    clang-20
x86_64  buildonly-randconfig-001-20250804    clang-20
x86_64  buildonly-randconfig-002-20250804    gcc-12
x86_64  buildonly-randconfig-003-20250804    gcc-12
x86_64  buildonly-randconfig-004-20250804    gcc-12
x86_64  buildonly-randconfig-005-20250804    clang-20
x86_64  buildonly-randconfig-006-20250804    gcc-12
x86_64                          defconfig    gcc-11
x86_64                      rhel-9.4-rust    clang-22
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:openEuler-1.0-LTS 1743/1743] kernel/trace/bpf_trace.c:1273:5: warning: no previous prototype for 'bpf_event_notify'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   ba07135cf74b1424e2f7f0c60e59c5b206ab320c
commit: 00d0f1b149a5201c072e868915c76f909c11c38f [1743/1743] bpf: support raw tracepoints in modules
config: x86_64-buildonly-randconfig-2004-20250802 (https://download.01.org/0day-ci/archive/20250804/202508041528.hcdsgsEh-lkp@…)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041528.hcdsgsEh-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041528.hcdsgsEh-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> kernel/trace/bpf_trace.c:1273:5: warning: no previous prototype for 'bpf_event_notify' [-Wmissing-prototypes]
    1273 | int bpf_event_notify(struct notifier_block *nb, unsigned long op, void *module)
         |     ^~~~~~~~~~~~~~~~
>> kernel/trace/bpf_trace.c:1312:12: warning: no previous prototype for 'bpf_event_init' [-Wmissing-prototypes]
    1312 | int __init bpf_event_init(void)
         |            ^~~~~~~~~~~~~~
vim +/bpf_event_notify +1273 kernel/trace/bpf_trace.c
  1271	
  1272	#ifdef CONFIG_MODULES
> 1273	int bpf_event_notify(struct notifier_block *nb, unsigned long op, void *module)
  1274	{
  1275		struct bpf_trace_module *btm, *tmp;
  1276		struct module *mod = module;
  1277	
  1278		if (mod->num_bpf_raw_events == 0 ||
  1279		    (op != MODULE_STATE_COMING && op != MODULE_STATE_GOING))
  1280			return 0;
  1281	
  1282		mutex_lock(&bpf_module_mutex);
  1283	
  1284		switch (op) {
  1285		case MODULE_STATE_COMING:
  1286			btm = kzalloc(sizeof(*btm), GFP_KERNEL);
  1287			if (btm) {
  1288				btm->module = module;
  1289				list_add(&btm->list, &bpf_trace_modules);
  1290			}
  1291			break;
  1292		case MODULE_STATE_GOING:
  1293			list_for_each_entry_safe(btm, tmp, &bpf_trace_modules, list) {
  1294				if (btm->module == module) {
  1295					list_del(&btm->list);
  1296					kfree(btm);
  1297					break;
  1298				}
  1299			}
  1300			break;
  1301		}
  1302	
  1303		mutex_unlock(&bpf_module_mutex);
  1304	
  1305		return 0;
  1306	}
  1307	
  1308	static struct notifier_block bpf_module_nb = {
  1309		.notifier_call = bpf_event_notify,
  1310	};
  1311	
> 1312	int __init bpf_event_init(void)
  1313	{
  1314		register_module_notifier(&bpf_module_nb);
  1315		return 0;
  1316	}
  1317	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    04 Aug '25
                    
                        If the GICv5 system has a large number of PEs and IRS components,
traversing the linked list to find the irs_data corresponding
to a specific SPI interrupt will be very slow.
Since the maximum number of IRS nodes, the minimum and maximum SPI
interrupt numbers for each IRS is known during the initialization
of the IRS nodes, sort the IRS nodes by interrupt number at
the initial stage. This way, when allocating SPI interrupts, we can
directly perform a binary search on the irs_data
using the SPI interrupt number with O(log N) complexity.
Signed-off-by: Jinjie Ruan <ruanjinjie(a)huawei.com>
---
 drivers/irqchip/irq-gic-v5-irs.c   | 85 +++++++++++++++++++++---------
 include/linux/irqchip/arm-gic-v5.h |  2 +
 2 files changed, 61 insertions(+), 26 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v5-irs.c b/drivers/irqchip/irq-gic-v5-irs.c
index f845415f9143..5f0324467142 100644
--- a/drivers/irqchip/irq-gic-v5-irs.c
+++ b/drivers/irqchip/irq-gic-v5-irs.c
@@ -8,6 +8,7 @@
 #include <linux/log2.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/sort.h>
 
 #include <linux/irqchip.h>
 #include <linux/irqchip/arm-gic-v5.h>
@@ -22,7 +23,7 @@
 #define IRS_FLAGS_NON_COHERENT		BIT(0)
 
 static DEFINE_PER_CPU_READ_MOSTLY(struct gicv5_irs_chip_data *, per_cpu_irs_data);
-static LIST_HEAD(irs_nodes);
+static struct gicv5_irs_chip_data **irs_nodes;
 
 static u32 irs_readl_relaxed(struct gicv5_irs_chip_data *irs_data,
 			     const u32 reg_offset)
@@ -382,17 +383,19 @@ int gicv5_irs_cpu_to_iaffid(int cpuid, u16 *iaffid)
 
 struct gicv5_irs_chip_data *gicv5_irs_lookup_by_spi_id(u32 spi_id)
 {
-	struct gicv5_irs_chip_data *irs_data;
-	u32 min, max;
-
-	list_for_each_entry(irs_data, &irs_nodes, entry) {
-		if (!irs_data->spi_range)
-			continue;
-
-		min = irs_data->spi_min;
-		max = irs_data->spi_min + irs_data->spi_range - 1;
-		if (spi_id >= min && spi_id <= max)
-			return irs_data;
+	int l = 0, r = gicv5_global_data.irs_count - 1;
+
+	while (l <= r) {
+		int m = (l + r) >> 1;
+
+		if (irs_nodes[m]->spi_min <= spi_id &&
+		    spi_id <= irs_nodes[m]->spi_max) {
+			return irs_nodes[m];
+		} else if (spi_id < irs_nodes[m]->spi_min) {
+			r = m - 1;
+		} else {
+			l = m + 1;
+		}
 	}
 
 	return NULL;
@@ -489,7 +492,7 @@ void gicv5_irs_syncr(void)
 	struct gicv5_irs_chip_data *irs_data;
 	u32 syncr;
 
-	irs_data = list_first_entry_or_null(&irs_nodes, struct gicv5_irs_chip_data, entry);
+	irs_data = irs_nodes[0];
 	if (WARN_ON_ONCE(!irs_data))
 		return;
 
@@ -673,7 +676,7 @@ static void irs_setup_pri_bits(u32 idr1)
 	}
 }
 
-static int __init gicv5_irs_init(struct device_node *node)
+static int __init gicv5_irs_init(struct device_node *node, unsigned int *num)
 {
 	struct gicv5_irs_chip_data *irs_data;
 	void __iomem *irs_base;
@@ -725,11 +728,11 @@ static int __init gicv5_irs_init(struct device_node *node)
 	irs_data->spi_range = FIELD_GET(GICV5_IRS_IDR6_SPI_IRS_RANGE, idr);
 
 	if (irs_data->spi_range) {
+		irs_data->spi_max = irs_data->spi_min + irs_data->spi_range - 1;
 		pr_info("%s detected SPI range [%u-%u]\n",
 						of_node_full_name(node),
 						irs_data->spi_min,
-						irs_data->spi_min +
-						irs_data->spi_range - 1);
+						irs_data->spi_max);
 	}
 
 	/*
@@ -737,8 +740,7 @@ static int __init gicv5_irs_init(struct device_node *node)
 	 * Global properties (iaffid_bits, global spi count) are guaranteed to
 	 * be consistent across IRSes by the architecture.
 	 */
-	if (list_empty(&irs_nodes)) {
-
+	if (*num == 0) {
 		idr = irs_readl_relaxed(irs_data, GICV5_IRS_IDR1);
 		irs_setup_pri_bits(idr);
 
@@ -752,7 +754,7 @@ static int __init gicv5_irs_init(struct device_node *node)
 		pr_debug("Detected %u SPIs globally\n", spi_count);
 	}
 
-	list_add_tail(&irs_data->entry, &irs_nodes);
+	irs_nodes[*num] = irs_data;
 
 	return 0;
 
@@ -765,12 +767,14 @@ static int __init gicv5_irs_init(struct device_node *node)
 
 void __init gicv5_irs_remove(void)
 {
-	struct gicv5_irs_chip_data *irs_data, *tmp_data;
+	struct gicv5_irs_chip_data *irs_data;
+	int i;
 
 	gicv5_free_lpi_domain();
 	gicv5_deinit_lpis();
 
-	list_for_each_entry_safe(irs_data, tmp_data, &irs_nodes, entry) {
+	for (i = 0; i < gicv5_global_data.irs_count; i++) {
+		irs_data = irs_nodes[i];
 		iounmap(irs_data->irs_base);
 		list_del(&irs_data->entry);
 		kfree(irs_data);
@@ -782,8 +786,7 @@ int __init gicv5_irs_enable(void)
 	struct gicv5_irs_chip_data *irs_data;
 	int ret;
 
-	irs_data = list_first_entry_or_null(&irs_nodes,
-					    struct gicv5_irs_chip_data, entry);
+	irs_data = irs_nodes[0];
 	if (!irs_data)
 		return -ENODEV;
 
@@ -799,24 +802,54 @@ int __init gicv5_irs_enable(void)
 void __init gicv5_irs_its_probe(void)
 {
 	struct gicv5_irs_chip_data *irs_data;
+	int i;
 
-	list_for_each_entry(irs_data, &irs_nodes, entry)
+	for (i = 0; i < gicv5_global_data.irs_count; i++) {
+		irs_data = irs_nodes[i];
 		gicv5_its_of_probe(to_of_node(irs_data->fwnode));
+	}
+}
+
+static int spi_min_cmp(const void *a, const void *b)
+{
+	const struct gicv5_irs_chip_data *irs_data1 = a;
+	const struct gicv5_irs_chip_data *irs_data2 = b;
+
+	return irs_data1->spi_min - irs_data2->spi_min;
 }
 
 int __init gicv5_irs_of_probe(struct device_node *parent)
 {
+	unsigned int irs_count = 0, num = 0;
 	struct device_node *np;
 	int ret;
 
+	for_each_available_child_of_node(parent, np) {
+		if (of_device_is_compatible(np, "arm,gic-v5-irs"))
+			irs_count++;
+	}
+
+	if (irs_count == 0)
+		return -ENODEV;
+
+	irs_nodes = kzalloc(irs_count * sizeof(struct gicv5_irs_chip_data *),
+			    __GFP_ZERO);
+	if (!irs_nodes)
+		return -ENOMEM;
+
 	for_each_available_child_of_node(parent, np) {
 		if (!of_device_is_compatible(np, "arm,gic-v5-irs"))
 			continue;
 
-		ret = gicv5_irs_init(np);
+		ret = gicv5_irs_init(np, &num);
 		if (ret)
 			pr_err("Failed to init IRS %s\n", np->full_name);
+		else
+			num++;
 	}
 
-	return list_empty(&irs_nodes) ? -ENODEV : 0;
+	sort(irs_nodes, num, sizeof(struct gicv5_irs_chip_data *), spi_min_cmp, NULL);
+	gicv5_global_data.irs_count = num;
+
+	return num > 0 ? 0 : -ENODEV;
 }
diff --git a/include/linux/irqchip/arm-gic-v5.h b/include/linux/irqchip/arm-gic-v5.h
index 68ddcdb1cec5..6661b583b8d8 100644
--- a/include/linux/irqchip/arm-gic-v5.h
+++ b/include/linux/irqchip/arm-gic-v5.h
@@ -278,6 +278,7 @@ struct gicv5_chip_data {
 	u8			cpuif_pri_bits;
 	u8			cpuif_id_bits;
 	u8			irs_pri_bits;
+	unsigned int		irs_count;
 	struct {
 		__le64 *l1ist_addr;
 		u32 l2_size;
@@ -294,6 +295,7 @@ struct gicv5_irs_chip_data {
 	void __iomem		*irs_base;
 	u32			flags;
 	u32			spi_min;
+	u32			spi_max;
 	u32			spi_range;
 	raw_spinlock_t		spi_config_lock;
 };
-- 
2.34.1
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        From: Yu Kuai <yukuai3(a)huawei.com>
hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/ICN84T
--------------------------------
The demo no-weight version.
Signed-off-by: Yu Kuai <yukuai3(a)huawei.com>
Signed-off-by: Baokun Li <libaokun1(a)huawei.com>
---
 block/Kconfig          |   7 +
 block/Makefile         |   1 +
 block/blk-ioinf.c      | 964 +++++++++++++++++++++++++++++++++++++++++
 block/blk-mq-debugfs.c |   2 +
 block/blk-rq-qos.h     |   1 +
 include/linux/blk-mq.h |   3 +
 6 files changed, 978 insertions(+)
 create mode 100644 block/blk-ioinf.c
diff --git a/block/Kconfig b/block/Kconfig
index 7018fdcaa459..0990ff8b94f3 100644
--- a/block/Kconfig
+++ b/block/Kconfig
@@ -204,6 +204,13 @@ config BLK_CGROUP_LEGACY_IOCOST
 
 	If unsure, say N.
 
+config BLK_CGROUP_IOINFLIGHT
+	bool "Enable support for inflight based cgroup IO controller"
+	depends on BLK_CGROUP
+	select BLK_RQ_ALLOC_TIME
+	help
+	xxxx
+
 config BLK_CGROUP_IOPRIO
 	bool "Cgroup I/O controller for assigning an I/O priority class"
 	depends on BLK_CGROUP
diff --git a/block/Makefile b/block/Makefile
index bfba1d2afc0e..eeea4092a5c0 100644
--- a/block/Makefile
+++ b/block/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_BLK_DEV_THROTTLING)	+= blk-throttle.o
 obj-$(CONFIG_BLK_CGROUP_IOPRIO)	+= blk-ioprio.o
 obj-$(CONFIG_BLK_CGROUP_IOLATENCY)	+= blk-iolatency.o
 obj-$(CONFIG_BLK_CGROUP_IOCOST)	+= blk-iocost.o
+obj-$(CONFIG_BLK_CGROUP_IOINFLIGHT)	+= blk-ioinf.o
 obj-$(CONFIG_MQ_IOSCHED_DEADLINE)	+= mq-deadline.o
 obj-$(CONFIG_MQ_IOSCHED_KYBER)	+= kyber-iosched.o
 bfq-y				:= bfq-iosched.o bfq-wf2q.o bfq-cgroup.o
diff --git a/block/blk-ioinf.c b/block/blk-ioinf.c
new file mode 100644
index 000000000000..eec85b753886
--- /dev/null
+++ b/block/blk-ioinf.c
@@ -0,0 +1,964 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * IO inflight relative controller
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/timer.h>
+#include <linux/time64.h>
+#include <linux/parser.h>
+#include <linux/blk-cgroup.h>
+
+#include "blk-cgroup.h"
+#include "blk-rq-qos.h"
+#include "blk-mq.h"
+
+/* default weight for each cgroup */
+#define IOINF_DFL_WEIGHT	10
+/* default wake-up time in jiffies for backgroup job, see ioinf_timer_fn() */
+#define IOINF_TIMER_PERID	500
+/* default time in jiffies that cgroup will idle without any IO */
+#define MIN_SAMPLES		100
+#define MAX_BUSY_LEVEL		90
+#define MIN_BUSY_LEVEL		-90
+
+/* io.inf.qos controls */
+enum {
+	INF_ENABLE,
+	INF_INFLIGHT,
+
+	QOS_ENABLE,
+	QOS_RLAT,
+	QOS_WLAT,
+	QOS_RPCT,
+	QOS_WPCT,
+
+	NR_QOS_CTRL_PARAMS,
+};
+
+/* qos control params */
+struct ioinf_params {
+	bool enabled;
+	bool qos_enabled;
+	u32 inflight;
+	u64 rlat;
+	u64 wlat;
+	u32 rpct;
+	u32 wpct;
+};
+
+struct ioinf_lat_stat {
+	u64 rmet;
+	u64 wmet;
+	u64 rmissed;
+	u64 wmissed;
+	u64 rlatency;
+	u64 wlatency;
+};
+
+struct ioinf_rq_wait {
+	struct rq_wait rqw;
+	u32 hinflight;
+};
+
+/* the global conrtol structure */
+struct ioinf {
+	struct rq_qos		rqos;
+
+	struct ioinf_params	params;
+	/* real inflight with consideration of busy_level */
+	u32			inflight;
+
+	/* default time for ioinf_timer_fn */
+	unsigned long		inf_timer_perid;
+	struct timer_list	inf_timer;
+
+	/* global lock */
+	spinlock_t		lock;
+
+	/* for offline cgroups */
+	struct ioinf_rq_wait	offline;
+	/* for online cgroups */
+	struct ioinf_rq_wait	online;
+	u32 			max_inflight;
+	u32 			last_max_inflight;
+
+	struct ioinf_lat_stat	last_stat;
+	struct ioinf_lat_stat __percpu *stat;
+
+	int			busy_level;
+	int			last_busy_level;
+	int			old_scale;
+};
+
+/* per disk-cgroup pair structure */
+struct ioinf_gq {
+	struct blkg_policy_data	pd;
+	struct ioinf		*inf;
+
+	/* configured by user */
+	u32			weight;
+};
+
+/* per cgroup structure, used to record default weight for all disks */
+struct ioinf_cgrp {
+	struct blkcg_policy_data	cpd;
+
+	/* if def_weight is 0, means it's offline */
+	u32				dfl_weight;
+};
+
+/* scale inflight according to busy_level, from 1/10 to 10 */
+static const u8 scale_table[20] = {
+	[0] = 100,	/* -90 */
+	[1] = 90,	/* -80 */
+	[2] = 80,	/* -70 */
+	[3] = 70,	/* -60 */
+	[4] = 60,	/* -50 */
+	[5] = 50,	/* -40 */
+	[6] = 40,	/* -30 */
+	[7] = 30,	/* -20 */
+	[8] = 20,	/* -10 */
+	[9] = 10,	/*   0  */
+	[10] = 9,	/*  10 */
+	[11] = 8,	/*  20 */
+	[12] = 7,	/*  30 */
+	[13] = 6,	/*  40 */
+	[14] = 5,	/*  50 */
+	[15] = 4,	/*  60 */
+	[16] = 3,	/*  70 */
+	[17] = 2,	/*  80 */
+	[18] = 1,	/*  90 */
+};
+
+static struct blkcg_policy blkcg_policy_ioinf;
+
+static struct ioinf *rqos_to_inf(struct rq_qos *rqos)
+{
+	return container_of(rqos, struct ioinf, rqos);
+}
+
+static struct ioinf *q_to_inf(struct request_queue *q)
+{
+	return rqos_to_inf(rq_qos_id(q, RQ_QOS_INFLIGHT));
+}
+
+static struct ioinf_gq *pd_to_infg(struct blkg_policy_data *pd)
+{
+	if (!pd)
+		return NULL;
+
+	return container_of(pd, struct ioinf_gq, pd);
+}
+
+static struct ioinf_gq *blkg_to_infg(struct blkcg_gq *blkg)
+{
+	return pd_to_infg(blkg_to_pd(blkg, &blkcg_policy_ioinf));
+}
+
+static struct blkcg_gq *infg_to_blkg(struct ioinf_gq *infg)
+{
+	return pd_to_blkg(&infg->pd);
+}
+
+static struct ioinf_cgrp *blkcg_to_infcg(struct blkcg *blkcg)
+{
+	struct blkcg_policy_data *cpd =
+		blkcg_to_cpd(blkcg, &blkcg_policy_ioinf);
+
+	return container_of(cpd, struct ioinf_cgrp, cpd);
+}
+
+static struct blkcg_gq *ioinf_bio_blkg(struct bio *bio)
+{
+	struct blkcg_gq *blkg = bio->bi_blkg;
+
+	if (!blkg || !blkg->online)
+		return NULL;
+
+	if (blkg->blkcg->css.cgroup->level == 0)
+		return NULL;
+
+	return blkg;
+}
+
+static struct ioinf_gq *ioinf_bio_infg(struct bio *bio)
+{
+	struct ioinf_gq *infg;
+	struct blkcg_gq *blkg = ioinf_bio_blkg(bio);
+
+	if (!blkg)
+		return NULL;
+
+	infg = blkg_to_infg(blkg);
+	if (!infg)
+		return NULL;
+
+	return infg;
+}
+
+static unsigned int atomic_inc_below_return(atomic_t *v, unsigned int below)
+{
+	unsigned int cur = atomic_read(v);
+
+	for (;;) {
+		unsigned int old;
+
+		if (cur >= below)
+			return below + 1;
+
+		old = atomic_cmpxchg(v, cur, cur + 1);
+		if (old == cur)
+			break;
+		cur = old;
+	}
+
+	return cur + 1;
+}
+
+void ioinf_global_done(struct ioinf_rq_wait *ioinf_rqw)
+{
+	int inflight = atomic_dec_return(&ioinf_rqw->rqw.inflight);
+
+	if (inflight < ioinf_rqw->hinflight &&
+	    wq_has_sleeper(&ioinf_rqw->rqw.wait))
+		wake_up_all(&ioinf_rqw->rqw.wait);
+}
+
+static bool infg_offline(struct ioinf_gq *infg)
+{
+	struct ioinf_cgrp *infcg;
+	struct blkcg_gq *blkg;
+
+	if (infg->weight != 0)
+		return false;
+
+	/* if user doesn't set per disk weight, use the cgroup default weight */
+	blkg = infg_to_blkg(infg);
+	infcg = blkcg_to_infcg(blkg->blkcg);
+
+	return infcg->dfl_weight == 0;
+}
+
+static struct ioinf_rq_wait *rqw_to_ioinf_rqw(struct rq_wait *rqw)
+{
+	return container_of(rqw, struct ioinf_rq_wait, rqw);
+}
+
+static bool ioinf_global_inflight_cb(struct rq_wait *rqw, void *private_data)
+{
+	struct ioinf_rq_wait *ioinf_rqw = rqw_to_ioinf_rqw(rqw);
+	struct ioinf *inf = private_data;
+	u32 inflight;
+	u32 limit;
+
+	if (ioinf_rqw == &inf->offline)
+		return rq_wait_inc_below(rqw, ioinf_rqw->hinflight);
+retry:
+	limit = ioinf_rqw->hinflight;
+	inflight = atomic_inc_below_return(&rqw->inflight, limit);
+	if (inflight > inf->max_inflight)
+		inf->max_inflight = inflight;
+	if (inflight <= limit)
+		return true;
+
+	if (ioinf_rqw->hinflight < inf->inflight - 1) {
+		/* Stop lend inflight budget to offline groups */
+		inf->offline.hinflight = 1;
+		ioinf_rqw->hinflight = inf->inflight - 1;
+		goto retry;
+	}
+
+	return false;
+}
+
+static void ioinf_global_cleanup_cb(struct rq_wait *rqw, void *private_data)
+{
+	struct ioinf_rq_wait *ioinf_rqw = rqw_to_ioinf_rqw(rqw);
+
+	ioinf_global_done(ioinf_rqw);
+}
+
+static void
+ioinf_throttle_global(struct ioinf *inf, struct ioinf_rq_wait *ioinf_rqw)
+{
+	rq_qos_wait(&ioinf_rqw->rqw, inf, ioinf_global_inflight_cb,
+		    ioinf_global_cleanup_cb, NULL);
+
+	/*
+	 * In case no online cgroup is active, daemon will adjust all the
+	 * budget to offline cgroup.
+	 */
+	timer_reduce(&inf->inf_timer, jiffies + inf->inf_timer_perid);
+}
+
+static void ioinf_rqos_throttle(struct rq_qos *rqos, struct bio *bio)
+{
+	struct ioinf *inf = rqos_to_inf(rqos);
+	struct ioinf_gq *infg = ioinf_bio_infg(bio);
+
+	if (!inf->params.enabled || !infg)
+		return;
+
+	if (infg_offline(infg))
+		ioinf_throttle_global(inf, &inf->offline);
+	else
+		ioinf_throttle_global(inf, &inf->online);
+}
+
+static void ioinf_rqos_track(struct rq_qos *rqos, struct request *rq,
+			     struct bio *bio)
+{
+	struct blkcg_gq *blkg = ioinf_bio_blkg(bio);
+
+	if (!blkg)
+		return;
+
+	rq->blkg = blkg;
+}
+
+static void ioinf_record_lat(struct ioinf *inf, struct request *rq)
+{
+	u64 lat;
+
+	lat = rq->io_end_time_ns ? rq->io_end_time_ns : blk_time_get_ns();
+	lat -= rq->alloc_time_ns;
+
+	if (!inf->params.qos_enabled)
+		return;
+
+	switch(req_op(rq)) {
+	case REQ_OP_READ:
+		if (lat > inf->params.rlat)
+			this_cpu_inc(inf->stat->rmissed);
+		else
+			this_cpu_inc(inf->stat->rmet);
+		this_cpu_add(inf->stat->rlatency, lat);
+		break;
+	case REQ_OP_WRITE:
+		if (lat > inf->params.wlat)
+			this_cpu_inc(inf->stat->wmissed);
+		else
+			this_cpu_inc(inf->stat->wmet);
+		this_cpu_add(inf->stat->wlatency, lat);
+		break;
+	default:
+		break;
+	}
+}
+
+static struct ioinf_lat_stat ioinf_get_lat(struct ioinf *inf)
+{
+	struct ioinf_lat_stat stat = {0};
+	int cpu;
+
+	for_each_possible_cpu(cpu) {
+		struct ioinf_lat_stat *pstat = per_cpu_ptr(inf->stat, cpu);
+
+		stat.rmet += pstat->rmet;
+		stat.rmissed += pstat->rmissed;
+		stat.wmet += pstat->wmet;
+		stat.wmissed += pstat->wmissed;
+		stat.rlatency += pstat->rlatency;
+		stat.wlatency += pstat->wlatency;
+	}
+
+	return stat;
+}
+
+static void ioinf_rqos_done(struct rq_qos *rqos, struct request *rq)
+{
+	struct blkcg_gq *blkg = rq->blkg;
+	struct ioinf_gq *infg;
+	struct ioinf *inf;
+
+	if (!blkg)
+		return;
+
+	infg = blkg_to_infg(blkg);
+	inf = infg->inf;
+	if (infg_offline(infg)) {
+		ioinf_global_done(&inf->offline);
+	} else {
+		ioinf_global_done(&inf->online);
+		ioinf_record_lat(inf, rq);
+	}
+
+	rq->blkg = NULL;
+}
+
+static void ioinf_rqos_exit(struct rq_qos *rqos)
+{
+	struct ioinf *inf = rqos_to_inf(rqos);
+
+	blkcg_deactivate_policy(rqos->disk, &blkcg_policy_ioinf);
+
+	del_timer_sync(&inf->inf_timer);
+	free_percpu(inf->stat);
+	kfree(inf);
+}
+
+static int ioinf_stat_show(void *data, struct seq_file *m)
+{
+	struct rq_qos *rqos = data;
+	struct ioinf *inf = rqos_to_inf(rqos);
+
+	spin_lock_irq(&inf->lock);
+
+	seq_printf(m, "busy_level %d inflight %u->%u\n", inf->busy_level,
+		   inf->params.inflight, inf->inflight);
+	seq_printf(m, "online inflight %u/%d\n",
+		   atomic_read(&inf->online.rqw.inflight),
+		   inf->online.hinflight);
+	seq_printf(m, "offline inflight %u/%d\n",
+		   atomic_read(&inf->offline.rqw.inflight),
+		   inf->offline.hinflight);
+
+	spin_unlock_irq(&inf->lock);
+
+	return 0;
+}
+
+static int ioinf_lat_show(void *data, struct seq_file *m)
+{
+	struct rq_qos *rqos = data;
+	struct ioinf *inf = rqos_to_inf(rqos);
+	struct ioinf_lat_stat stat;
+	struct ioinf_lat_stat *last;
+	u64 nr_read_io, nr_write_io;
+	u64 rlatency = 0, wlatency = 0;
+
+	if (!inf->params.qos_enabled)
+		return 0;
+
+	stat = ioinf_get_lat(inf);
+	last = &inf->last_stat;
+	seq_printf(m, "qos lat: %llu %llu %llu %llu\n",
+		   stat.rmet, stat.rmissed, stat.wmet, stat.wmissed);
+
+	nr_read_io = stat.rmet - last->rmet;
+	nr_read_io += stat.rmissed - last->rmissed;
+	if (nr_read_io > 0)
+		rlatency = (stat.rlatency - last->rlatency) / nr_read_io;
+
+	nr_write_io = stat.wmet - last->wmet;
+	nr_write_io += stat.wmissed - last->wmissed;
+	if (nr_write_io > 0)
+		wlatency = (stat.wlatency - last->wlatency) / nr_write_io;
+
+	seq_printf(m, "online average latency: (%llu-%llu) (%llu-%llu)\n",
+		   nr_read_io, rlatency, nr_write_io, wlatency);
+
+	return 0;
+}
+
+static const struct blk_mq_debugfs_attr ioinf_debugfs_attrs[] = {
+	{"stat", 0400, ioinf_stat_show},
+	{"lat", 0400, ioinf_lat_show},
+	{},
+};
+
+static struct rq_qos_ops ioinf_rqos_ops = {
+	.throttle	= ioinf_rqos_throttle,
+	.done		= ioinf_rqos_done,
+	.track		= ioinf_rqos_track,
+	.exit		= ioinf_rqos_exit,
+
+#ifdef CONFIG_BLK_DEBUG_FS
+	.debugfs_attrs = ioinf_debugfs_attrs,
+#endif
+};
+
+static void
+ioinf_set_global_inflight(struct ioinf_rq_wait *ioinf_rqw, u32 inflight)
+{
+	bool budget_increased = false;
+
+	if (inflight > ioinf_rqw->hinflight)
+		budget_increased = true;
+
+	ioinf_rqw->hinflight = inflight;
+
+	if (budget_increased && wq_has_sleeper(&ioinf_rqw->rqw.wait))
+		wake_up_all(&ioinf_rqw->rqw.wait);
+}
+
+static bool ioinf_online_busy(struct ioinf *inf)
+{
+	struct ioinf_lat_stat stat;
+	u32 met, missed;
+	bool ret = false;
+
+	if (!inf->params.qos_enabled)
+		return false;
+
+	stat = ioinf_get_lat(inf);
+	met = stat.rmet - inf->last_stat.rmet;
+	missed = stat.rmissed - inf->last_stat.rmissed;
+
+	if (met + missed >= MIN_SAMPLES &&
+	    met * 100 < (met + missed) * inf->params.rpct) {
+		ret = true;
+		goto out;
+	}
+
+	met = stat.wmet - inf->last_stat.wmet;
+	missed = stat.wmissed - inf->last_stat.wmissed;
+
+	if (met + missed >= MIN_SAMPLES &&
+	    met * 100 < (met + missed) * inf->params.wpct)
+		ret = true;
+
+out:
+	inf->last_stat = stat;
+	return ret;
+}
+
+static void ioinf_adjust_busy_level(struct ioinf *inf, int old_busy_level)
+{
+	int scale;
+
+	inf->busy_level = clamp(inf->busy_level, -90, 90);
+
+	if (inf->busy_level == old_busy_level)
+		return;
+
+	scale = (inf->busy_level + 90) / 10;
+	if (scale == inf->old_scale)
+		return;
+
+	scale = scale_table[scale];
+	inf->old_scale = scale;
+
+	inf->inflight = inf->params.inflight * scale / 10;
+}
+
+static void ioinf_timer_global_fn(struct timer_list *timer)
+{
+	struct ioinf *inf = container_of(timer, struct ioinf, inf_timer);
+	bool busy = ioinf_online_busy(inf);
+	struct ioinf_rq_wait *online = &inf->online;
+	struct ioinf_rq_wait *offline = &inf->offline;
+	int old_busy_level = inf->busy_level;
+	unsigned long flags;
+	u32 last_max_inflight;
+	u32 new_budget;
+
+	spin_lock_irqsave(&inf->lock, flags);
+
+	/* First take back the offline budget. */
+	if (busy && offline->hinflight > 1) {
+		offline->hinflight = 1;
+		ioinf_set_global_inflight(online, inf->inflight - 1);
+		goto unlock;
+	}
+
+	if (busy) { /* slow down */
+		int min_level = inf->busy_level + 1;
+		int max_level = MAX_BUSY_LEVEL;
+
+		if (inf->last_busy_level > min_level)
+			max_level = inf->last_busy_level;
+		inf->last_busy_level = inf->busy_level;
+		inf->busy_level = (min_level + max_level) / 2;
+	} else if (inf->params.qos_enabled) {
+		int min_level = MIN_BUSY_LEVEL;
+		int max_level = inf->busy_level - 1;
+
+		if (inf->last_busy_level < max_level)
+			min_level = inf->last_busy_level;
+		inf->last_busy_level = inf->busy_level;
+		inf->busy_level = (min_level + max_level) / 2;
+	}
+	ioinf_adjust_busy_level(inf, old_busy_level);
+
+	last_max_inflight = inf->last_max_inflight;
+	new_budget = max(last_max_inflight, inf->max_inflight);
+	inf->last_max_inflight = max(last_max_inflight >> 1, inf->max_inflight);
+	inf->max_inflight = inf->max_inflight >> 1;
+
+	if (busy || inf->inflight <= new_budget) {
+		offline->hinflight = 1;
+		ioinf_set_global_inflight(online, inf->inflight - 1);
+	} else {
+		ioinf_set_global_inflight(online, new_budget);
+		ioinf_set_global_inflight(offline,
+					  inf->inflight - new_budget);
+	}
+unlock:
+	spin_unlock_irqrestore(&inf->lock, flags);
+	mod_timer(&inf->inf_timer, jiffies + inf->inf_timer_perid);
+}
+
+static void ioinf_timer_fn(struct timer_list *timer)
+{
+	ioinf_timer_global_fn(timer);
+}
+
+static u32 ioinf_default_inflight(struct gendisk *disk)
+{
+	return max(disk->queue->nr_requests / 10, 30);
+}
+
+static int blk_ioinf_init(struct gendisk *disk)
+{
+	struct ioinf *inf;
+	int ret;
+
+	inf = kzalloc(sizeof(*inf), GFP_KERNEL);
+	if (!inf)
+		return -ENOMEM;
+
+	inf->stat = alloc_percpu(struct ioinf_lat_stat);
+	if (!inf->stat) {
+		kfree(inf);
+		return -ENOMEM;
+	}
+
+	spin_lock_init(&inf->lock);
+	inf->params.inflight = ioinf_default_inflight(disk);
+	inf->inflight = inf->params.inflight;
+	inf->inf_timer_perid = IOINF_TIMER_PERID;
+	inf->offline.hinflight = 1;
+	inf->old_scale = 9;
+	rq_wait_init(&inf->offline.rqw);
+	inf->online.hinflight = IOINF_DFL_WEIGHT;
+	rq_wait_init(&inf->online.rqw);
+	timer_setup(&inf->inf_timer, ioinf_timer_fn, 0);
+
+	ret = rq_qos_add(&inf->rqos, disk, RQ_QOS_INFLIGHT, &ioinf_rqos_ops);
+	if (ret)
+		goto err_free_inf;
+
+	ret = blkcg_activate_policy(disk, &blkcg_policy_ioinf);
+	if (ret)
+		goto err_del_qos;
+	return 0;
+
+err_del_qos:
+	rq_qos_del(&inf->rqos);
+err_free_inf:
+	free_percpu(inf->stat);
+	kfree(inf);
+	return ret;
+}
+
+static struct blkcg_policy_data *ioinf_cpd_alloc(gfp_t gfp)
+{
+	struct ioinf_cgrp *infcg = kzalloc(sizeof(*infcg), gfp);
+
+	if (!infcg)
+		return NULL;
+
+	infcg->dfl_weight = IOINF_DFL_WEIGHT;
+	return &infcg->cpd;
+}
+
+static void ioinf_cpd_free(struct blkcg_policy_data *cpd)
+{
+	kfree(container_of(cpd, struct ioinf_cgrp, cpd));
+}
+
+static struct blkg_policy_data *ioinf_pd_alloc(struct gendisk *disk,
+					       struct blkcg *blkcg, gfp_t gfp)
+{
+	struct ioinf_gq *infg = kzalloc_node(sizeof(*infg), gfp, disk->node_id);
+
+	if (!infg)
+		return NULL;
+
+	return &infg->pd;
+}
+
+static void ioinf_pd_init(struct blkg_policy_data *pd)
+{
+	struct ioinf_gq *infg = pd_to_infg(pd);
+	struct blkcg_gq *blkg = pd_to_blkg(pd);
+
+	infg->inf = q_to_inf(blkg->q);
+}
+
+static void ioinf_pd_free(struct blkg_policy_data *pd)
+{
+	struct ioinf_gq *infg = pd_to_infg(pd);
+
+	kfree(infg);
+}
+
+static u64 ioinf_weight_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
+			       int off)
+{
+	const char *dname = blkg_dev_name(pd->blkg);
+	struct ioinf_gq *infg = pd_to_infg(pd);
+
+	if (dname && infg->weight)
+		seq_printf(sf, "%s %u\n", dname, infg->weight);
+
+	return 0;
+}
+
+static int ioinf_weight_show(struct seq_file *sf, void *v)
+{
+	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
+	struct ioinf_cgrp *infcg = blkcg_to_infcg(blkcg);
+
+	seq_printf(sf, "default %u\n", infcg->dfl_weight);
+	blkcg_print_blkgs(sf, blkcg, ioinf_weight_prfill, &blkcg_policy_ioinf,
+			  seq_cft(sf)->private, false);
+
+	return 0;
+}
+
+static ssize_t ioinf_weight_write(struct kernfs_open_file *of, char *buf,
+				  size_t nbytes, loff_t off)
+{
+	struct blkcg *blkcg = css_to_blkcg(of_css(of));
+	struct ioinf_cgrp *infcg = blkcg_to_infcg(blkcg);
+	struct blkg_conf_ctx ctx;
+	struct ioinf_gq *infg;
+	int ret;
+	u32 v;
+
+	if (!strchr(buf, ':')) {
+		if (!sscanf(buf, "default %u", &v) && !sscanf(buf, "%u", &v))
+			return -EINVAL;
+		if (v < 0)
+			return -EINVAL;
+
+		infcg->dfl_weight = v;
+
+		return nbytes;
+	}
+
+	blkg_conf_init(&ctx, buf);
+	ret = blkg_conf_prep(blkcg, &blkcg_policy_ioinf, &ctx);
+	if (ret)
+		return ret;
+
+	infg = blkg_to_infg(ctx.blkg);
+	if (!strncmp(ctx.body, "default", 7)) {
+		v = IOINF_DFL_WEIGHT;
+	} else if (!sscanf(ctx.body, "%u", &v) ||
+		 v < 0 || v > CGROUP_WEIGHT_MAX) {
+		blkg_conf_exit(&ctx);
+		return -EINVAL;
+	}
+
+	infg->weight = v;
+	blkg_conf_exit(&ctx);
+	return nbytes;
+}
+
+static u64 ioinf_qos_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
+			    int off)
+{
+	const char *dname = blkg_dev_name(pd->blkg);
+	struct ioinf *inf = q_to_inf(pd->blkg->q);
+	struct ioinf_params params;
+
+	if (!dname)
+		return 0;
+
+	params = inf->params;
+	seq_printf(sf, "%s enable=%d inflight=%u qos_enable=%d", dname,
+		   params.enabled, params.inflight, params.qos_enabled);
+
+	if (inf->params.qos_enabled)
+		seq_printf(sf, " rlat=%llu rpct=%u wlat=%llu wpct=%u",
+			   params.rlat, params.rpct, params.wlat, params.wpct);
+
+	seq_putc(sf, '\n');
+	return 0;
+}
+
+static int ioinf_qos_show(struct seq_file *sf, void *v)
+{
+	struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
+
+	blkcg_print_blkgs(sf, blkcg, ioinf_qos_prfill,
+			  &blkcg_policy_ioinf, seq_cft(sf)->private, false);
+	return 0;
+}
+
+static const match_table_t qos_ctrl_tokens = {
+	{ INF_ENABLE,		"enable=%u"	},
+	{ INF_INFLIGHT,		"inflight=%u"	},
+	{ QOS_ENABLE,		"qos_enable=%u"	},
+	{ QOS_RLAT,		"rlat=%u"	},
+	{ QOS_WLAT,		"wlat=%u"	},
+	{ QOS_RPCT,		"rpct=%u"	},
+	{ QOS_WPCT,		"wpct=%u"	},
+	{ NR_QOS_CTRL_PARAMS,	NULL		},
+};
+
+static ssize_t ioinf_qos_write(struct kernfs_open_file *of, char *input,
+			       size_t nbytes, loff_t off)
+{
+	struct blkg_conf_ctx ctx;
+	struct gendisk *disk;
+	struct ioinf *inf;
+	struct ioinf_params params;
+	char *body, *p;
+	int ret;
+
+	blkg_conf_init(&ctx, input);
+
+	ret = blkg_conf_open_bdev(&ctx);
+	if (ret)
+		goto err;
+
+	body = ctx.body;
+	disk = ctx.bdev->bd_disk;
+	if (!queue_is_mq(disk->queue)) {
+		ret = -EOPNOTSUPP;
+		goto err;
+	}
+
+	inf = q_to_inf(disk->queue);
+	if (!inf) {
+		ret = blk_ioinf_init(disk);
+		if (ret)
+			goto err;
+
+		inf = q_to_inf(disk->queue);
+	}
+
+	params = inf->params;
+
+	while ((p = strsep(&body, " \t\n"))) {
+		substring_t args[MAX_OPT_ARGS];
+		s64 v;
+
+		if (!*p)
+			continue;
+
+		switch (match_token(p, qos_ctrl_tokens, args)) {
+		case INF_ENABLE:
+			if (match_u64(&args[0], &v))
+				goto einval;
+			params.enabled = !!v;
+			continue;
+		case QOS_ENABLE:
+			if (match_u64(&args[0], &v))
+				goto einval;
+			params.qos_enabled = !!v;
+			continue;
+		case INF_INFLIGHT:
+			if (match_u64(&args[0], &v))
+				goto einval;
+			params.inflight = v;
+			continue;
+		case QOS_RLAT:
+			if (match_u64(&args[0], &v) || v == 0)
+				goto einval;
+			params.rlat = v;
+			continue;
+		case QOS_WLAT:
+			if (match_u64(&args[0], &v) || v == 0)
+				goto einval;
+			params.wlat = v;
+			continue;
+		case QOS_RPCT:
+			if (match_u64(&args[0], &v) || v == 0 || v >= 100)
+				goto einval;
+			params.rpct = v;
+			continue;
+		case QOS_WPCT:
+			if (match_u64(&args[0], &v) || v == 0 || v >= 100)
+				goto einval;
+			params.wpct = v;
+			continue;
+		default:
+			goto einval;
+		}
+	}
+
+	if (params.qos_enabled &&
+	    (params.rlat == 0 || params.wlat == 0 ||
+	     params.rpct == 0 || params.rpct >= 100 ||
+	     params.wpct == 0 || params.wpct >= 100))
+		goto einval;
+
+	if (params.inflight == 0)
+		params.inflight = ioinf_default_inflight(disk);
+
+	if (params.qos_enabled && !inf->params.qos_enabled) {
+		blk_stat_enable_accounting(disk->queue);
+		blk_queue_flag_set(QUEUE_FLAG_RQ_ALLOC_TIME, disk->queue);
+	} else if (!params.qos_enabled && inf->params.qos_enabled) {
+		blk_stat_disable_accounting(disk->queue);
+		blk_queue_flag_clear(QUEUE_FLAG_RQ_ALLOC_TIME, disk->queue);
+	}
+
+	inf->params = params;
+	inf->busy_level = 0;
+	inf->old_scale = 9;
+	inf->inflight = params.inflight;
+
+	blkg_conf_exit(&ctx);
+	return nbytes;
+
+einval:
+	ret = -EINVAL;
+err:
+	blkg_conf_exit(&ctx);
+	return ret;
+}
+
+static struct cftype ioinf_files[] = {
+	{
+		.name = "inf.weight",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.seq_show = ioinf_weight_show,
+		.write = ioinf_weight_write,
+	},
+	{
+		.name = "inf.qos",
+		.flags = CFTYPE_ONLY_ON_ROOT,
+		.seq_show = ioinf_qos_show,
+		.write = ioinf_qos_write,
+	},
+	{}
+};
+
+static struct cftype ioinf_legacy_files[] = {
+	{
+		.name = "inf.weight",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.seq_show = ioinf_weight_show,
+		.write = ioinf_weight_write,
+	},
+	{
+		.name = "inf.qos",
+		.flags = CFTYPE_ONLY_ON_ROOT,
+		.seq_show = ioinf_qos_show,
+		.write = ioinf_qos_write,
+	},
+	{}
+};
+
+static struct blkcg_policy blkcg_policy_ioinf = {
+	.dfl_cftypes	= ioinf_files,
+	.legacy_cftypes = ioinf_legacy_files,
+
+	.cpd_alloc_fn	= ioinf_cpd_alloc,
+	.cpd_free_fn	= ioinf_cpd_free,
+
+	.pd_alloc_fn	= ioinf_pd_alloc,
+	.pd_init_fn	= ioinf_pd_init,
+	.pd_free_fn	= ioinf_pd_free,
+};
+
+static int __init ioinf_init(void)
+{
+	return blkcg_policy_register(&blkcg_policy_ioinf);
+}
+
+static void __exit ioinf_exit(void)
+{
+	blkcg_policy_unregister(&blkcg_policy_ioinf);
+}
+
+module_init(ioinf_init);
+module_exit(ioinf_exit);
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index efe99cfae51d..b5af47bf99d4 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -798,6 +798,8 @@ static const char *rq_qos_id_to_name(enum rq_qos_id id)
 		return "latency";
 	case RQ_QOS_COST:
 		return "cost";
+	case RQ_QOS_INFLIGHT:
+		return "inflight";
 	}
 	return "unknown";
 }
diff --git a/block/blk-rq-qos.h b/block/blk-rq-qos.h
index 93d1ba692973..d504a302ca0f 100644
--- a/block/blk-rq-qos.h
+++ b/block/blk-rq-qos.h
@@ -17,6 +17,7 @@ enum rq_qos_id {
 	RQ_QOS_WBT,
 	RQ_QOS_LATENCY,
 	RQ_QOS_COST,
+	RQ_QOS_INFLIGHT,
 };
 
 struct rq_wait {
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 4c4416fd2df7..81a733e1bef9 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -115,6 +115,9 @@ struct request {
 
 #ifdef CONFIG_BLK_WBT
 	unsigned short wbt_flags;
+#endif
+#ifdef CONFIG_BLK_CGROUP_IOINFLIGHT
+	struct blkcg_gq *blkg;
 #endif
 	/*
 	 * rq sectors used for blk stats. It has the same value
-- 
2.46.1
                    
                  
                  
                          
                            
                            2
                            
                          
                          
                            
                            1
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:openEuler-1.0-LTS 1743/1743] block/blk-merge.c:688:16: warning: no previous prototype for 'blk_try_req_merge'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   ba07135cf74b1424e2f7f0c60e59c5b206ab320c
commit: 5f100bc6aabbe30e55cf20af8e163bb6dba3a3aa [1743/1743] block: fix the DISCARD request merge
config: x86_64-buildonly-randconfig-2004-20250802 (https://download.01.org/0day-ci/archive/20250804/202508041253.AJArCfly-lkp@…)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041253.AJArCfly-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041253.AJArCfly-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> block/blk-merge.c:688:16: warning: no previous prototype for 'blk_try_req_merge' [-Wmissing-prototypes]
     688 | enum elv_merge blk_try_req_merge(struct request *req, struct request *next)
         |                ^~~~~~~~~~~~~~~~~
vim +/blk_try_req_merge +688 block/blk-merge.c
   687	
 > 688	enum elv_merge blk_try_req_merge(struct request *req, struct request *next)
   689	{
   690		if (blk_discard_mergable(req))
   691			return ELEVATOR_DISCARD_MERGE;
   692		else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next))
   693			return ELEVATOR_BACK_MERGE;
   694	
   695		return ELEVATOR_NO_MERGE;
   696	}
   697	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2634/2634] drivers/crypto/ccp/hygon/tdm-kernel-guard.c:308:23: error: use of undeclared identifier 'NR_syscalls'
                        
                        
by kernel test robot 04 Aug '25
                    by kernel test robot 04 Aug '25
04 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   e46fbbc0ad301c3517340bf966d39b8493a2ebb0
commit: 3ad98583441f7c8a2553e1e8d6340ed4397033e2 [2634/2634] crypto: tdm: Support dynamic protection for SCT and IDT by HYGON TDM
config: x86_64-buildonly-randconfig-2004-20250804 (https://download.01.org/0day-ci/archive/20250804/202508041257.VLmpFnXZ-lkp@…)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041257.VLmpFnXZ-lkp@…)
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 <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041257.VLmpFnXZ-lkp@intel.com/
All errors (new ones prefixed by >>):
   In file included from drivers/crypto/ccp/hygon/tdm-kernel-guard.c:15:
   In file included from include/linux/kallsyms.h:13:
   In file included from include/linux/mm.h:2242:
   include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   drivers/crypto/ccp/hygon/tdm-kernel-guard.c:151:5: warning: no previous prototype for function 'tdm_service_run' [-Wmissing-prototypes]
     151 | int tdm_service_run(struct tdm_security_enhance *data)
         |     ^
   drivers/crypto/ccp/hygon/tdm-kernel-guard.c:151:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     151 | int tdm_service_run(struct tdm_security_enhance *data)
         | ^
         | static 
   drivers/crypto/ccp/hygon/tdm-kernel-guard.c:212:5: warning: no previous prototype for function 'tdm_service_exit' [-Wmissing-prototypes]
     212 | int tdm_service_exit(struct tdm_security_enhance *data)
         |     ^
   drivers/crypto/ccp/hygon/tdm-kernel-guard.c:212:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     212 | int tdm_service_exit(struct tdm_security_enhance *data)
         | ^
         | static 
>> drivers/crypto/ccp/hygon/tdm-kernel-guard.c:308:23: error: use of undeclared identifier 'NR_syscalls'
     308 |                 eh_objs[SCT].size = NR_syscalls * sizeof(char *);
         |                                     ^
   7 warnings and 1 error generated.
vim +/NR_syscalls +308 drivers/crypto/ccp/hygon/tdm-kernel-guard.c
   286	
   287		sct_addr = (unsigned long *)kallsyms_lookup_name("sys_call_table");
   288	#endif
   289		if (!sct_addr) {
   290			ret = -DYN_ERR_API;
   291			pr_err("kallsyms_lookup_name for sys_call_table failed!");
   292			goto end;
   293		}
   294	
   295		asm("sidt %0":"=m"(idtr));
   296	
   297		if (!psp_check_tdm_support())
   298			return 0;
   299	
   300		for (i = 0; i < MAX_OBJ; i++) {
   301			memset(&eh_objs[i], 0, sizeof(eh_objs[i]));
   302			eh_objs[i].context = CONTEXT_CHECK_MODNAME;
   303			eh_objs[i].obj_name = obj_names[i];
   304		}
   305	
   306		if ((eh_obj == -1) || (eh_obj & (1 << SCT))) {
   307			eh_objs[SCT].vaddr = (uint64_t)sct_addr;
 > 308			eh_objs[SCT].size = NR_syscalls * sizeof(char *);
   309		}
   310		if ((eh_obj == -1) || (eh_obj & (1 << IDT))) {
   311			eh_objs[IDT].vaddr = idtr.address;
   312			eh_objs[IDT].size = idtr.size;
   313		}
   314	
   315		for (i = 0; i < MAX_OBJ; i++) {
   316			if (eh_objs[i].vaddr)
   317				tdm_service_run(&eh_objs[i]);
   318		}
   319	
   320		pr_info("Hygon TDM guard load successfully!\n");
   321	
   322	end:
   323		return ret;
   324	}
   325	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0