On Wed, Mar 6, 2024 at 6:59 AM Pavel Begunkov <asml.silence@xxxxxxxxx> wrote: > > On 3/6/24 02:42, Mina Almasry wrote: > > On Tue, Mar 5, 2024 at 6:28 PM David Wei <dw@xxxxxxxxxxx> wrote: > >> > >> On 2024-03-04 18:01, Mina Almasry wrote: > >>> + if (pool->p.queue) > >>> + binding = READ_ONCE(pool->p.queue->binding); > >>> + > >>> + if (binding) { > >>> + pool->mp_ops = &dmabuf_devmem_ops; > >>> + pool->mp_priv = binding; > >>> + } > >> > >> This is specific to TCP devmem. For ZC Rx we will need something more > >> generic to let us pass our own memory provider backend down to the page > >> pool. > >> > >> What about storing ops and priv void ptr in struct netdev_rx_queue > >> instead? Then we can both use it. > > > > Yes, this is dmabuf specific, I was thinking you'd define your own > > member of netdev_rx_queue, and then add something like this to > > page_pool_init: > > That would be quite annoying, there are 3 expected users together > with huge pages, each would need a field and check all others are > disabled as you mentioned and so on. It should be cleaner to pass > a generic {pp_ops,pp_private} pair instead. > > If header dependencies is a problem, you it can probably be > > struct pp_provider_param { > struct pp_ops ops; > void *private; > }; > > # netdev_rx_queue.h > > // definition is not included here > struct pp_provider_params; > > struct netdev_rx_queue { > ... > struct pp_provider_params *pp_params; > }; > Seems very reasonable, will do! Thanks! > -- > Pavel Begunkov -- Thanks, Mina