aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/devmem.h
diff options
context:
space:
mode:
authorMina Almasry <[email protected]>2024-09-10 17:14:48 +0000
committerJakub Kicinski <[email protected]>2024-09-12 03:44:31 +0000
commit28c5c74eeaa0a2aad8b9cd9ede22a4c623f2a7fc (patch)
tree85d3db22839b9c4e256d4a87bacdc610da9ed655 /net/core/devmem.h
parentnetdev: support binding dma-buf to netdevice (diff)
downloadkernel-28c5c74eeaa0a2aad8b9cd9ede22a4c623f2a7fc.tar.gz
kernel-28c5c74eeaa0a2aad8b9cd9ede22a4c623f2a7fc.zip
netdev: netdevice devmem allocator
Implement netdev devmem allocator. The allocator takes a given struct netdev_dmabuf_binding as input and allocates net_iov from that binding. The allocation simply delegates to the binding's genpool for the allocation logic and wraps the returned memory region in a net_iov struct. Signed-off-by: Willem de Bruijn <[email protected]> Signed-off-by: Kaiyuan Zhang <[email protected]> Signed-off-by: Mina Almasry <[email protected]> Reviewed-by: Pavel Begunkov <[email protected]> Reviewed-by: Jakub Kicinski <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'net/core/devmem.h')
-rw-r--r--net/core/devmem.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/net/core/devmem.h b/net/core/devmem.h
index c50f91d858dd..b1db4877cff9 100644
--- a/net/core/devmem.h
+++ b/net/core/devmem.h
@@ -74,6 +74,23 @@ int net_devmem_bind_dmabuf_to_queue(struct net_device *dev, u32 rxq_idx,
struct netlink_ext_ack *extack);
void dev_dmabuf_uninstall(struct net_device *dev);
+static inline struct dmabuf_genpool_chunk_owner *
+net_iov_owner(const struct net_iov *niov)
+{
+ return niov->owner;
+}
+
+static inline unsigned int net_iov_idx(const struct net_iov *niov)
+{
+ return niov - net_iov_owner(niov)->niovs;
+}
+
+static inline struct net_devmem_dmabuf_binding *
+net_iov_binding(const struct net_iov *niov)
+{
+ return net_iov_owner(niov)->binding;
+}
+
static inline void
net_devmem_dmabuf_binding_get(struct net_devmem_dmabuf_binding *binding)
{
@@ -89,7 +106,13 @@ net_devmem_dmabuf_binding_put(struct net_devmem_dmabuf_binding *binding)
__net_devmem_dmabuf_binding_free(binding);
}
+struct net_iov *
+net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding);
+void net_devmem_free_dmabuf(struct net_iov *ppiov);
+
#else
+struct net_devmem_dmabuf_binding;
+
static inline void
__net_devmem_dmabuf_binding_free(struct net_devmem_dmabuf_binding *binding)
{
@@ -119,6 +142,17 @@ net_devmem_bind_dmabuf_to_queue(struct net_device *dev, u32 rxq_idx,
static inline void dev_dmabuf_uninstall(struct net_device *dev)
{
}
+
+static inline struct net_iov *
+net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding)
+{
+ return NULL;
+}
+
+static inline void net_devmem_free_dmabuf(struct net_iov *ppiov)
+{
+}
+
#endif
#endif /* _NET_DEVMEM_H */