On Fri, Nov 05, 2021 at 06:24:30PM +0100, Thomas Gleixner wrote: > On Fri, Nov 05 2021 at 21:03, Dmitrii Banshchikov wrote: > > On Fri, Nov 05, 2021 at 08:53:06AM -0700, Alexei Starovoitov wrote: > >> > Timestamps from within a tracepoint can only be taken with: > >> > > >> > 1) jiffies > >> > 2) sched_clock() > >> > 3) ktime_get_*_fast_ns() > >> > > >> > Those are NMI safe and can be invoked from anywhere. > >> > > >> > All other time getters which have to use the timekeeping seqcount > >> > protection are prone to live locks and _cannot_ be used from > >> > tracepoints ever. > >> > >> Obviously. > >> That helper was added for networking use cases and accidentally > >> enabled for tracing. > > > > Sorry for that. > > I'm preparing a patch that will forbid using bpf_ktime_get_coarse_ns() > > helper in BPF_LINK_TYPE_RAW_TRACEPOINT. > > It cannot be used in TRACING and PERF_EVENT either. But those contexts > have to exclude other functions as well: > > bpf_ktime_get_ns > bpf_ktime_get_boot_ns > > along with > > bpf_spin_lock/unlock > bpf_timer_* 1) bpf_ktime_get_ns and bpf_ktime_get_boot_ns use ktime_get_{mono,boot}_fast_ns. 2) bpf_spin_lock/unlock have notrace attribute set. 3) bpf_timer_* helpers fail early if they are in NMI. Why they have to be excluded? -- Dmitrii Banshchikov