]> www.infradead.org Git - linux.git/commitdiff
netdev: add dmabuf introspection
authorMina Almasry <almasrymina@google.com>
Tue, 10 Sep 2024 17:14:57 +0000 (17:14 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Sep 2024 03:44:32 +0000 (20:44 -0700)
Add dmabuf information to page_pool stats:

$ ./cli.py --spec ../netlink/specs/netdev.yaml --dump page-pool-get
...
 {'dmabuf': 10,
  'id': 456,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 455,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 454,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 453,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 452,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 451,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 450,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},
 {'dmabuf': 10,
  'id': 449,
  'ifindex': 3,
  'inflight': 1023,
  'inflight-mem': 4190208},

And queue stats:

$ ./cli.py --spec ../netlink/specs/netdev.yaml --dump queue-get
...
{'dmabuf': 10, 'id': 8, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 9, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 10, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 11, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 12, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 13, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 14, 'ifindex': 3, 'type': 'rx'},
{'dmabuf': 10, 'id': 15, 'ifindex': 3, 'type': 'rx'},

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Mina Almasry <almasrymina@google.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Link: https://patch.msgid.link/20240910171458.219195-14-almasrymina@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/netlink/specs/netdev.yaml
include/uapi/linux/netdev.h
net/core/netdev-genl.c
net/core/page_pool_user.c
tools/include/uapi/linux/netdev.h

index 0c747530c275e91ced0da69335cc3b814c0bae7e..08412c279297bfbb212b78bc15cd29cc6c435d2a 100644 (file)
@@ -167,6 +167,10 @@ attribute-sets:
           "re-attached", they are just waiting to disappear.
           Attribute is absent if Page Pool has not been detached, and
           can still be used to allocate new memory.
+      -
+        name: dmabuf
+        doc: ID of the dmabuf this page-pool is attached to.
+        type: u32
   -
     name: page-pool-info
     subset-of: page-pool
@@ -268,6 +272,10 @@ attribute-sets:
         name: napi-id
         doc: ID of the NAPI instance which services this queue.
         type: u32
+      -
+        name: dmabuf
+        doc: ID of the dmabuf attached to this queue, if any.
+        type: u32
 
   -
     name: qstats
@@ -543,6 +551,7 @@ operations:
             - inflight
             - inflight-mem
             - detach-time
+            - dmabuf
       dump:
         reply: *pp-reply
       config-cond: page-pool
@@ -607,6 +616,7 @@ operations:
             - type
             - napi-id
             - ifindex
+            - dmabuf
       dump:
         request:
           attributes:
index 91bf3ecc5f1d97989bc5450fa27eac3b9286c21e..7c308f04e7a0630cd3e18b6c268dbae268e225af 100644 (file)
@@ -93,6 +93,7 @@ enum {
        NETDEV_A_PAGE_POOL_INFLIGHT,
        NETDEV_A_PAGE_POOL_INFLIGHT_MEM,
        NETDEV_A_PAGE_POOL_DETACH_TIME,
+       NETDEV_A_PAGE_POOL_DMABUF,
 
        __NETDEV_A_PAGE_POOL_MAX,
        NETDEV_A_PAGE_POOL_MAX = (__NETDEV_A_PAGE_POOL_MAX - 1)
@@ -131,6 +132,7 @@ enum {
        NETDEV_A_QUEUE_IFINDEX,
        NETDEV_A_QUEUE_TYPE,
        NETDEV_A_QUEUE_NAPI_ID,
+       NETDEV_A_QUEUE_DMABUF,
 
        __NETDEV_A_QUEUE_MAX,
        NETDEV_A_QUEUE_MAX = (__NETDEV_A_QUEUE_MAX - 1)
index 9153a8ab0cf8f347b03cf05e4c983fa7a11766a2..1cb954f2d39e8248bffd854cdf27eceb25293425 100644 (file)
@@ -295,6 +295,7 @@ static int
 netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev,
                         u32 q_idx, u32 q_type, const struct genl_info *info)
 {
+       struct net_devmem_dmabuf_binding *binding;
        struct netdev_rx_queue *rxq;
        struct netdev_queue *txq;
        void *hdr;
@@ -314,6 +315,12 @@ netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev,
                if (rxq->napi && nla_put_u32(rsp, NETDEV_A_QUEUE_NAPI_ID,
                                             rxq->napi->napi_id))
                        goto nla_put_failure;
+
+               binding = rxq->mp_params.mp_priv;
+               if (binding &&
+                   nla_put_u32(rsp, NETDEV_A_QUEUE_DMABUF, binding->id))
+                       goto nla_put_failure;
+
                break;
        case NETDEV_QUEUE_TYPE_TX:
                txq = netdev_get_tx_queue(netdev, q_idx);
index cd6267ba6fa3f19a65fdc7ac5a3051b07ad8b00c..48335766c1bfd61dda6559748ea3c02380518570 100644 (file)
@@ -9,6 +9,7 @@
 #include <net/page_pool/types.h>
 #include <net/sock.h>
 
+#include "devmem.h"
 #include "page_pool_priv.h"
 #include "netdev-genl-gen.h"
 
@@ -213,6 +214,7 @@ static int
 page_pool_nl_fill(struct sk_buff *rsp, const struct page_pool *pool,
                  const struct genl_info *info)
 {
+       struct net_devmem_dmabuf_binding *binding = pool->mp_priv;
        size_t inflight, refsz;
        void *hdr;
 
@@ -242,6 +244,9 @@ page_pool_nl_fill(struct sk_buff *rsp, const struct page_pool *pool,
                         pool->user.detach_time))
                goto err_cancel;
 
+       if (binding && nla_put_u32(rsp, NETDEV_A_PAGE_POOL_DMABUF, binding->id))
+               goto err_cancel;
+
        genlmsg_end(rsp, hdr);
 
        return 0;
index 91bf3ecc5f1d97989bc5450fa27eac3b9286c21e..7c308f04e7a0630cd3e18b6c268dbae268e225af 100644 (file)
@@ -93,6 +93,7 @@ enum {
        NETDEV_A_PAGE_POOL_INFLIGHT,
        NETDEV_A_PAGE_POOL_INFLIGHT_MEM,
        NETDEV_A_PAGE_POOL_DETACH_TIME,
+       NETDEV_A_PAGE_POOL_DMABUF,
 
        __NETDEV_A_PAGE_POOL_MAX,
        NETDEV_A_PAGE_POOL_MAX = (__NETDEV_A_PAGE_POOL_MAX - 1)
@@ -131,6 +132,7 @@ enum {
        NETDEV_A_QUEUE_IFINDEX,
        NETDEV_A_QUEUE_TYPE,
        NETDEV_A_QUEUE_NAPI_ID,
+       NETDEV_A_QUEUE_DMABUF,
 
        __NETDEV_A_QUEUE_MAX,
        NETDEV_A_QUEUE_MAX = (__NETDEV_A_QUEUE_MAX - 1)