Hello,

It's a pity this patch didn't move.
How can we make the design discussion progressing?


23/04/2026 19:06, Cliff Burdick:
>  From: Burakov, Anatoly <[email protected]>
> >  On 2/4/2026 4:50 PM, Cliff Burdick wrote:
> >  > dmabuf is a modern Linux kernel feature to allow DMA transfers between
> >  > two drivers. Common examples of usage are streaming video devices and
> >  > NIC to GPU transfers. Prior to dmabuf users had to load proprietary
> >  > drivers to expose the DMA mappings. With dmabuf the proprietary
> >  > drivers are no longer required.
> >  > 
> >  > A new api function rte_extmem_register_dmabuf is introduced to create
> >  > the mapping from a dmabuf file descriptor. dmabuf uses a file
> >  > descriptor and an offset that has been pre-opened with the kernel. The
> >  > kernel uses the file descriptor to map to a VA pointer. To avoid ABI
> >  > changes, a static struct is used inside of eal_common_memory.c, and
> >  > lookups are done on this struct rather than from the rte_memseg_list.
> >  > 
> >  > Ideally we would like to add both the dmabuf file descriptor and
> >  > offset to rte_memseg_list, but it's not clear if we can reuse existing
> >  > fields when using the dmabuf API.
> >  > 
> >  > We could rename the external flag to a more generic "properties" flag
> >  > where "external" is the lowest bit, then we can use the second bit to
> >  > indicate the presence of dmabuf. In the presence of the flag for
> >  > dmabuf we could reuse the base_va address field for the dmabuf offset,
> >  > and the socket_id for the file descriptor.
> >  > 
> >  > Signed-off-by: Cliff Burdick 
> > <[[email protected]](mailto:[email protected])>
> >  > ---
> >   
> >  Hi,
> >   
> >  A few random thoughts about the patchset.
> >   
> >  For one, this API is obviously Linux-only. This in itself is not a problem 
> > (we do have VFIO API...) but I would really like to avoid that if possible.
> >   
> >  For another, I don't see any support for secondary processes - the dmabuf 
> > array is process-local, and calling register() from secondary process would 
> > presumably either fail or create a duplicate segment, depending on exactly 
> > what you pass into the register call. If this scenario isn't supported, it 
> > should at least be explicitly disallowed and documented to be such.
> >   
> >  My biggest concern is that this is creating another type of external 
> > memory segment and thus segregating the API, but isn't doing it in a way 
> > that is generic. I can see a valid usecase for this, but what we're 
> > essentially doing here is storing some metadata together with the segment. 
> > So, perhaps, this is what we should do? That would seem like a cleanest 
> > solution for me, and it would extend usefulness of the API to other use 
> > cases where there may be a requirement to store some metadata/fd/whatever 
> > with the segment.
> >   
> >  You could then build another API on top of this (a library?) that would 
> > handle things like secondary process synchronization with IPC, so that you 
> > have all fd's valid in all processes.
> >   
> >  Thoughts?
> >  --
> >  Thanks,
> >  Anatoly
> 
> Hi Anatoly, sorry for the delay. It is true that it's Linux-only. I did not 
> see either BSD or Windows having an equivalent to dmabuf, but I'm not very 
> familiar with them. 
> 
> Adding support for secondary processes is something I'd rather delay for a 
> later release if possible since it could be a lot more work. I can add a 
> guard that says it's not supported if a secondary process calls the register 
> function.
> 
> For a more generic API are you suggesting something like 
> rte_extmem_register_ex() that would take an enum type along with some opaque 
> metadata, of which DMABUF is one type?





Reply via email to