libbpf: Expose libbpf ring_buffer epoll_fd
authorBrendan Jackman <jackmanb@google.com>
Mon, 14 Dec 2020 11:38:12 +0000 (11:38 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Mon, 14 Dec 2020 18:04:55 +0000 (10:04 -0800)
This provides a convenient perf ringbuf -> libbpf ringbuf migration
path for users of external polling systems. It is analogous to
perf_buffer__epoll_fd.

Signed-off-by: Brendan Jackman <jackmanb@google.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20201214113812.305274-1-jackmanb@google.com
tools/lib/bpf/libbpf.h
tools/lib/bpf/libbpf.map
tools/lib/bpf/ringbuf.c

index 6909ee8..3c35eb4 100644 (file)
@@ -536,6 +536,7 @@ LIBBPF_API int ring_buffer__add(struct ring_buffer *rb, int map_fd,
                                ring_buffer_sample_fn sample_cb, void *ctx);
 LIBBPF_API int ring_buffer__poll(struct ring_buffer *rb, int timeout_ms);
 LIBBPF_API int ring_buffer__consume(struct ring_buffer *rb);
+LIBBPF_API int ring_buffer__epoll_fd(const struct ring_buffer *rb);
 
 /* Perf buffer APIs */
 struct perf_buffer;
index 7c41265..1c0fd2d 100644 (file)
@@ -346,6 +346,7 @@ LIBBPF_0.3.0 {
                btf__parse_split;
                btf__new_empty_split;
                btf__new_split;
+               ring_buffer__epoll_fd;
                xsk_setup_xdp_prog;
                xsk_socket__update_xskmap;
 } LIBBPF_0.2.0;
index 5c6522c..a8f997d 100644 (file)
@@ -282,3 +282,9 @@ int ring_buffer__poll(struct ring_buffer *rb, int timeout_ms)
        }
        return cnt < 0 ? -errno : res;
 }
+
+/* Get an fd that can be used to sleep until data is available in the ring(s) */
+int ring_buffer__epoll_fd(const struct ring_buffer *rb)
+{
+       return rb->epoll_fd;
+}