Thread (16 messages) 16 messages, 2 authors, 2025-10-29

Re: [PATCH net-next v5 4/4] net: add per-netns sysctl for devmem autorelease

From: Mina Almasry <hidden>
Date: 2025-10-28 01:22:46
Also in: lkml

On Thu, Oct 23, 2025 at 2:00 PM Bobby Eshleman [off-list ref] wrote:
From: Bobby Eshleman <redacted>

Add a new per-namespace sysctl to control the autorelease
behavior of devmem dmabuf bindings. The sysctl is found at:
/proc/sys/net/core/devmem_autorelease

When a binding is created, it inherits the autorelease setting from the
network namespace of the device to which it's being bound.

If autorelease is enabled (1):
- Tokens are stored in socket's xarray
- Tokens are automatically released when socket is closed

If autorelease is disabled (0):
- Tokens are tracked via uref counter in each net_iov
- User must manually release tokens via SO_DEVMEM_DONTNEED
- Lingering tokens are released when dmabuf is unbound
- This is the new default behavior for better performance
Maybe quote the significant better performance in the docs and commit message.
quoted hunk ↗ jump to hunk
This allows application developers to choose between automatic cleanup
(easier, backwards compatible) and manual control (more explicit token
management, but more performant).

Changes the default to autorelease=0, so that users gain the performance
benefit by default.

Signed-off-by: Bobby Eshleman <redacted>
---
 include/net/netns/core.h   | 1 +
 net/core/devmem.c          | 2 +-
 net/core/net_namespace.c   | 1 +
 net/core/sysctl_net_core.c | 9 +++++++++
 4 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/include/net/netns/core.h b/include/net/netns/core.h
index 9ef3d70e5e9c..7af5ab0d757b 100644
--- a/include/net/netns/core.h
+++ b/include/net/netns/core.h
@@ -18,6 +18,7 @@ struct netns_core {
        u8      sysctl_txrehash;
        u8      sysctl_tstamp_allow_data;
        u8      sysctl_bypass_prot_mem;
+       u8      sysctl_devmem_autorelease;

 #ifdef CONFIG_PROC_FS
        struct prot_inuse __percpu *prot_inuse;
diff --git a/net/core/devmem.c b/net/core/devmem.c
index 8f3199fe0f7b..9cd6d93676f9 100644
--- a/net/core/devmem.c
+++ b/net/core/devmem.c
@@ -331,7 +331,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
                goto err_free_chunks;

        list_add(&binding->list, &priv->bindings);
-       binding->autorelease = true;
+       binding->autorelease = dev_net(dev)->core.sysctl_devmem_autorelease;
Do you need to READ_ONCE this and WRITE_ONCE the write site? Or is
that silly for a u8? Maybe better be safe.

Could we not make this an optional netlink argument? I thought that
was a bit nicer than a sysctl.

Needs a doc update.


-- 
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