CC perf folks

On Fri, 4 May 2018 14:25:03 -0700, Alexei Starovoitov wrote:
> > +static void
> > +perf_event_read(struct event_ring_info *ring, void **buf, size_t *buf_len)
> > +{
> > +   volatile struct perf_event_mmap_page *header = ring->mem;
> > +   __u64 buffer_size = MMAP_PAGE_CNT * get_page_size();
> > +   __u64 data_tail = header->data_tail;
> > +   __u64 data_head = header->data_head;
> > +   void *base, *begin, *end;
> > +
> > +   asm volatile("" ::: "memory"); /* in real code it should be smp_rmb() */
> > +   if (data_head == data_tail)
> > +           return;  
> 
> this function was copied several times into different places.
> I think it's time to put into common lib. Like libbpf.

Agreed, I think libbpf would work, although there is nothing BPF
specific in this loop AFAICT now.

> Would be great if you can do it in the follow up.

Looking into it now, I found these:

$ git grep 'data_head == data_tail'
tools/bpf/bpftool/map_perf_ring.c:      if (data_head == data_tail)
tools/testing/selftests/bpf/trace_helpers.c:    if (data_head == data_tail)

Are there any other copies I should try to cater to?  I have change a few
things compared to the selftest, I guess others may have modified their
copy too.  Just trying to make sure what we put in libbpf would cater
to most possible use cases.

Should I also move bpf_perf_event_open()/test_bpf_perf_event() to libbpf?

> for the set:
> Acked-by: Alexei Starovoitov <a...@kernel.org>

Thanks!

Reply via email to