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