Kernel
Threads by month
- ----- 2025 -----
- December
- 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
- 47 participants
- 21991 discussions
[openeuler:OLK-6.6 8439/14122] cpu.c:undefined reference to `trace_event_buffer_commit'
by kernel test robot 26 Sep '24
by kernel test robot 26 Sep '24
26 Sep '24
tree: https://gitee.com/openeuler/kernel.git OLK-6.6
head: 81a41d2ac1de43215c014bc71d907a026042e55b
commit: 4c7a7e37c75ec2611be134d953ae976bc25c793b [8439/14122] LoongArch: Change __my_cpu_offset definition to avoid mis-optimization
config: loongarch-randconfig-002-20240925 (https://download.01.org/0day-ci/archive/20240926/202409261955.pho8kSov-lkp@…)
compiler: loongarch64-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240926/202409261955.pho8kSov-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/202409261955.pho8kSov-lkp@intel.com/
All errors (new ones prefixed by >>):
loongarch64-linux-ld: warning: orphan section `_ftrace_events' from `sound/core/pcm_lib.o' being placed in section `_ftrace_events'
loongarch64-linux-ld: warning: orphan section `_ftrace_events' from `lib/maple_tree.o' being placed in section `_ftrace_events'
loongarch64-linux-ld: init/main.o: in function `.L199':
main.c:(.text+0x1f0): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: main.c:(.text+0x22c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: init/main.o: in function `perf_trace_initcall_start':
main.c:(.text+0x364): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: main.c:(.text+0x38c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: init/main.o: in function `perf_trace_initcall_finish':
main.c:(.text+0x44c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: main.c:(.text+0x478): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_start':
main.c:(.text+0x550): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: main.c:(.text+0x560): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: init/main.o: in function `.L240':
main.c:(.text+0x5a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_finish':
main.c:(.text+0x620): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: main.c:(.text+0x634): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: init/main.o: in function `.L251':
main.c:(.text+0x688): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: init/main.o: in function `.L247':
main.c:(.text+0x6bc): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_level':
main.c:(.text+0x714): undefined reference to `trace_event_printf'
loongarch64-linux-ld: main.c:(.text+0x734): undefined reference to `trace_handle_return'
loongarch64-linux-ld: main.c:(.text+0x75c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_start':
main.c:(.text+0x7b0): undefined reference to `trace_event_printf'
loongarch64-linux-ld: main.c:(.text+0x7d0): undefined reference to `trace_handle_return'
loongarch64-linux-ld: main.c:(.text+0x7fc): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_finish':
main.c:(.text+0x854): undefined reference to `trace_event_printf'
loongarch64-linux-ld: main.c:(.text+0x874): undefined reference to `trace_handle_return'
loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_level':
main.c:(.text+0x8f8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: main.c:(.text+0x914): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: init/main.o: in function `.L312':
main.c:(.text+0x97c): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: init/main.o: in function `.L299':
main.c:(.text+0x9c8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: init/main.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: init/main.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: init/main.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: init/main.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: init/main.o:(.ref.data+0xa8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: init/main.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/fork.o: in function `perf_trace_task_newtask':
fork.c:(.text+0x168): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/fork.o: in function `.L34':
fork.c:(.text+0x1bc): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/fork.o: in function `.L33':
fork.c:(.text+0x238): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/fork.o: in function `trace_event_raw_event_task_newtask':
fork.c:(.text+0x2f4): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/fork.o: in function `.L39':
fork.c:(.text+0x32c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/fork.o: in function `.L35':
fork.c:(.text+0x36c): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/fork.o: in function `.L36':
fork.c:(.text+0x3a4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/fork.o: in function `trace_raw_output_task_newtask':
fork.c:(.text+0x3fc): undefined reference to `trace_event_printf'
loongarch64-linux-ld: fork.c:(.text+0x41c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/fork.o: in function `.L52':
fork.c:(.text+0x444): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/fork.o: in function `trace_raw_output_task_rename':
fork.c:(.text+0x49c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: fork.c:(.text+0x4bc): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/fork.o: in function `.L58':
fork.c:(.text+0x520): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/fork.o: in function `perf_trace_task_rename':
fork.c:(.text+0x580): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/fork.o: in function `.L59':
fork.c:(.text+0x5f8): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/fork.o: in function `.L70':
fork.c:(.text+0x6b8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/fork.o: in function `trace_event_raw_event_task_rename':
fork.c:(.text+0x6fc): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/fork.o: in function `.L77':
fork.c:(.text+0x748): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_enter':
cpu.c:(.text+0x2cc): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cpu.o: in function `.L35':
cpu.c:(.text+0x300): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_multi_enter':
cpu.c:(.text+0x3dc): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cpu.o: in function `.L47':
cpu.c:(.text+0x410): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_exit':
cpu.c:(.text+0x4fc): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cpu.o: in function `.L59':
cpu.c:(.text+0x530): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_enter':
cpu.c:(.text+0x628): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cpu.o: in function `.L74':
>> cpu.c:(.text+0x644): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cpu.o: in function `.L70':
cpu.c:(.text+0x6a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_multi_enter':
cpu.c:(.text+0x730): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: cpu.c:(.text+0x74c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cpu.o: in function `.L81':
cpu.c:(.text+0x7a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_exit':
cpu.c:(.text+0x830): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: cpu.c:(.text+0x84c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cpu.o: in function `.L92':
cpu.c:(.text+0x8a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: cpu.c:(.text+0x8dc): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_enter':
cpu.c:(.text+0x93c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: cpu.c:(.text+0x95c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/cpu.o: in function `.L108':
>> cpu.c:(.text+0x984): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_multi_enter':
cpu.c:(.text+0x9dc): undefined reference to `trace_event_printf'
loongarch64-linux-ld: cpu.c:(.text+0x9fc): undefined reference to `trace_handle_return'
loongarch64-linux-ld: cpu.c:(.text+0xa24): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_exit':
cpu.c:(.text+0xa7c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: cpu.c:(.text+0xa9c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0xa8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_irq_handler_exit':
softirq.c:(.text+0x454): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/softirq.o: in function `.L74':
softirq.c:(.text+0x480): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_softirq':
softirq.c:(.text+0x544): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/softirq.o: in function `.L86':
softirq.c:(.text+0x56c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_tasklet':
softirq.c:(.text+0x62c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/softirq.o: in function `.L98':
softirq.c:(.text+0x658): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_irq_handler_exit':
softirq.c:(.text+0x738): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: softirq.c:(.text+0x74c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/softirq.o: in function `.L109':
softirq.c:(.text+0x7a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_softirq':
softirq.c:(.text+0x818): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: softirq.c:(.text+0x828): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/softirq.o: in function `.L120':
softirq.c:(.text+0x868): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_tasklet':
softirq.c:(.text+0x8e0): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: softirq.c:(.text+0x8f4): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/softirq.o: in function `.L131':
softirq.c:(.text+0x948): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: softirq.c:(.text+0x97c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_irq_handler_entry':
softirq.c:(.text+0x9d8): undefined reference to `trace_event_printf'
loongarch64-linux-ld: softirq.c:(.text+0x9f8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/softirq.o: in function `.L147':
softirq.c:(.text+0xa24): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_irq_handler_exit':
softirq.c:(.text+0xa50): undefined reference to `trace_event_printf'
loongarch64-linux-ld: softirq.c:(.text+0xa70): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/softirq.o: in function `.L153':
softirq.c:(.text+0xaf4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_tasklet':
softirq.c:(.text+0xb54): undefined reference to `trace_event_printf'
loongarch64-linux-ld: softirq.c:(.text+0xb74): undefined reference to `trace_handle_return'
loongarch64-linux-ld: softirq.c:(.text+0xb9c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_softirq':
softirq.c:(.text+0xbf4): undefined reference to `trace_print_symbols_seq'
loongarch64-linux-ld: softirq.c:(.text+0xc0c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: softirq.c:(.text+0xc2c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/softirq.o: in function `.L206':
softirq.c:(.text+0xff4): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/softirq.o: in function `.L205':
softirq.c:(.text+0x1044): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/softirq.o: in function `.L230':
softirq.c:(.text+0x11d4): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/softirq.o: in function `.L227':
softirq.c:(.text+0x1204): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_irq_handler_entry':
softirq.c:(.text+0x1288): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xa8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xf0): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/signal.o: in function `perf_trace_signal_generate':
signal.c:(.text+0x260): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/signal.o: in function `.L30':
signal.c:(.text+0x2cc): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/signal.o: in function `.L41':
signal.c:(.text+0x358): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/signal.o: in function `perf_trace_signal_deliver':
signal.c:(.text+0x414): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/signal.o: in function `.L49':
signal.c:(.text+0x468): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/signal.o: in function `trace_event_raw_event_signal_generate':
signal.c:(.text+0x590): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/signal.o: in function `.L66':
signal.c:(.text+0x5e0): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/signal.o: in function `.L62':
signal.c:(.text+0x688): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/signal.o: in function `trace_event_raw_event_signal_deliver':
signal.c:(.text+0x708): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: signal.c:(.text+0x748): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/signal.o: in function `.L78':
signal.c:(.text+0x7e8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/signal.o: in function `.L92':
signal.c:(.text+0x81c): undefined reference to `trace_raw_output_prep'
--
update.c:(.text+0x630): undefined reference to `trace_event_printf'
loongarch64-linux-ld: update.c:(.text+0x650): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/rcu/update.o: in function `.L88':
update.c:(.text+0x67c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/rcu/update.o: in function `trace_raw_output_rcu_stall_warning':
update.c:(.text+0x6d4): undefined reference to `trace_event_printf'
loongarch64-linux-ld: update.c:(.text+0x6f4): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L51':
swiotlb.c:(.text+0x46c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `trace_raw_output_swiotlb_bounced':
swiotlb.c:(.text+0x4a8): undefined reference to `trace_event_printf'
loongarch64-linux-ld: swiotlb.c:(.text+0x4c8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L237':
swiotlb.c:(.text+0x11c4): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `perf_trace_swiotlb_bounced':
swiotlb.c:(.text+0x1234): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L239':
swiotlb.c:(.text+0x1394): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L264':
swiotlb.c:(.text+0x13ec): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `trace_event_raw_event_swiotlb_bounced':
swiotlb.c:(.text+0x147c): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L293':
swiotlb.c:(.text+0x14e8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/dma/swiotlb.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/dma/swiotlb.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L22':
common.c:(.text+0x154): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: common.c:(.text+0x184): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/entry/common.o: in function `perf_trace_sys_enter':
common.c:(.text+0x250): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L46':
common.c:(.text+0x298): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L33':
common.c:(.text+0x318): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/entry/common.o: in function `trace_event_raw_event_sys_enter':
common.c:(.text+0x3d8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L51':
common.c:(.text+0x404): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L47':
common.c:(.text+0x448): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/entry/common.o: in function `trace_event_raw_event_sys_exit':
common.c:(.text+0x4c0): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: common.c:(.text+0x4dc): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L58':
common.c:(.text+0x528): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: common.c:(.text+0x55c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/entry/common.o: in function `trace_raw_output_sys_enter':
common.c:(.text+0x5cc): undefined reference to `trace_event_printf'
loongarch64-linux-ld: common.c:(.text+0x5ec): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/entry/common.o: in function `.L74':
common.c:(.text+0x614): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/entry/common.o: in function `trace_raw_output_sys_exit':
common.c:(.text+0x674): undefined reference to `trace_event_printf'
loongarch64-linux-ld: common.c:(.text+0x694): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L114':
timer.c:(.text+0x814): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_class':
timer.c:(.text+0x83c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_start':
timer.c:(.text+0x914): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: timer.c:(.text+0x958): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L143':
timer.c:(.text+0xa2c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_expire_entry':
timer.c:(.text+0xa6c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L144':
timer.c:(.text+0xb34): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_hrtimer_init':
timer.c:(.text+0xb64): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L156':
timer.c:(.text+0xc2c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_hrtimer_start':
timer.c:(.text+0xc70): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L168':
timer.c:(.text+0xd2c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L179':
timer.c:(.text+0xd64): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L180':
timer.c:(.text+0xe24): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: timer.c:(.text+0xe4c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L192':
timer.c:(.text+0xf14): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L203':
timer.c:(.text+0xf60): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L204':
timer.c:(.text+0x1034): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: timer.c:(.text+0x1070): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L219':
timer.c:(.text+0x1130): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L216':
timer.c:(.text+0x1140): undefined reference to `trace_event_buffer_commit'
>> loongarch64-linux-ld: timer.c:(.text+0x1188): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_timer_class':
timer.c:(.text+0x1208): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L231':
timer.c:(.text+0x1238): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L232':
timer.c:(.text+0x1288): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L246':
timer.c:(.text+0x1300): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: timer.c:(.text+0x132c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L242':
timer.c:(.text+0x1368): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_timer_expire_entry':
timer.c:(.text+0x13e8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L257':
timer.c:(.text+0x1400): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L253':
timer.c:(.text+0x1448): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_init':
timer.c:(.text+0x14b8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: timer.c:(.text+0x14e8): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L264':
timer.c:(.text+0x152c): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_start':
timer.c:(.text+0x15a8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: timer.c:(.text+0x15cc): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L279':
timer.c:(.text+0x1608): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L276':
timer.c:(.text+0x1678): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: timer.c:(.text+0x1688): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_expire_entry':
timer.c:(.text+0x16c8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L286':
timer.c:(.text+0x1748): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L287':
timer.c:(.text+0x1780): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_class':
timer.c:(.text+0x17c8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L298':
timer.c:(.text+0x1848): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_itimer_state':
timer.c:(.text+0x186c): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L312':
timer.c:(.text+0x18c8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: timer.c:(.text+0x18fc): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L308':
timer.c:(.text+0x1950): undefined reference to `trace_event_printf'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_itimer_expire':
timer.c:(.text+0x1970): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x199c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L324':
timer.c:(.text+0x19fc): undefined reference to `trace_event_printf'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L319':
timer.c:(.text+0x1a1c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x1a44): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_class':
timer.c:(.text+0x1a98): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1ab8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L338':
timer.c:(.text+0x1ae4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_expire_entry':
timer.c:(.text+0x1b30): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1b50): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x1b7c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_hrtimer_expire_entry':
timer.c:(.text+0x1bf0): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1c10): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x1c3c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_hrtimer_class':
timer.c:(.text+0x1c98): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1cb8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x1ce4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_itimer_state':
timer.c:(.text+0x1d84): undefined reference to `trace_print_flags_seq'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L362':
timer.c:(.text+0x1db0): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1de0): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_itimer_expire':
timer.c:(.text+0x1e0c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: timer.c:(.text+0x1e68): undefined reference to `trace_print_symbols_seq'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L368':
timer.c:(.text+0x1e80): undefined reference to `trace_print_symbols_seq'
loongarch64-linux-ld: timer.c:(.text+0x1e9c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_start':
timer.c:(.text+0x1ec8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: timer.c:(.text+0x1ef4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/timer.o: in function `.L374':
timer.c:(.text+0x1f70): undefined reference to `trace_print_symbols_seq'
loongarch64-linux-ld: timer.c:(.text+0x1f94): undefined reference to `trace_event_printf'
loongarch64-linux-ld: timer.c:(.text+0x1fc0): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xa8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xf0): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x138): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x160): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x180): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1a8): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1c8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1f0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x210): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x238): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x258): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x280): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `perf_trace_alarmtimer_suspend':
alarmtimer.c:(.text+0x2d4): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L46':
alarmtimer.c:(.text+0x300): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `perf_trace_alarm_class':
alarmtimer.c:(.text+0x3cc): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L58':
alarmtimer.c:(.text+0x408): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_event_raw_event_alarmtimer_suspend':
alarmtimer.c:(.text+0x4d8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: alarmtimer.c:(.text+0x4ec): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L73':
alarmtimer.c:(.text+0x528): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L70':
alarmtimer.c:(.text+0x598): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_event_raw_event_alarm_class':
alarmtimer.c:(.text+0x5c0): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L84':
alarmtimer.c:(.text+0x60c): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L80':
alarmtimer.c:(.text+0x644): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_raw_output_alarmtimer_suspend':
alarmtimer.c:(.text+0x6a0): undefined reference to `trace_print_flags_seq'
loongarch64-linux-ld: alarmtimer.c:(.text+0x6b8): undefined reference to `trace_event_printf'
loongarch64-linux-ld: alarmtimer.c:(.text+0x6d8): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L96':
alarmtimer.c:(.text+0x704): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_raw_output_alarm_class':
alarmtimer.c:(.text+0x76c): undefined reference to `trace_print_flags_seq'
loongarch64-linux-ld: alarmtimer.c:(.text+0x78c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: alarmtimer.c:(.text+0x7b0): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/smp.o: in function `perf_trace_csd_queue_cpu':
smp.c:(.text+0x214): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/smp.o: in function `.L30':
smp.c:(.text+0x248): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/smp.o: in function `perf_trace_csd_function':
smp.c:(.text+0x30c): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/smp.o: in function `.L42':
smp.c:(.text+0x338): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/smp.o: in function `trace_event_raw_event_csd_queue_cpu':
smp.c:(.text+0x428): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/smp.o: in function `.L57':
smp.c:(.text+0x444): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/smp.o: in function `.L53':
smp.c:(.text+0x4a8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/smp.o: in function `trace_event_raw_event_csd_function':
smp.c:(.text+0x520): undefined reference to `trace_event_buffer_reserve'
>> loongarch64-linux-ld: smp.c:(.text+0x534): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/smp.o: in function `.L64':
smp.c:(.text+0x588): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/smp.o: in function `.L65':
smp.c:(.text+0x5bc): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/smp.o: in function `trace_raw_output_csd_queue_cpu':
smp.c:(.text+0x61c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: smp.c:(.text+0x63c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/smp.o: in function `.L80':
smp.c:(.text+0x664): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/smp.o: in function `trace_raw_output_csd_function':
smp.c:(.text+0x6b4): undefined reference to `trace_event_printf'
loongarch64-linux-ld: smp.c:(.text+0x6d4): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L255':
kexec_core.c:(.text+0x1b10): undefined reference to `machine_kexec_cleanup'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L296':
kexec_core.c:(.text+0x1d70): undefined reference to `machine_crash_shutdown'
loongarch64-linux-ld: kexec_core.c:(.text+0x1d78): undefined reference to `machine_kexec'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L383':
kexec_core.c:(.text+0x2350): undefined reference to `machine_shutdown'
loongarch64-linux-ld: kernel/kexec_core.o: in function `.L380':
kexec_core.c:(.text+0x2360): undefined reference to `machine_kexec'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L128':
cgroup.c:(.text+0x858): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L129':
cgroup.c:(.text+0x8b0): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup_event':
cgroup.c:(.text+0xa58): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L147':
cgroup.c:(.text+0xab8): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L168':
cgroup.c:(.text+0xd70): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L21':
cgroup.c:(.text+0xdb4): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L192':
cgroup.c:(.text+0xe68): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: cgroup.c:(.text+0xe9c): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L189':
cgroup.c:(.text+0xefc): undefined reference to `trace_event_printf'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L200':
cgroup.c:(.text+0xf1c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: cgroup.c:(.text+0xf44): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L190':
cgroup.c:(.text+0xfa0): undefined reference to `trace_event_printf'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup_root':
cgroup.c:(.text+0xfc0): undefined reference to `trace_handle_return'
loongarch64-linux-ld: cgroup.c:(.text+0xfec): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup':
cgroup.c:(.text+0x106c): undefined reference to `trace_event_printf'
loongarch64-linux-ld: cgroup.c:(.text+0x108c): undefined reference to `trace_handle_return'
loongarch64-linux-ld: cgroup.c:(.text+0x10b4): undefined reference to `trace_raw_output_prep'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup_migrate':
cgroup.c:(.text+0x1124): undefined reference to `trace_event_printf'
loongarch64-linux-ld: cgroup.c:(.text+0x1144): undefined reference to `trace_handle_return'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L725':
cgroup.c:(.text+0x3e50): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L15':
cgroup.c:(.text+0x3ed4): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L756':
cgroup.c:(.text+0x4020): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L761':
cgroup.c:(.text+0x407c): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L779':
cgroup.c:(.text+0x41d4): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L769':
cgroup.c:(.text+0x4218): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: cgroup.c:(.text+0x4274): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L772':
cgroup.c:(.text+0x42c8): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup_migrate':
cgroup.c:(.text+0x4364): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: cgroup.c:(.text+0x4394): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L783':
cgroup.c:(.text+0x43ec): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L784':
cgroup.c:(.text+0x4448): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L799':
cgroup.c:(.text+0x4520): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup':
cgroup.c:(.text+0x4588): undefined reference to `trace_event_buffer_commit'
loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L802':
cgroup.c:(.text+0x4668): undefined reference to `__trace_trigger_soft_disabled'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x18): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x60): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xa8): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xf0): undefined reference to `trace_event_reg'
loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init'
loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `.L12':
error_report-traces.c:(.text+0xdc): undefined reference to `perf_trace_buf_alloc'
loongarch64-linux-ld: error_report-traces.c:(.text+0x108): undefined reference to `perf_trace_run_bpf_submit'
loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `trace_event_raw_event_error_report_template':
error_report-traces.c:(.text+0x1d8): undefined reference to `trace_event_buffer_reserve'
loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `.L27':
error_report-traces.c:(.text+0x1ec): undefined reference to `trace_event_buffer_commit'
..
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for PGP_PRELOAD
Depends on [n]: CRYPTO [=y] && ASYMMETRIC_KEY_TYPE [=n]
Selected by [y]:
- PGP_PRELOAD_PUBLIC_KEYS [=y] && CRYPTO [=y]
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
1
0
This patch set fix cve-2024-45025
Al Viro (1):
fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE
Alexander Lobakin (4):
tools: move alignment-related macros to new <linux/align.h>
fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64()
bitmap: introduce generic optimized bitmap_size()
s390/cio: rename bitmap_size() -> idset_bitmap_size()
drivers/md/dm-clone-metadata.c | 5 ---
drivers/s390/cio/idset.c | 12 ++++---
fs/file.c | 30 +++++++---------
fs/ntfs3/bitmap.c | 4 +--
fs/ntfs3/fsntfs.c | 2 +-
fs/ntfs3/index.c | 11 +++---
fs/ntfs3/ntfs_fs.h | 4 +--
fs/ntfs3/super.c | 2 +-
include/linux/bitmap.h | 20 +++++++++--
include/linux/cpumask.h | 2 +-
lib/math/prime_numbers.c | 2 --
tools/include/linux/align.h | 12 +++++++
tools/include/linux/bitmap.h | 9 ++---
.../testing/selftests/core/close_range_test.c | 35 +++++++++++++++++++
14 files changed, 102 insertions(+), 48 deletions(-)
create mode 100644 tools/include/linux/align.h
--
2.39.2
2
6
[PATCH OLK-6.6] arm64/mpam: Fix redefined reference of 'mpam_detect_is_enabled'
by Zeng Heng 26 Sep '24
by Zeng Heng 26 Sep '24
26 Sep '24
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IATSCU
--------------------------------
Fix re-defined reference of 'mpam_detect_is_enabled' when CONFIG_ARM64_MPAM
is enabled.
Fixes: 797c68d3b52d ("arm64/mpam: Check mpam_detect_is_enabled() before accessing MPAM registers")
Signed-off-by: Zeng Heng <zengheng4(a)huawei.com>
---
arch/arm64/include/asm/cpufeature.h | 7 -------
1 file changed, 7 deletions(-)
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index f8ec4b20fa69..4c759e0dcc21 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -858,14 +858,7 @@ static inline bool cpus_support_mpam(void)
cpus_have_final_cap(ARM64_MPAM);
}
-#ifdef CONFIG_ARM64_MPAM
bool mpam_detect_is_enabled(void);
-#else
-static inline bool mpam_detect_is_enabled(void)
-{
- return false;
-}
-#endif
int do_emulate_mrs(struct pt_regs *regs, u32 sys_reg, u32 rt);
bool try_emulate_mrs(struct pt_regs *regs, u32 isn);
--
2.25.1
2
1
[PATCH OLK-5.10] acpi/arm64: Do not add CPU to node_to_cpumask_map in acpi_map_cpu()
by Xiongfeng Wang 26 Sep '24
by Xiongfeng Wang 26 Sep '24
26 Sep '24
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IATDZ5
CVE: NA
--------------------------------
When two vCPUs of NUMA1 are hot added and then taken to online, e.g.:
In qemu monitor:
device_add host-arm-cpu,socket-id=1,cluster-id=0,core-id=0,
thread-id=0,id=core4
device_add host-arm-cpu,socket-id=1,cluster-id=0,core-id=0,
thread-id=1,id=core5
In guest:
echo 1 > /sys/devices/system/cpu/cpu4/online
it will appear calltrace as below:
WARNING: CPU: 4 PID: 286 at kernel/sched/core.c:2293 __set_cpus_allowed_ptr+0x468/0x4d4
Modules linked in: ...
CPU: 4 PID: 286 Comm: cpuhp/4 Tainted: G W OE 5.10.0 #1
Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
pstate: 20400085 (nzCv daIf +PAN -UAO -TCO BTYPE=--)
pc : __set_cpus_allowed_ptr+0x468/0x4d4
lr : __set_cpus_allowed_ptr+0x440/0x4d4
sp : ffff800010a43c30
x29: ffff800010a43c30 x28: ffff4e2fbffe7c40
x27: ffffa34037fcb450 x26: ffffa340372f2000
x25: 0000000000000004 x24: ffffa34037c47140
x23: ffff4e2f3ffc7480 x22: 0000000000000000
x21: ffff4e2ec0fee040 x20: ffffa34037cb8530
x19: ffffa34037cb7c80 x18: ffff4e2f80242787
x17: 00000000248943a4 x16: 0000000000000000
x15: ffff800010760000 x14: 0000000000001000
x13: ffff80000fffffff x12: 0000000000007290
x11: ffff4e2fbffeeed0 x10: ffffa3403826eea8
x9 : ffffa340341b8290 x8 : 0000000000000000
x7 : ffffa3403826a3c8 x6 : ffff4e2ec0fee4f8
x5 : 0000000000000000 x4 : 00000000000007c7
x3 : ffffffffffffffff x2 : 00000000000000ff
x1 : 0000000000000004 x0 : 0000000000000001
Call trace:
__set_cpus_allowed_ptr+0x468/0x4d4
set_cpus_allowed_ptr+0x38/0x5c
kcompactd_cpu_online+0xb0/0x190
cpuhp_invoke_callback+0x274/0xbb0
cpuhp_thread_fun+0x188/0x36c
smpboot_thread_fn+0x144/0x380
kthread+0x190/0x1fc
ret_from_fork+0x10/0x18
When the WARN_ON occurs, the mask variables is as follows.
new_mask: 0-4 activ_mask:0-3 nr_cpus_allowed:2
numa_add_cpu() is called in secondary_start_kernel() when the CPU is
brought up online. We need to remove numa_add_cpu() in acpi_map_cpu().
So it is for arch/x86. Also fix it in acpi_unmap_cpu() as well.
Fixes: 7eaf6534f708 ("arm64: Add CPU hotplug support")
Signed-off-by: Xiongfeng Wang <wangxiongfeng2(a)huawei.com>
Signed-off-by: Zhou Wang <wangzhou1(a)hisilicon.com>
---
arch/arm64/kernel/acpi.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
index a81105cfe57e2..f043bec3ba50f 100644
--- a/arch/arm64/kernel/acpi.c
+++ b/arch/arm64/kernel/acpi.c
@@ -417,7 +417,6 @@ int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id,
nid = acpi_get_node(handle);
if (nid != NUMA_NO_NODE) {
set_cpu_numa_node(cpu, nid);
- numa_add_cpu(cpu);
}
*pcpu = cpu;
@@ -430,7 +429,7 @@ EXPORT_SYMBOL(acpi_map_cpu);
int acpi_unmap_cpu(int cpu)
{
set_cpu_present(cpu, false);
- numa_clear_node(cpu);
+ set_cpu_numa_node(cpu, NUMA_NO_NODE);
return 0;
}
--
2.20.1
2
1
[PATCH openEuler-1.0-LTS] VMCI: Fix use-after-free when removing resource in vmci_resource_remove()
by Zhang Kunbo 26 Sep '24
by Zhang Kunbo 26 Sep '24
26 Sep '24
From: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com>
stable inclusion
from stable-v4.19.322
commit f6365931bf7c07b2b397dbb06a4f6573cc9fae73
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IARY1L
CVE: CVE-2024-46738
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
commit 48b9a8dabcc3cf5f961b2ebcd8933bf9204babb7 upstream.
When removing a resource from vmci_resource_table in
vmci_resource_remove(), the search is performed using the resource
handle by comparing context and resource fields.
It is possible though to create two resources with different types
but same handle (same context and resource fields).
When trying to remove one of the resources, vmci_resource_remove()
may not remove the intended one, but the object will still be freed
as in the case of the datagram type in vmci_datagram_destroy_handle().
vmci_resource_table will still hold a pointer to this freed resource
leading to a use-after-free vulnerability.
BUG: KASAN: use-after-free in vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline]
BUG: KASAN: use-after-free in vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147
Read of size 4 at addr ffff88801c16d800 by task syz-executor197/1592
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x82/0xa9 lib/dump_stack.c:106
print_address_description.constprop.0+0x21/0x366 mm/kasan/report.c:239
__kasan_report.cold+0x7f/0x132 mm/kasan/report.c:425
kasan_report+0x38/0x51 mm/kasan/report.c:442
vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline]
vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147
vmci_qp_broker_detach+0x89a/0x11b9 drivers/misc/vmw_vmci/vmci_queue_pair.c:2182
ctx_free_ctx+0x473/0xbe1 drivers/misc/vmw_vmci/vmci_context.c:444
kref_put include/linux/kref.h:65 [inline]
vmci_ctx_put drivers/misc/vmw_vmci/vmci_context.c:497 [inline]
vmci_ctx_destroy+0x170/0x1d6 drivers/misc/vmw_vmci/vmci_context.c:195
vmci_host_close+0x125/0x1ac drivers/misc/vmw_vmci/vmci_host.c:143
__fput+0x261/0xa34 fs/file_table.c:282
task_work_run+0xf0/0x194 kernel/task_work.c:164
tracehook_notify_resume include/linux/tracehook.h:189 [inline]
exit_to_user_mode_loop+0x184/0x189 kernel/entry/common.c:187
exit_to_user_mode_prepare+0x11b/0x123 kernel/entry/common.c:220
__syscall_exit_to_user_mode_work kernel/entry/common.c:302 [inline]
syscall_exit_to_user_mode+0x18/0x42 kernel/entry/common.c:313
do_syscall_64+0x41/0x85 arch/x86/entry/common.c:86
entry_SYSCALL_64_after_hwframe+0x6e/0x0
This change ensures the type is also checked when removing
the resource from vmci_resource_table in vmci_resource_remove().
Fixes: bc63dedb7d46 ("VMCI: resource object implementation.")
Cc: stable(a)vger.kernel.org
Reported-by: George Kennedy <george.kennedy(a)oracle.com>
Signed-off-by: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com>
Link: https://lore.kernel.org/r/20240828154338.754746-1-david.fernandez.gonzalez@…
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Zhang Kunbo <zhangkunbo(a)huawei.com>
---
drivers/misc/vmw_vmci/vmci_resource.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/vmw_vmci/vmci_resource.c b/drivers/misc/vmw_vmci/vmci_resource.c
index da1ee2e1ba99..2779704e128a 100644
--- a/drivers/misc/vmw_vmci/vmci_resource.c
+++ b/drivers/misc/vmw_vmci/vmci_resource.c
@@ -152,7 +152,8 @@ void vmci_resource_remove(struct vmci_resource *resource)
spin_lock(&vmci_resource_table.lock);
hlist_for_each_entry(r, &vmci_resource_table.entries[idx], node) {
- if (vmci_handle_is_equal(r->handle, resource->handle)) {
+ if (vmci_handle_is_equal(r->handle, resource->handle) &&
+ resource->type == r->type) {
hlist_del_init_rcu(&r->node);
break;
}
--
2.34.1
2
1
From: Ma Wupeng <mawupeng1(a)huawei.com>
fix cve for CVE-2024-46777.
Jan Kara (2):
udf: Define EFSCORRUPTED error code
udf: Avoid excessive partition lengths
fs/udf/super.c | 15 +++++++++++++++
fs/udf/udf_sb.h | 2 ++
2 files changed, 17 insertions(+)
--
2.25.1
2
3
[PATCH openEuler-22.03-LTS-SP1] bcache: fix variable length array abuse in btree_iter
by Yuan Can 26 Sep '24
by Yuan Can 26 Sep '24
26 Sep '24
From: Matthew Mirvish <matthew(a)mm12.xyz>
stable inclusion
from stable-v5.10.221
commit 2c3d7b03b658dc8bfa6112b194b67b92a87e081b
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAB04K
CVE: CVE-2024-39482
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
commit 3a861560ccb35f2a4f0a4b8207fa7c2a35fc7f31 upstream.
btree_iter is used in two ways: either allocated on the stack with a
fixed size MAX_BSETS, or from a mempool with a dynamic size based on the
specific cache set. Previously, the struct had a fixed-length array of
size MAX_BSETS which was indexed out-of-bounds for the dynamically-sized
iterators, which causes UBSAN to complain.
This patch uses the same approach as in bcachefs's sort_iter and splits
the iterator into a btree_iter with a flexible array member and a
btree_iter_stack which embeds a btree_iter as well as a fixed-length
data array.
Cc: stable(a)vger.kernel.org
Closes: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2039368
Signed-off-by: Matthew Mirvish <matthew(a)mm12.xyz>
Signed-off-by: Coly Li <colyli(a)suse.de>
Link: https://lore.kernel.org/r/20240509011117.2697-3-colyli@suse.de
Signed-off-by: Jens Axboe <axboe(a)kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Yuan Can <yuancan(a)huawei.com>
---
drivers/md/bcache/bset.c | 44 +++++++++++++++++------------------
drivers/md/bcache/bset.h | 28 ++++++++++++++--------
drivers/md/bcache/btree.c | 40 ++++++++++++++++---------------
drivers/md/bcache/super.c | 5 ++--
drivers/md/bcache/sysfs.c | 2 +-
drivers/md/bcache/writeback.c | 10 ++++----
6 files changed, 70 insertions(+), 59 deletions(-)
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 94d38e8a59b3..cb544207427b 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -54,7 +54,7 @@ void bch_dump_bucket(struct btree_keys *b)
int __bch_count_data(struct btree_keys *b)
{
unsigned int ret = 0;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k;
if (b->ops->is_extents)
@@ -67,7 +67,7 @@ void __bch_check_keys(struct btree_keys *b, const char *fmt, ...)
{
va_list args;
struct bkey *k, *p = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
const char *err;
for_each_key(b, k, &iter) {
@@ -879,7 +879,7 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k,
unsigned int status = BTREE_INSERT_STATUS_NO_INSERT;
struct bset *i = bset_tree_last(b)->data;
struct bkey *m, *prev = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey preceding_key_on_stack = ZERO_KEY;
struct bkey *preceding_key_p = &preceding_key_on_stack;
@@ -895,9 +895,9 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k,
else
preceding_key(k, &preceding_key_p);
- m = bch_btree_iter_init(b, &iter, preceding_key_p);
+ m = bch_btree_iter_stack_init(b, &iter, preceding_key_p);
- if (b->ops->insert_fixup(b, k, &iter, replace_key))
+ if (b->ops->insert_fixup(b, k, &iter.iter, replace_key))
return status;
status = BTREE_INSERT_STATUS_INSERT;
@@ -1100,33 +1100,33 @@ void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k,
btree_iter_cmp));
}
-static struct bkey *__bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
- struct bkey *search,
- struct bset_tree *start)
+static struct bkey *__bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
+ struct bkey *search,
+ struct bset_tree *start)
{
struct bkey *ret = NULL;
- iter->size = ARRAY_SIZE(iter->data);
- iter->used = 0;
+ iter->iter.size = ARRAY_SIZE(iter->stack_data);
+ iter->iter.used = 0;
#ifdef CONFIG_BCACHE_DEBUG
- iter->b = b;
+ iter->iter.b = b;
#endif
for (; start <= bset_tree_last(b); start++) {
ret = bch_bset_search(b, start, search);
- bch_btree_iter_push(iter, ret, bset_bkey_last(start->data));
+ bch_btree_iter_push(&iter->iter, ret, bset_bkey_last(start->data));
}
return ret;
}
-struct bkey *bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
+struct bkey *bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
struct bkey *search)
{
- return __bch_btree_iter_init(b, iter, search, b->set);
+ return __bch_btree_iter_stack_init(b, iter, search, b->set);
}
static inline struct bkey *__bch_btree_iter_next(struct btree_iter *iter,
@@ -1293,10 +1293,10 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start,
struct bset_sort_state *state)
{
size_t order = b->page_order, keys = 0;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
int oldsize = bch_count_data(b);
- __bch_btree_iter_init(b, &iter, NULL, &b->set[start]);
+ __bch_btree_iter_stack_init(b, &iter, NULL, &b->set[start]);
if (start) {
unsigned int i;
@@ -1307,7 +1307,7 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start,
order = get_order(__set_bytes(b->set->data, keys));
}
- __btree_sort(b, &iter, start, order, false, state);
+ __btree_sort(b, &iter.iter, start, order, false, state);
EBUG_ON(oldsize >= 0 && bch_count_data(b) != oldsize);
}
@@ -1323,11 +1323,11 @@ void bch_btree_sort_into(struct btree_keys *b, struct btree_keys *new,
struct bset_sort_state *state)
{
uint64_t start_time = local_clock();
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(b, &iter, NULL);
+ bch_btree_iter_stack_init(b, &iter, NULL);
- btree_mergesort(b, new->set->data, &iter, false, true);
+ btree_mergesort(b, new->set->data, &iter.iter, false, true);
bch_time_stats_update(&state->time, start_time);
diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h
index d795c84246b0..011f6062c4c0 100644
--- a/drivers/md/bcache/bset.h
+++ b/drivers/md/bcache/bset.h
@@ -321,7 +321,14 @@ struct btree_iter {
#endif
struct btree_iter_set {
struct bkey *k, *end;
- } data[MAX_BSETS];
+ } data[];
+};
+
+/* Fixed-size btree_iter that can be allocated on the stack */
+
+struct btree_iter_stack {
+ struct btree_iter iter;
+ struct btree_iter_set stack_data[MAX_BSETS];
};
typedef bool (*ptr_filter_fn)(struct btree_keys *b, const struct bkey *k);
@@ -333,9 +340,9 @@ struct bkey *bch_btree_iter_next_filter(struct btree_iter *iter,
void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k,
struct bkey *end);
-struct bkey *bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
- struct bkey *search);
+struct bkey *bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
+ struct bkey *search);
struct bkey *__bch_bset_search(struct btree_keys *b, struct bset_tree *t,
const struct bkey *search);
@@ -350,13 +357,14 @@ static inline struct bkey *bch_bset_search(struct btree_keys *b,
return search ? __bch_bset_search(b, t, search) : t->data->start;
}
-#define for_each_key_filter(b, k, iter, filter) \
- for (bch_btree_iter_init((b), (iter), NULL); \
- ((k) = bch_btree_iter_next_filter((iter), (b), filter));)
+#define for_each_key_filter(b, k, stack_iter, filter) \
+ for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \
+ ((k) = bch_btree_iter_next_filter(&((stack_iter)->iter), (b), \
+ filter));)
-#define for_each_key(b, k, iter) \
- for (bch_btree_iter_init((b), (iter), NULL); \
- ((k) = bch_btree_iter_next(iter));)
+#define for_each_key(b, k, stack_iter) \
+ for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \
+ ((k) = bch_btree_iter_next(&((stack_iter)->iter)));)
/* Sorting */
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 98daa9d200f7..da24a3ca69e5 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -1274,7 +1274,7 @@ static bool btree_gc_mark_node(struct btree *b, struct gc_stat *gc)
uint8_t stale = 0;
unsigned int keys = 0, good_keys = 0;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bset_tree *t;
gc->nodes++;
@@ -1533,7 +1533,7 @@ static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op,
static unsigned int btree_gc_count_keys(struct btree *b)
{
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
unsigned int ret = 0;
for_each_key_filter(&b->keys, k, &iter, bch_ptr_bad)
@@ -1574,17 +1574,18 @@ static int btree_gc_recurse(struct btree *b, struct btree_op *op,
int ret = 0;
bool should_rewrite;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct gc_merge_info r[GC_MERGE_NODES];
struct gc_merge_info *i, *last = r + ARRAY_SIZE(r) - 1;
- bch_btree_iter_init(&b->keys, &iter, &b->c->gc_done);
+ bch_btree_iter_stack_init(&b->keys, &iter, &b->c->gc_done);
for (i = r; i < r + ARRAY_SIZE(r); i++)
i->b = ERR_PTR(-EINTR);
while (1) {
- k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad);
+ k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
+ bch_ptr_bad);
if (k) {
r->b = bch_btree_node_get(b->c, op, k, b->level - 1,
true, b);
@@ -1874,7 +1875,7 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op)
{
int ret = 0;
struct bkey *k, *p = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
for_each_key_filter(&b->keys, k, &iter, bch_ptr_invalid)
bch_initial_mark_key(b->c, b->level, k);
@@ -1882,10 +1883,10 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op)
bch_initial_mark_key(b->c, b->level + 1, &b->key);
if (b->level) {
- bch_btree_iter_init(&b->keys, &iter, NULL);
+ bch_btree_iter_stack_init(&b->keys, &iter, NULL);
do {
- k = bch_btree_iter_next_filter(&iter, &b->keys,
+ k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
bch_ptr_bad);
if (k) {
btree_node_prefetch(b, k);
@@ -1913,7 +1914,7 @@ static int bch_btree_check_thread(void *arg)
struct btree_check_info *info = arg;
struct btree_check_state *check_state = info->state;
struct cache_set *c = check_state->c;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k, *p;
int cur_idx, prev_idx, skip_nr;
@@ -1922,8 +1923,8 @@ static int bch_btree_check_thread(void *arg)
ret = 0;
/* root node keys are checked before thread created */
- bch_btree_iter_init(&c->root->keys, &iter, NULL);
- k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad);
+ bch_btree_iter_stack_init(&c->root->keys, &iter, NULL);
+ k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad);
BUG_ON(!k);
p = k;
@@ -1941,7 +1942,7 @@ static int bch_btree_check_thread(void *arg)
skip_nr = cur_idx - prev_idx;
while (skip_nr) {
- k = bch_btree_iter_next_filter(&iter,
+ k = bch_btree_iter_next_filter(&iter.iter,
&c->root->keys,
bch_ptr_bad);
if (k)
@@ -2005,7 +2006,7 @@ int bch_btree_check(struct cache_set *c)
int ret = 0;
int i;
struct bkey *k = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct btree_check_state check_state;
/* check and mark root node keys */
@@ -2501,11 +2502,11 @@ static int bch_btree_map_nodes_recurse(struct btree *b, struct btree_op *op,
if (b->level) {
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(&b->keys, &iter, from);
+ bch_btree_iter_stack_init(&b->keys, &iter, from);
- while ((k = bch_btree_iter_next_filter(&iter, &b->keys,
+ while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
bch_ptr_bad))) {
ret = bcache_btree(map_nodes_recurse, k, b,
op, from, fn, flags);
@@ -2534,11 +2535,12 @@ int bch_btree_map_keys_recurse(struct btree *b, struct btree_op *op,
{
int ret = MAP_CONTINUE;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(&b->keys, &iter, from);
+ bch_btree_iter_stack_init(&b->keys, &iter, from);
- while ((k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad))) {
+ while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
+ bch_ptr_bad))) {
ret = !b->level
? fn(op, b, k)
: bcache_btree(map_keys_recurse, k,
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index b5601f200c09..c778862f4f33 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1928,8 +1928,9 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
INIT_LIST_HEAD(&c->btree_cache_freed);
INIT_LIST_HEAD(&c->data_buckets);
- iter_size = ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size + 1) *
- sizeof(struct btree_iter_set);
+ iter_size = sizeof(struct btree_iter) +
+ ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size) *
+ sizeof(struct btree_iter_set);
c->devices = kcalloc(c->nr_uuids, sizeof(void *), GFP_KERNEL);
if (!c->devices)
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 8467e37411a7..84b8e9e90ee6 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -660,7 +660,7 @@ static unsigned int bch_root_usage(struct cache_set *c)
unsigned int bytes = 0;
struct bkey *k;
struct btree *b;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
goto lock_root;
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 83dcdd85abc0..9502cc9b0c80 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -899,15 +899,15 @@ static int bch_dirty_init_thread(void *arg)
struct dirty_init_thrd_info *info = arg;
struct bch_dirty_init_state *state = info->state;
struct cache_set *c = state->c;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k, *p;
int cur_idx, prev_idx, skip_nr;
k = p = NULL;
cur_idx = prev_idx = 0;
- bch_btree_iter_init(&c->root->keys, &iter, NULL);
- k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad);
+ bch_btree_iter_stack_init(&c->root->keys, &iter, NULL);
+ k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad);
BUG_ON(!k);
p = k;
@@ -921,7 +921,7 @@ static int bch_dirty_init_thread(void *arg)
skip_nr = cur_idx - prev_idx;
while (skip_nr) {
- k = bch_btree_iter_next_filter(&iter,
+ k = bch_btree_iter_next_filter(&iter.iter,
&c->root->keys,
bch_ptr_bad);
if (k)
@@ -969,7 +969,7 @@ void bch_sectors_dirty_init(struct bcache_device *d)
{
int i;
struct bkey *k = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct sectors_dirty_init op;
struct cache_set *c = d->c;
struct bch_dirty_init_state state;
--
2.17.1
2
1
[PATCH openEuler-22.03-LTS-SP1] usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete
by Yuan Can 26 Sep '24
by Yuan Can 26 Sep '24
26 Sep '24
From: Wesley Cheng <quic_wcheng(a)quicinc.com>
stable inclusion
from stable-v5.10.221
commit e500b1c4e29ad0bd1c1332a1eaea2913627a92dd
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9TXIA
CVE: CVE-2024-36894
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
[ Upstream commit 24729b307eefcd7c476065cd7351c1a018082c19 ]
FFS based applications can utilize the aio_cancel() callback to dequeue
pending USB requests submitted to the UDC. There is a scenario where the
FFS application issues an AIO cancel call, while the UDC is handling a
soft disconnect. For a DWC3 based implementation, the callstack looks
like the following:
DWC3 Gadget FFS Application
dwc3_gadget_soft_disconnect() ...
--> dwc3_stop_active_transfers()
--> dwc3_gadget_giveback(-ESHUTDOWN)
--> ffs_epfile_async_io_complete() ffs_aio_cancel()
--> usb_ep_free_request() --> usb_ep_dequeue()
There is currently no locking implemented between the AIO completion
handler and AIO cancel, so the issue occurs if the completion routine is
running in parallel to an AIO cancel call coming from the FFS application.
As the completion call frees the USB request (io_data->req) the FFS
application is also referencing it for the usb_ep_dequeue() call. This can
lead to accessing a stale/hanging pointer.
commit b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently")
relocated the usb_ep_free_request() into ffs_epfile_async_io_complete().
However, in order to properly implement locking to mitigate this issue, the
spinlock can't be added to ffs_epfile_async_io_complete(), as
usb_ep_dequeue() (if successfully dequeuing a USB request) will call the
function driver's completion handler in the same context. Hence, leading
into a deadlock.
Fix this issue by moving the usb_ep_free_request() back to
ffs_user_copy_worker(), and ensuring that it explicitly sets io_data->req
to NULL after freeing it within the ffs->eps_lock. This resolves the race
condition above, as the ffs_aio_cancel() routine will not continue
attempting to dequeue a request that has already been freed, or the
ffs_user_copy_work() not freeing the USB request until the AIO cancel is
done referencing it.
This fix depends on
commit b566d38857fc ("usb: gadget: f_fs: use io_data->status
consistently")
Fixes: 2e4c7553cd6f ("usb: gadget: f_fs: add aio support")
Cc: stable <stable(a)kernel.org> # b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently")
Signed-off-by: Wesley Cheng <quic_wcheng(a)quicinc.com>
Link: https://lore.kernel.org/r/20240409014059.6740-1-quic_wcheng@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Yuan Can <yuancan(a)huawei.com>
---
drivers/usb/gadget/function/f_fs.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index bb0d92837f67..f98a6010fa50 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -822,6 +822,7 @@ static void ffs_user_copy_worker(struct work_struct *work)
int ret = io_data->req->status ? io_data->req->status :
io_data->req->actual;
bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD;
+ unsigned long flags;
if (io_data->read && ret > 0) {
kthread_use_mm(io_data->mm);
@@ -834,7 +835,10 @@ static void ffs_user_copy_worker(struct work_struct *work)
if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd)
eventfd_signal(io_data->ffs->ffs_eventfd, 1);
+ spin_lock_irqsave(&io_data->ffs->eps_lock, flags);
usb_ep_free_request(io_data->ep, io_data->req);
+ io_data->req = NULL;
+ spin_unlock_irqrestore(&io_data->ffs->eps_lock, flags);
if (io_data->read)
kfree(io_data->to_free);
--
2.17.1
2
1
26 Sep '24
From: Sukrut Bellary <sukrut.bellary(a)linux.com>
stable inclusion
from stable-v6.10.10
commit bfc1704d909dc9911a558b1a5833d3d61a43a1f2
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IATRLJ
CVE: CVE-2024-46741
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
commit e8c276d4dc0e19ee48385f74426aebc855b49aaf upstream.
smatch warning:
drivers/misc/fastrpc.c:1926 fastrpc_req_mmap() error: double free of 'buf'
In fastrpc_req_mmap() error path, the fastrpc buffer is freed in
fastrpc_req_munmap_impl() if unmap is successful.
But in the end, there is an unconditional call to fastrpc_buf_free().
So the above case triggers the double free of fastrpc buf.
Fixes: 72fa6f7820c4 ("misc: fastrpc: Rework fastrpc_req_munmap")
Reviewed-by: Shuah Khan <skhan(a)linuxfoundation.org>
Reviewed-by: Dan Carpenter <dan.carpenter(a)linaro.org>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla(a)linaro.org>
Signed-off-by: Sukrut Bellary <sukrut.bellary(a)linux.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla(a)linaro.org>
Cc: stable <stable(a)kernel.org>
Link: https://lore.kernel.org/r/20240902141409.70371-2-srinivas.kandagatla@linaro…
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Xiaomeng Zhang <zhangxiaomeng13(a)huawei.com>
---
drivers/misc/fastrpc.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c
index bbcbc921f3ab..8be1504baf53 100644
--- a/drivers/misc/fastrpc.c
+++ b/drivers/misc/fastrpc.c
@@ -1912,7 +1912,8 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp)
&args[0]);
if (err) {
dev_err(dev, "mmap error (len 0x%08llx)\n", buf->size);
- goto err_invoke;
+ fastrpc_buf_free(buf);
+ return err;
}
/* update the buffer to be able to deallocate the memory on the DSP */
@@ -1950,8 +1951,6 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp)
err_assign:
fastrpc_req_munmap_impl(fl, buf);
-err_invoke:
- fastrpc_buf_free(buf);
return err;
}
--
2.34.1
2
1
[PATCH openEuler-22.03-LTS-SP1] bcache: fix variable length array abuse in btree_iter
by Yuan Can 26 Sep '24
by Yuan Can 26 Sep '24
26 Sep '24
From: Matthew Mirvish <matthew(a)mm12.xyz>
stable inclusion
from stable-v5.10.221
commit 2c3d7b03b658dc8bfa6112b194b67b92a87e081b
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAB04K
CVE: CVE-2024-39482
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
commit 3a861560ccb35f2a4f0a4b8207fa7c2a35fc7f31 upstream.
btree_iter is used in two ways: either allocated on the stack with a
fixed size MAX_BSETS, or from a mempool with a dynamic size based on the
specific cache set. Previously, the struct had a fixed-length array of
size MAX_BSETS which was indexed out-of-bounds for the dynamically-sized
iterators, which causes UBSAN to complain.
This patch uses the same approach as in bcachefs's sort_iter and splits
the iterator into a btree_iter with a flexible array member and a
btree_iter_stack which embeds a btree_iter as well as a fixed-length
data array.
Cc: stable(a)vger.kernel.org
Closes: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2039368
Signed-off-by: Matthew Mirvish <matthew(a)mm12.xyz>
Signed-off-by: Coly Li <colyli(a)suse.de>
Link: https://lore.kernel.org/r/20240509011117.2697-3-colyli@suse.de
Signed-off-by: Jens Axboe <axboe(a)kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Yuan Can <yuancan(a)huawei.com>
---
drivers/md/bcache/bset.c | 44 +++++++++++++++++------------------
drivers/md/bcache/bset.h | 28 ++++++++++++++--------
drivers/md/bcache/btree.c | 40 ++++++++++++++++---------------
drivers/md/bcache/super.c | 5 ++--
drivers/md/bcache/sysfs.c | 2 +-
drivers/md/bcache/writeback.c | 10 ++++----
6 files changed, 70 insertions(+), 59 deletions(-)
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 94d38e8a59b3..cb544207427b 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -54,7 +54,7 @@ void bch_dump_bucket(struct btree_keys *b)
int __bch_count_data(struct btree_keys *b)
{
unsigned int ret = 0;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k;
if (b->ops->is_extents)
@@ -67,7 +67,7 @@ void __bch_check_keys(struct btree_keys *b, const char *fmt, ...)
{
va_list args;
struct bkey *k, *p = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
const char *err;
for_each_key(b, k, &iter) {
@@ -879,7 +879,7 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k,
unsigned int status = BTREE_INSERT_STATUS_NO_INSERT;
struct bset *i = bset_tree_last(b)->data;
struct bkey *m, *prev = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey preceding_key_on_stack = ZERO_KEY;
struct bkey *preceding_key_p = &preceding_key_on_stack;
@@ -895,9 +895,9 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k,
else
preceding_key(k, &preceding_key_p);
- m = bch_btree_iter_init(b, &iter, preceding_key_p);
+ m = bch_btree_iter_stack_init(b, &iter, preceding_key_p);
- if (b->ops->insert_fixup(b, k, &iter, replace_key))
+ if (b->ops->insert_fixup(b, k, &iter.iter, replace_key))
return status;
status = BTREE_INSERT_STATUS_INSERT;
@@ -1100,33 +1100,33 @@ void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k,
btree_iter_cmp));
}
-static struct bkey *__bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
- struct bkey *search,
- struct bset_tree *start)
+static struct bkey *__bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
+ struct bkey *search,
+ struct bset_tree *start)
{
struct bkey *ret = NULL;
- iter->size = ARRAY_SIZE(iter->data);
- iter->used = 0;
+ iter->iter.size = ARRAY_SIZE(iter->stack_data);
+ iter->iter.used = 0;
#ifdef CONFIG_BCACHE_DEBUG
- iter->b = b;
+ iter->iter.b = b;
#endif
for (; start <= bset_tree_last(b); start++) {
ret = bch_bset_search(b, start, search);
- bch_btree_iter_push(iter, ret, bset_bkey_last(start->data));
+ bch_btree_iter_push(&iter->iter, ret, bset_bkey_last(start->data));
}
return ret;
}
-struct bkey *bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
+struct bkey *bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
struct bkey *search)
{
- return __bch_btree_iter_init(b, iter, search, b->set);
+ return __bch_btree_iter_stack_init(b, iter, search, b->set);
}
static inline struct bkey *__bch_btree_iter_next(struct btree_iter *iter,
@@ -1293,10 +1293,10 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start,
struct bset_sort_state *state)
{
size_t order = b->page_order, keys = 0;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
int oldsize = bch_count_data(b);
- __bch_btree_iter_init(b, &iter, NULL, &b->set[start]);
+ __bch_btree_iter_stack_init(b, &iter, NULL, &b->set[start]);
if (start) {
unsigned int i;
@@ -1307,7 +1307,7 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start,
order = get_order(__set_bytes(b->set->data, keys));
}
- __btree_sort(b, &iter, start, order, false, state);
+ __btree_sort(b, &iter.iter, start, order, false, state);
EBUG_ON(oldsize >= 0 && bch_count_data(b) != oldsize);
}
@@ -1323,11 +1323,11 @@ void bch_btree_sort_into(struct btree_keys *b, struct btree_keys *new,
struct bset_sort_state *state)
{
uint64_t start_time = local_clock();
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(b, &iter, NULL);
+ bch_btree_iter_stack_init(b, &iter, NULL);
- btree_mergesort(b, new->set->data, &iter, false, true);
+ btree_mergesort(b, new->set->data, &iter.iter, false, true);
bch_time_stats_update(&state->time, start_time);
diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h
index d795c84246b0..011f6062c4c0 100644
--- a/drivers/md/bcache/bset.h
+++ b/drivers/md/bcache/bset.h
@@ -321,7 +321,14 @@ struct btree_iter {
#endif
struct btree_iter_set {
struct bkey *k, *end;
- } data[MAX_BSETS];
+ } data[];
+};
+
+/* Fixed-size btree_iter that can be allocated on the stack */
+
+struct btree_iter_stack {
+ struct btree_iter iter;
+ struct btree_iter_set stack_data[MAX_BSETS];
};
typedef bool (*ptr_filter_fn)(struct btree_keys *b, const struct bkey *k);
@@ -333,9 +340,9 @@ struct bkey *bch_btree_iter_next_filter(struct btree_iter *iter,
void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k,
struct bkey *end);
-struct bkey *bch_btree_iter_init(struct btree_keys *b,
- struct btree_iter *iter,
- struct bkey *search);
+struct bkey *bch_btree_iter_stack_init(struct btree_keys *b,
+ struct btree_iter_stack *iter,
+ struct bkey *search);
struct bkey *__bch_bset_search(struct btree_keys *b, struct bset_tree *t,
const struct bkey *search);
@@ -350,13 +357,14 @@ static inline struct bkey *bch_bset_search(struct btree_keys *b,
return search ? __bch_bset_search(b, t, search) : t->data->start;
}
-#define for_each_key_filter(b, k, iter, filter) \
- for (bch_btree_iter_init((b), (iter), NULL); \
- ((k) = bch_btree_iter_next_filter((iter), (b), filter));)
+#define for_each_key_filter(b, k, stack_iter, filter) \
+ for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \
+ ((k) = bch_btree_iter_next_filter(&((stack_iter)->iter), (b), \
+ filter));)
-#define for_each_key(b, k, iter) \
- for (bch_btree_iter_init((b), (iter), NULL); \
- ((k) = bch_btree_iter_next(iter));)
+#define for_each_key(b, k, stack_iter) \
+ for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \
+ ((k) = bch_btree_iter_next(&((stack_iter)->iter)));)
/* Sorting */
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 98daa9d200f7..da24a3ca69e5 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -1274,7 +1274,7 @@ static bool btree_gc_mark_node(struct btree *b, struct gc_stat *gc)
uint8_t stale = 0;
unsigned int keys = 0, good_keys = 0;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bset_tree *t;
gc->nodes++;
@@ -1533,7 +1533,7 @@ static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op,
static unsigned int btree_gc_count_keys(struct btree *b)
{
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
unsigned int ret = 0;
for_each_key_filter(&b->keys, k, &iter, bch_ptr_bad)
@@ -1574,17 +1574,18 @@ static int btree_gc_recurse(struct btree *b, struct btree_op *op,
int ret = 0;
bool should_rewrite;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct gc_merge_info r[GC_MERGE_NODES];
struct gc_merge_info *i, *last = r + ARRAY_SIZE(r) - 1;
- bch_btree_iter_init(&b->keys, &iter, &b->c->gc_done);
+ bch_btree_iter_stack_init(&b->keys, &iter, &b->c->gc_done);
for (i = r; i < r + ARRAY_SIZE(r); i++)
i->b = ERR_PTR(-EINTR);
while (1) {
- k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad);
+ k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
+ bch_ptr_bad);
if (k) {
r->b = bch_btree_node_get(b->c, op, k, b->level - 1,
true, b);
@@ -1874,7 +1875,7 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op)
{
int ret = 0;
struct bkey *k, *p = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
for_each_key_filter(&b->keys, k, &iter, bch_ptr_invalid)
bch_initial_mark_key(b->c, b->level, k);
@@ -1882,10 +1883,10 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op)
bch_initial_mark_key(b->c, b->level + 1, &b->key);
if (b->level) {
- bch_btree_iter_init(&b->keys, &iter, NULL);
+ bch_btree_iter_stack_init(&b->keys, &iter, NULL);
do {
- k = bch_btree_iter_next_filter(&iter, &b->keys,
+ k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
bch_ptr_bad);
if (k) {
btree_node_prefetch(b, k);
@@ -1913,7 +1914,7 @@ static int bch_btree_check_thread(void *arg)
struct btree_check_info *info = arg;
struct btree_check_state *check_state = info->state;
struct cache_set *c = check_state->c;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k, *p;
int cur_idx, prev_idx, skip_nr;
@@ -1922,8 +1923,8 @@ static int bch_btree_check_thread(void *arg)
ret = 0;
/* root node keys are checked before thread created */
- bch_btree_iter_init(&c->root->keys, &iter, NULL);
- k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad);
+ bch_btree_iter_stack_init(&c->root->keys, &iter, NULL);
+ k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad);
BUG_ON(!k);
p = k;
@@ -1941,7 +1942,7 @@ static int bch_btree_check_thread(void *arg)
skip_nr = cur_idx - prev_idx;
while (skip_nr) {
- k = bch_btree_iter_next_filter(&iter,
+ k = bch_btree_iter_next_filter(&iter.iter,
&c->root->keys,
bch_ptr_bad);
if (k)
@@ -2005,7 +2006,7 @@ int bch_btree_check(struct cache_set *c)
int ret = 0;
int i;
struct bkey *k = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct btree_check_state check_state;
/* check and mark root node keys */
@@ -2501,11 +2502,11 @@ static int bch_btree_map_nodes_recurse(struct btree *b, struct btree_op *op,
if (b->level) {
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(&b->keys, &iter, from);
+ bch_btree_iter_stack_init(&b->keys, &iter, from);
- while ((k = bch_btree_iter_next_filter(&iter, &b->keys,
+ while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
bch_ptr_bad))) {
ret = bcache_btree(map_nodes_recurse, k, b,
op, from, fn, flags);
@@ -2534,11 +2535,12 @@ int bch_btree_map_keys_recurse(struct btree *b, struct btree_op *op,
{
int ret = MAP_CONTINUE;
struct bkey *k;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
- bch_btree_iter_init(&b->keys, &iter, from);
+ bch_btree_iter_stack_init(&b->keys, &iter, from);
- while ((k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad))) {
+ while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys,
+ bch_ptr_bad))) {
ret = !b->level
? fn(op, b, k)
: bcache_btree(map_keys_recurse, k,
diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index b5601f200c09..c778862f4f33 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1928,8 +1928,9 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
INIT_LIST_HEAD(&c->btree_cache_freed);
INIT_LIST_HEAD(&c->data_buckets);
- iter_size = ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size + 1) *
- sizeof(struct btree_iter_set);
+ iter_size = sizeof(struct btree_iter) +
+ ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size) *
+ sizeof(struct btree_iter_set);
c->devices = kcalloc(c->nr_uuids, sizeof(void *), GFP_KERNEL);
if (!c->devices)
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index 8467e37411a7..84b8e9e90ee6 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -660,7 +660,7 @@ static unsigned int bch_root_usage(struct cache_set *c)
unsigned int bytes = 0;
struct bkey *k;
struct btree *b;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
goto lock_root;
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 83dcdd85abc0..9502cc9b0c80 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -899,15 +899,15 @@ static int bch_dirty_init_thread(void *arg)
struct dirty_init_thrd_info *info = arg;
struct bch_dirty_init_state *state = info->state;
struct cache_set *c = state->c;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct bkey *k, *p;
int cur_idx, prev_idx, skip_nr;
k = p = NULL;
cur_idx = prev_idx = 0;
- bch_btree_iter_init(&c->root->keys, &iter, NULL);
- k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad);
+ bch_btree_iter_stack_init(&c->root->keys, &iter, NULL);
+ k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad);
BUG_ON(!k);
p = k;
@@ -921,7 +921,7 @@ static int bch_dirty_init_thread(void *arg)
skip_nr = cur_idx - prev_idx;
while (skip_nr) {
- k = bch_btree_iter_next_filter(&iter,
+ k = bch_btree_iter_next_filter(&iter.iter,
&c->root->keys,
bch_ptr_bad);
if (k)
@@ -969,7 +969,7 @@ void bch_sectors_dirty_init(struct bcache_device *d)
{
int i;
struct bkey *k = NULL;
- struct btree_iter iter;
+ struct btree_iter_stack iter;
struct sectors_dirty_init op;
struct cache_set *c = d->c;
struct bch_dirty_init_state state;
--
2.17.1
2
1