On Mon, Oct 7, 2024 at 3:16 PM David Wei <dw@xxxxxxxxxxx> wrote: > > From: David Wei <davidhwei@xxxxxxxx> > > Add io_zcrx_area that represents a region of userspace memory that is > used for zero copy. During ifq registration, userspace passes in the > uaddr and len of userspace memory, which is then pinned by the kernel. > Each net_iov is mapped to one of these pages. > > The freelist is a spinlock protected list that keeps track of all the > net_iovs/pages that aren't used. > > For now, there is only one area per ifq and area registration happens > implicitly as part of ifq registration. There is no API for > adding/removing areas yet. The struct for area registration is there for > future extensibility once we support multiple areas and TCP devmem. > > Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> > Signed-off-by: David Wei <dw@xxxxxxxxxxx> This patch, and the later patch to add the io_uring memory provider are what I was referring to in the other thread as changes I would like to reuse for a socket extension for this. In my mind it would be nice to decouple the memory being bound to the page_pool from io_uring, so I can bind a malloced/pinned block of memory to the rx queue and use it with regular sockets. Seems a lot of this patch and the provider can be reused. The biggest issue AFAICT I see is that there are io_uring specific calls to set up the region like io_buffer_validate/io_pin_pages, but these in turn seem to call generic mm helpers and from a quick look I don't see much iouring specific. Seems fine to leave this to a future extension. -- Thanks, Mina