On Mon, May 09, 2022 at 03:42:54PM -0700, Joanne Koong wrote: > Currently, our only way of writing dynamically-sized data into a ring > buffer is through bpf_ringbuf_output but this incurs an extra memcpy > cost. bpf_ringbuf_reserve + bpf_ringbuf_commit avoids this extra > memcpy, but it can only safely support reservation sizes that are > statically known since the verifier cannot guarantee that the bpf > program won’t access memory outside the reserved space. > > The bpf_dynptr abstraction allows for dynamically-sized ring buffer > reservations without the extra memcpy. > > There are 3 new APIs: > > long bpf_ringbuf_reserve_dynptr(void *ringbuf, u32 size, u64 flags, struct bpf_dynptr *ptr); > void bpf_ringbuf_submit_dynptr(struct bpf_dynptr *ptr, u64 flags); > void bpf_ringbuf_discard_dynptr(struct bpf_dynptr *ptr, u64 flags); > > These closely follow the functionalities of the original ringbuf APIs. > For example, all ringbuffer dynptrs that have been reserved must be > either submitted or discarded before the program exits. > > Signed-off-by: Joanne Koong <joannelkoong@xxxxxxxxx> Looks good! Acked-by: David Vernet <void@xxxxxxxxxxxxx>