On Tue, 9 Nov 2021 11:08:44 -0800 Beau Belgrave <beaub@xxxxxxxxxxxxxxxxxxx> wrote: > We need strings to be able to be emitted and recorded in eBPF, perf and > ftrace. So I would rather go after a solution that lets us keep these in > the ring buffers, even if it means a perf hit. > > Guess what's left is to where the best place to check is, checking in > the filter with unsafe flags would let us keep most of the perf (we just > check the undersize case, 1 branch). When these unsafe types are > filtered then a perf tax is imposed to keep things safe. > > It sounded like Steven wanted to think about this a bit, so I'll wait a > bit before poking again for consensus :) > > Do you have any strong feelings about where it goes? IIUC, the writing into the trace event is done via one big blob, correct? That is this: + if (likely(atomic_read(&tp->key.enabled) > 0)) { + struct tracepoint_func *probe_func_ptr; + user_event_func_t probe_func; + void *tpdata; + void *kdata; + u32 datalen; + + kdata = kmalloc(i->count, GFP_KERNEL); + + if (unlikely(!kdata)) + return -ENOMEM; + + datalen = copy_from_iter(kdata, i->count, i); + + rcu_read_lock_sched(); + + probe_func_ptr = rcu_dereference_sched(tp->funcs); + + if (probe_func_ptr) { + do { + probe_func = probe_func_ptr->func; + tpdata = probe_func_ptr->data; + probe_func(user, kdata, datalen, tpdata); + } while ((++probe_func_ptr)->func); + } + + rcu_read_unlock_sched(); + + kfree(kdata); So we really are just interested in making sure that the output is correct? That is, the reading of the trace file? -- Steve