On Mon, May 19, 2025 at 11:35 AM Mina Almasry <almasrym...@google.com> wrote: > > It's annoying for the list_add to be outside net_devmem_bind_dmabuf, but > the list_del is in net_devmem_unbind_dmabuf. Make it consistent by > having both the list_add/del be inside the net_devmem_[un]bind_dmabuf. > > Cc: ap420...@gmail.com > Signed-off-by: Mina Almasry <almasrym...@google.com>
Hi Mina, Thanks a lot for this work! I tested it and it works well. Tested-by: Taehee Yoo <ap420...@gmail.com> Thanks! Taehee Yoo > > --- > net/core/devmem.c | 5 ++++- > net/core/devmem.h | 5 ++++- > net/core/netdev-genl.c | 8 ++------ > 3 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/net/core/devmem.c b/net/core/devmem.c > index 0dba26baae18..b3a62ca0df65 100644 > --- a/net/core/devmem.c > +++ b/net/core/devmem.c > @@ -178,7 +178,8 @@ int net_devmem_bind_dmabuf_to_queue(struct net_device > *dev, u32 rxq_idx, > struct net_devmem_dmabuf_binding * > net_devmem_bind_dmabuf(struct net_device *dev, > enum dma_data_direction direction, > - unsigned int dmabuf_fd, struct netlink_ext_ack *extack) > + unsigned int dmabuf_fd, struct netdev_nl_sock *priv, > + struct netlink_ext_ack *extack) > { > struct net_devmem_dmabuf_binding *binding; > static u32 id_alloc_next; > @@ -299,6 +300,8 @@ net_devmem_bind_dmabuf(struct net_device *dev, > if (err < 0) > goto err_free_chunks; > > + list_add(&binding->list, &priv->bindings); > + > return binding; > > err_free_chunks: > diff --git a/net/core/devmem.h b/net/core/devmem.h > index 58d8d3c1b945..e7ba77050b8f 100644 > --- a/net/core/devmem.h > +++ b/net/core/devmem.h > @@ -11,6 +11,7 @@ > #define _NET_DEVMEM_H > > #include <net/netmem.h> > +#include <net/netdev_netlink.h> > > struct netlink_ext_ack; > > @@ -82,7 +83,8 @@ void __net_devmem_dmabuf_binding_free(struct work_struct > *wq); > struct net_devmem_dmabuf_binding * > net_devmem_bind_dmabuf(struct net_device *dev, > enum dma_data_direction direction, > - unsigned int dmabuf_fd, struct netlink_ext_ack > *extack); > + unsigned int dmabuf_fd, struct netdev_nl_sock *priv, > + struct netlink_ext_ack *extack); > struct net_devmem_dmabuf_binding *net_devmem_lookup_dmabuf(u32 id); > void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding); > int net_devmem_bind_dmabuf_to_queue(struct net_device *dev, u32 rxq_idx, > @@ -170,6 +172,7 @@ static inline void > __net_devmem_dmabuf_binding_free(struct work_struct *wq) > static inline struct net_devmem_dmabuf_binding * > net_devmem_bind_dmabuf(struct net_device *dev, unsigned int dmabuf_fd, > enum dma_data_direction direction, > + struct netdev_nl_sock *priv, > struct netlink_ext_ack *extack) > { > return ERR_PTR(-EOPNOTSUPP); > diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c > index 762570dcda61..2afa7b2141aa 100644 > --- a/net/core/netdev-genl.c > +++ b/net/core/netdev-genl.c > @@ -908,7 +908,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct > genl_info *info) > } > > binding = net_devmem_bind_dmabuf(netdev, DMA_FROM_DEVICE, dmabuf_fd, > - info->extack); > + priv, info->extack); > if (IS_ERR(binding)) { > err = PTR_ERR(binding); > goto err_unlock; > @@ -943,8 +943,6 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct > genl_info *info) > goto err_unbind; > } > > - list_add(&binding->list, &priv->bindings); > - > nla_put_u32(rsp, NETDEV_A_DMABUF_ID, binding->id); > genlmsg_end(rsp, hdr); > > @@ -1020,15 +1018,13 @@ int netdev_nl_bind_tx_doit(struct sk_buff *skb, > struct genl_info *info) > goto err_unlock_netdev; > } > > - binding = net_devmem_bind_dmabuf(netdev, DMA_TO_DEVICE, dmabuf_fd, > + binding = net_devmem_bind_dmabuf(netdev, DMA_TO_DEVICE, dmabuf_fd, > priv, > info->extack); > if (IS_ERR(binding)) { > err = PTR_ERR(binding); > goto err_unlock_netdev; > } > > - list_add(&binding->list, &priv->bindings); > - > nla_put_u32(rsp, NETDEV_A_DMABUF_ID, binding->id); > genlmsg_end(rsp, hdr); > > -- > 2.49.0.1101.gccaa498523-goog >