On 6/17/19 5:18 PM, Steven Rostedt wrote: > On Mon, 17 Jun 2019 16:27:33 -0700 > Alexei Starovoitov <alexei.starovoi...@gmail.com> wrote: > >> On Mon, Jun 17, 2019 at 4:13 PM Matt Mullins <mmull...@fb.com> wrote: >>>> >>>> The bug (really just a warning) reported is exactly here. >>> >>> I don't think bpf_send_signal is tied to modules at all; >>> send_signal_irq_work_init and the corresponding initcall should be >>> moved outside that #ifdef. >> >> right. I guess send_signal_irq_work_init was accidentally placed >> after bpf_event_init and happened to be within that ifdef. >> Should definitely be outside. > > So Arnd did find a bug. Just the wrong solution ;-) > > -- Steve
Hi, Arnd, The following change can fix the issue. diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index c102c240bb0b..ca1255d14576 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1431,6 +1431,20 @@ int bpf_get_perf_event_info(const struct perf_event *event, u32 *prog_id, return err; } +static int __init send_signal_irq_work_init(void) +{ + int cpu; + struct send_signal_irq_work *work; + + for_each_possible_cpu(cpu) { + work = per_cpu_ptr(&send_signal_work, cpu); + init_irq_work(&work->irq_work, do_bpf_send_signal); + } + return 0; +} + +subsys_initcall(send_signal_irq_work_init); + #ifdef CONFIG_MODULES static int bpf_event_notify(struct notifier_block *nb, unsigned long op, void *module) @@ -1478,18 +1492,5 @@ static int __init bpf_event_init(void) return 0; } -static int __init send_signal_irq_work_init(void) -{ - int cpu; - struct send_signal_irq_work *work; - - for_each_possible_cpu(cpu) { - work = per_cpu_ptr(&send_signal_work, cpu); - init_irq_work(&work->irq_work, do_bpf_send_signal); - } - return 0; -} - fs_initcall(bpf_event_init); -subsys_initcall(send_signal_irq_work_init); #endif /* CONFIG_MODULES */ Could you submit a new revision? Thanks! Yonghong