]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
netdev: expose io_uring rx_page_order order via netlink
authorDragos Tatulea <dtatulea@nvidia.com>
Fri, 12 Jun 2026 21:17:03 +0000 (00:17 +0300)
committerJakub Kicinski <kuba@kernel.org>
Mon, 15 Jun 2026 19:58:18 +0000 (12:58 -0700)
This adds observability for the io_uring zcrx rx-buf-len configuration.

Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Yael Chemla <ychemla@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Acked-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://patch.msgid.link/20260612211709.1456966-3-dtatulea@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/netlink/specs/netdev.yaml
include/uapi/linux/netdev.h
io_uring/zcrx.c
tools/include/uapi/linux/netdev.h

index 49862b666d7dabed891d061d6848f2115aad8a5b..5f143da7458cfba382846a1a90a724821634a9a3 100644 (file)
@@ -127,7 +127,14 @@ attribute-sets:
         enum: xsk-flags
   -
     name: io-uring-provider-info
-    attributes: []
+    attributes:
+      -
+        name: rx-buf-len
+        type: uint
+        doc: |
+          RX buffer length in bytes for this io_uring memory provider.
+          Reflects the rx_buf_len passed at io_uring zerocopy rx
+          registration time.
   -
     name: page-pool
     attributes:
index 7df1056a35fdaabaf337852bee51765133e8c32c..2f3ab75e8cc0f65ecbe9ada41ae32fb0c125838b 100644 (file)
@@ -97,6 +97,8 @@ enum {
 };
 
 enum {
+       NETDEV_A_IO_URING_PROVIDER_INFO_RX_BUF_LEN = 1,
+
        __NETDEV_A_IO_URING_PROVIDER_INFO_MAX,
        NETDEV_A_IO_URING_PROVIDER_INFO_MAX = (__NETDEV_A_IO_URING_PROVIDER_INFO_MAX - 1)
 };
index 19837e0b5e9189568b9e08af2f130c19b6307bc5..c7b167c2d4e4c0e035078f925ba7868f2c13ae61 100644 (file)
@@ -1156,6 +1156,7 @@ static void io_pp_zc_destroy(struct page_pool *pp)
 static int io_pp_nl_fill(void *mp_priv, struct sk_buff *rsp,
                         struct netdev_rx_queue *rxq)
 {
+       struct io_zcrx_ifq *ifq = mp_priv;
        struct nlattr *nest;
        int type;
 
@@ -1163,6 +1164,13 @@ static int io_pp_nl_fill(void *mp_priv, struct sk_buff *rsp,
        nest = nla_nest_start(rsp, type);
        if (!nest)
                return -EMSGSIZE;
+
+       if (nla_put_uint(rsp, NETDEV_A_IO_URING_PROVIDER_INFO_RX_BUF_LEN,
+                        1ULL << ifq->niov_shift)) {
+               nla_nest_cancel(rsp, nest);
+               return -EMSGSIZE;
+       }
+
        nla_nest_end(rsp, nest);
 
        return 0;
index 7df1056a35fdaabaf337852bee51765133e8c32c..2f3ab75e8cc0f65ecbe9ada41ae32fb0c125838b 100644 (file)
@@ -97,6 +97,8 @@ enum {
 };
 
 enum {
+       NETDEV_A_IO_URING_PROVIDER_INFO_RX_BUF_LEN = 1,
+
        __NETDEV_A_IO_URING_PROVIDER_INFO_MAX,
        NETDEV_A_IO_URING_PROVIDER_INFO_MAX = (__NETDEV_A_IO_URING_PROVIDER_INFO_MAX - 1)
 };