Thread (11 messages) 11 messages, 2 authors, 12d ago

Re: [PATCH net-next v2 3/3] net: devmem: batch net_iov allocations into the page_pool cache

From: Mina Almasry <hidden>
Date: 2026-09-14 21:58:14
Also in: lkml

On Fri, Sep 11, 2026 at 8:46 AM Stanislav Fomichev [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Rename net_devmem_alloc_dmabuf() into net_devmem_alloc_dmabuf_bulk() and
make it refill page pool with up to PP_ALLOC_CACHE_REFILL NIOVs,
similar to io_pp_zc_alloc_netmems(). That should amortize recently
introduced freelist_lock.

Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
---
 net/core/devmem.c | 59 +++++++++++++++++++++++++++++------------------
 net/core/devmem.h |  8 -------
 2 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/net/core/devmem.c b/net/core/devmem.c
index 7949f8425bcd..a0dcc896dd12 100644
--- a/net/core/devmem.c
+++ b/net/core/devmem.c
@@ -58,25 +58,25 @@ void __net_devmem_dmabuf_binding_free(struct work_struct *wq)
        kfree(binding);
 }

-struct net_iov *
-net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding)
+static unsigned int
+net_devmem_alloc_dmabuf_bulk(struct net_devmem_dmabuf_binding *binding,
+                            netmem_ref *netmems, unsigned int count)
 {
-       struct net_iov *niov;
+       unsigned int i;
+
        spin_lock_bh(&binding->freelist_lock);
-       if (unlikely(!binding->free_count)) {
-               spin_unlock_bh(&binding->freelist_lock);
-               return NULL;
+
+       count = min_t(size_t, count, binding->free_count);
+       for (i = 0; i < count; i++) {
+               struct net_iov *niov = binding->freelist[--binding->free_count];
+
+               binding->freelist[binding->free_count] = NULL;
Nulling is probably unnecessary?

Reviewed-by: Mina Almasry <redacted>


-- 
Thanks,
Mina
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help