From nobody Mon Feb 9 13:21:15 2026 Received: from mail-yx1-f67.google.com (mail-yx1-f67.google.com [74.125.224.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D539A34B693 for ; Fri, 16 Jan 2026 05:03:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768539811; cv=none; b=UW8lyjUJiuubu1joBWltkc8YozU2Oy2FSHE96mhFywqYowaLd3wmZ0rC47cv/BLgXzV4pBfKynBTmuA2i1Xqui8uc0a8zdGpJbkuhh2mu1dY7EhVzFad9mzTwGRcDnNimw9e1MHIW+fteGcm7y1eKfChD/sV/RMnfGl9sm6ZP+k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768539811; c=relaxed/simple; bh=s3BhnRo4qYeui2ODW6ff8S6N7tSfK9I74K29oR3s67M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tdO4Ql9MU57T3C+HYyHdDfnIzgswLRQdwAJSOJE7uWZukreICTFXRhgnzhRpUs9tPlptdipiHejoavMtjreIPYmUfz2kNZPOiIk6vvUQ5l+YR83Mory0/uxNMd4/AshHCw4fkpCnr7o1vBDki0e1xIEgI9kFt1h1kZNojDVb7Fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BJvglZt2; arc=none smtp.client-ip=74.125.224.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BJvglZt2" Received: by mail-yx1-f67.google.com with SMTP id 956f58d0204a3-644715aad1aso1949440d50.0 for ; Thu, 15 Jan 2026 21:03:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768539801; x=1769144601; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=K+I56CVp15hcfRzFNLZYMGassuBp58/sVTYq1ymlLks=; b=BJvglZt2EHUWZv3P2Z5dXbAAF5ohuFFr0vlbMVfB/ewM9z6S95XtSXAU5S+hjlaneV w6mNPh2RPODTngH1nCrwsSNqIzeZ/KQMfZc9+jNlrV9Gag06Koqafxzs6V7EB83c65S7 0iXs95woS82onCi+0K70TfBTZ8ngPh0vf5oOzLfA3f26SiuG0UPg1zkX7TvqmvnL8Z9s oUgiQGYSaCkYc2zwzFHkvA3AIvXPHp433pPVg754O7vUElhH3oJiiER6widNMLlwIEy0 Iej+iKBAofWwGA0pR8ky/DzgrFzk++1p3TlOAUsUC2N3/lzrMbfi0CanUZ7H7CWDg1Jh UvqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768539801; x=1769144601; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=K+I56CVp15hcfRzFNLZYMGassuBp58/sVTYq1ymlLks=; b=xGMNYbRU77oPSqAktNcNHocmapYCnsxAfFpTzS22wgQ/1dgJrpXBpWYJA9EllhrcKR u7vvPnjZvZ331+Tr3d4UTeLLyHgMp1QlxDQBfcDhVe1A3wITo+2NKjMqeeWSTFPPmVdY MTt9k9tohvPHJP1dNy4c3+PkMqWHyc09+rUVUsFKj6MK6TiMFDRUMU+rewIWZqFt013b 03Xj6YLOU2aJi6ElNR7jzfwzk3K3Mcmu4mZYWlr87BM9VgSgVo2LAWANCGK4w2XjHWgc Wal59gs76a10adysI2wdYL91LjCW0NsySAR3BFPl5mPdfnZgCgumW4PjuWa2CgA8wnsE tHVA== X-Forwarded-Encrypted: i=1; AJvYcCUbpV9woiN3QN9wXPfWE6gj/ogArQtNjn28bYCLK4zTJ8VDTI9IuIxMllxxujIbVE+cWDd4RRi6Si3aH/8=@vger.kernel.org X-Gm-Message-State: AOJu0YwnxEaS2rTfpsZHUf4SYEdWffYmPmYFEOdAXuEhnSu4buCb9Efn VcS47OJKBadD5OOC9Bez4sWH/T83qE3xPQTDL5dcFAA6hfdVWkIvlH7e X-Gm-Gg: AY/fxX7+ph9P8PNU+WE0slQz8ZqyFbLVumEwAxfeajY0doE0GpqAPwh5xXfb3A+Qls2 vcZB7HZK/YWpmzzarICl45Kt/+DEW+Pej3bZAiko17dAak+bAg1YYNXot/jouJFCGC+BLAEZilS ew2MphdK0Ydd9Kf5PYiJlx7a4aAcBU5+IUQYDXY0duH/Hy1E7KZXuVfs7kVRpXl7EAFeuUnd2sc EhYqzM/YJ8qsMAW1C59NbMwDc/1KIXKvE02UvT7lS/nbemDXcm6d/tNM89e/tVheD1xF765qacW Q+c2PoFL3Z7bZe6t5XjCZ7/neVIhE+YLVEUc8l0ay2nJz853G5eeNvJd5GTo8sVpUMMma5xl2V7 /7Vzq9yKgeSjid8czHeJAeXh2mi1vXbbSfSwAJywT2fPwRGX4qZami4ERMc1P3nhvTQZ+ehNW3i jb9kqimMBS X-Received: by 2002:a53:ac89:0:b0:645:5ac1:8ca with SMTP id 956f58d0204a3-6491691b79amr1489058d50.11.1768539800827; Thu, 15 Jan 2026 21:03:20 -0800 (PST) Received: from localhost ([2a03:2880:25ff:c::]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-649170be5desm713936d50.19.2026.01.15.21.03.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 21:03:20 -0800 (PST) From: Bobby Eshleman Date: Thu, 15 Jan 2026 21:02:15 -0800 Subject: [PATCH net-next v10 4/5] net: devmem: document NETDEV_A_DMABUF_AUTORELEASE netlink attribute Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260115-scratch-bobbyeshleman-devmem-tcp-token-upstream-v10-4-686d0af71978@meta.com> References: <20260115-scratch-bobbyeshleman-devmem-tcp-token-upstream-v10-0-686d0af71978@meta.com> In-Reply-To: <20260115-scratch-bobbyeshleman-devmem-tcp-token-upstream-v10-0-686d0af71978@meta.com> To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , Neal Cardwell , David Ahern , Mina Almasry , Arnd Bergmann , Jonathan Corbet , Andrew Lunn , Shuah Khan , Donald Hunter Cc: Stanislav Fomichev , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, asml.silence@gmail.com, matttbe@kernel.org, skhawaja@google.com, Bobby Eshleman X-Mailer: b4 0.14.3 From: Bobby Eshleman Update devmem.rst documentation to describe the autorelease netlink attribute used during RX dmabuf binding. The autorelease attribute is specified at bind-time via the netlink API (NETDEV_CMD_BIND_RX) and controls what happens to outstanding tokens when the socket closes. Document the two token release modes (automatic vs manual), how to configure the binding for autorelease, the perf benefits, new caveats and restrictions, and the way the mode is enforced system-wide. Signed-off-by: Bobby Eshleman --- Changes in v7: - Document netlink instead of sockopt - Mention system-wide locked to one mode --- Documentation/networking/devmem.rst | 73 +++++++++++++++++++++++++++++++++= ++++ 1 file changed, 73 insertions(+) diff --git a/Documentation/networking/devmem.rst b/Documentation/networking= /devmem.rst index a6cd7236bfbd..f85f1dcc9621 100644 --- a/Documentation/networking/devmem.rst +++ b/Documentation/networking/devmem.rst @@ -235,6 +235,79 @@ can be less than the tokens provided by the user in ca= se of: (a) an internal kernel leak bug. (b) the user passed more than 1024 frags. =20 + +Autorelease Control +~~~~~~~~~~~~~~~~~~~ + +The autorelease mode controls what happens to outstanding tokens (tokens n= ot +released via SO_DEVMEM_DONTNEED) when the socket closes. Autorelease is +configured per-binding at binding creation time via the netlink API:: + + struct netdev_bind_rx_req *req; + struct netdev_bind_rx_rsp *rsp; + struct ynl_sock *ys; + struct ynl_error yerr; + + ys =3D ynl_sock_create(&ynl_netdev_family, &yerr); + + req =3D netdev_bind_rx_req_alloc(); + netdev_bind_rx_req_set_ifindex(req, ifindex); + netdev_bind_rx_req_set_fd(req, dmabuf_fd); + netdev_bind_rx_req_set_autorelease(req, 0); /* 0 =3D manual, 1 =3D auto */ + __netdev_bind_rx_req_set_queues(req, queues, n_queues); + + rsp =3D netdev_bind_rx(ys, req); + + dmabuf_id =3D rsp->id; + +When autorelease is disabled (0): + +- Outstanding tokens are NOT released when the socket closes +- Outstanding tokens are only released when all RX queues are unbound AND = all + sockets that called recvmsg() are closed +- Provides better performance by eliminating xarray overhead (~13% CPU red= uction) +- Kernel tracks tokens via atomic reference counters in net_iov structures + +When autorelease is enabled (1): + +- Outstanding tokens are automatically released when the socket closes +- Backwards compatible behavior +- Kernel tracks tokens in an xarray per socket + +The default is autorelease disabled. + +Important: In both modes, applications should call SO_DEVMEM_DONTNEED to +return tokens as soon as they are done processing. The autorelease setting= only +affects what happens to tokens that are still outstanding when close() is = called. + +The mode is enforced system-wide. Once a binding is created with a specific +autorelease mode, all subsequent bindings system-wide must use the same mo= de. + + +Performance Considerations +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Disabling autorelease provides approximately ~13% CPU utilization improvem= ent +in RX workloads. That said, applications must ensure all tokens are releas= ed +via SO_DEVMEM_DONTNEED before closing the socket, otherwise the backing pa= ges +will remain pinned until all RX queues are unbound AND all sockets that ca= lled +recvmsg() are closed. + + +Caveats +~~~~~~~ + +- Once a system-wide autorelease mode is selected (via the first binding), + all subsequent bindings must use the same mode. Attempts to create bindi= ngs + with a different mode will be rejected with -EBUSY. + +- Applications using manual release mode (autorelease=3D0) must ensure all= tokens + are returned via SO_DEVMEM_DONTNEED before socket close to avoid resource + leaks during the lifetime of the dmabuf binding. Tokens not released bef= ore + close() will only be freed when all RX queues are unbound AND all sockets + that called recvmsg() are closed. + + TX Interface =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.47.3