Re: [PATCH net-next] net: devmem: add netdev_has_dmabuf_binding() helper
From: Dragos Tatulea
Date: Tue Aug 11 2026 - 06:47:56 EST
On 11.08.26 02:25, Stanislav Fomichev wrote:
> On 08/10, Dragos Tatulea wrote:
>> Currently there is no way to check if there is a dmabuf bound on a TX
>> queue. RX side has netif_rxq_has_unreadable_mp() which gives a hint of
>> it.
>>
>> To help with that, this patch add a helper to check whether a devmem
>> dmabuf binding is active on a given netdev, optionally filtered by the
>> DMA device the dmabuf was mapped against.
>>
>> This API is necessary for the upcoming support of data direct in mlx5e
>> to allow blocking accidental swapping of DMA devices while devmem is active.
>>
>> Signed-off-by: Dragos Tatulea <dtatulea@xxxxxxxxxx>
>> ---
>> include/net/netmem.h | 19 +++++++++++++++++++
>> net/core/devmem.c | 20 ++++++++++++++++++++
>> 2 files changed, 39 insertions(+)
>>
>> diff --git a/include/net/netmem.h b/include/net/netmem.h
>> index bccacd21b6c3..0e332e04ea16 100644
>> --- a/include/net/netmem.h
>> +++ b/include/net/netmem.h
>> @@ -363,16 +363,35 @@ static inline unsigned long netmem_get_dma_addr(netmem_ref netmem)
>> return netmem_to_nmdesc(netmem)->dma_addr;
>> }
>>
>> +struct net_device;
>> +
>> #if defined(CONFIG_NET_DEVMEM)
>> static inline bool net_is_devmem_iov(const struct net_iov *niov)
>> {
>> return niov->type == NET_IOV_DMABUF;
>> }
>> +
>> +/**
>> + * netdev_has_dmabuf_binding - is there a dmabuf binding for a
>> + * given @dev and @dma_dev
>> + *
>> + * @dev: netdev to check bindings
>> + * @dma_dev: dma device to check, when NULL it will not be checked
>> + *
>> + * Return: true if a binding is found under @dev and possibily @dma_dev
>> + */
>> +bool netdev_has_dmabuf_binding(struct net_device *dev, struct device *dma_dev);
>> #else
>> static inline bool net_is_devmem_iov(const struct net_iov *niov)
>> {
>> return false;
>> }
>> +
>> +static inline bool netdev_has_dmabuf_binding(struct net_device *dev,
>> + struct device *dma_dev)
>> +{
>> + return false;
>> +}
>> #endif
>>
>> void __get_netmem(netmem_ref netmem);
>> diff --git a/net/core/devmem.c b/net/core/devmem.c
>> index 957d6b96216b..f13a0e343684 100644
>> --- a/net/core/devmem.c
>> +++ b/net/core/devmem.c
>> @@ -364,6 +364,26 @@ struct net_devmem_dmabuf_binding *net_devmem_lookup_dmabuf(u32 id)
>> return binding;
>> }
>>
>> +bool netdev_has_dmabuf_binding(struct net_device *dev, struct device *dma_dev)
>> +{
>> + struct net_devmem_dmabuf_binding *binding;
>> + unsigned long id;
>> + bool found = false;
>
> xmas tree. Other than that LGTM.
Seems like Bobby found a valid corner case that needs to be handled.
> Presumably it's better to ship via your upcoming series to show the actual usage?
I will do that eventually, but would like to get some ACKs about this bit
so that Tariq doesn't have to re-send the whole series every time.
Thanks,
Dragos