[RFC] lib/dma: introduce inter-process and inter-OS DMA

fengchengwen fengchengwen at huawei.com
Fri Sep 19 11:02:41 CEST 2025


Hi Vamsi,

This commit change is more than discussed, it add control API which for group management.

1. Control API: I check this commit and Intel commit [1], it seem has a quite difference.
   I hope Intel guys can express views. I prefer not add this part if no response.

2. Data API: this commit provide two way (vchan and flags) to use this feature, I'd rather
   stick to one, that way, so the app won't go haywire.

   The vchan scheme seems inflexible. If you want to update communication objects frequently
   during operation, the vchan needs to be recreated.

   I prefer reserved 16bit from flags (not 32bit because it seem has no such requirement).

[1] https://mails.dpdk.org/archives/dev/2023-August/274590.html

Thanks

On 9/1/2025 8:33 PM, Vamsi Krishna wrote:
> From: Vamsi Attunuru <vattunuru at marvell.com>
> 
> Modern DMA hardware supports data transfers between multiple DMA
> devices, facilitating data communication across isolated domains,
> containers, or operating systems. These DMA transfers function as
> standard memory-to-memory operations, but with source or destination
> addresses residing in different process or OS address space. The
> exchange of these addresses between processes is handled through
> private driver mechanism, which are beyond the scope of this
> specification change.
> 
> This commit introduces new capability flags to advertise driver support
> for inter-process or inter-OS DMA transfers. It provides two mechanisms
> for specifying source and destination handlers: either through the vchan
> configuration or via the flags parameter in DMA enqueue APIs. This commit
> also adds a controller ID field to specify the device hierarchy details
> when applicable.
> 
> To ensure secure and controlled DMA transfers, this commit adds a set
> of APIs for creating and managing access groups. Devices can create or
> join an access group using token-based authentication, and only devices
> within the same group are permitted to perform DMA transfers across
> processes or OS domains. This approach enhances security and flexibility
> for advanced DMA use cases in multi-tenant or virtualized environments.
> 
> The following flow demonstrates how two processes (a group creator and a
> group joiner) use the DMA access group APIs to securely set up and
> manage inter-process DMA transfers:
> 
> 1) Process 1 (Group Creator):
>    Calls rte_dma_access_group_create(group_token, &group_id) to create a
>    new access group.
>    Shares group_id and group_token with Process 2 via IPC.
> 2) Process 2 (Group Joiner):
>    Receives group_id and group_token from Process 1.
>    Calls rte_dma_access_group_join(group_id, group_token) to join the
>    group.
> 3) Both Processes:
>    Use rte_dma_access_group_size_get() to check the number of devices in
>    the group.
>    Use rte_dma_access_group_get() to retrieve the group table and
>    handler information.
> 
>    Perform DMA transfers as needed.
> 
> 4) Process 2 (when done):
>    Calls rte_dma_access_group_leave(group_id) to leave the group.
> 5) Process 1:
>    Receives RTE_DMA_EVENT_ACCESS_TABLE_UPDATE to be notified of group
>    changes.
>    Uses rte_dma_access_group_size_get() to confirm the group size.
> 
> This flow ensures only authenticated and authorized devices can
> participate in inter-process or inter-OS DMA transfers, enhancing
> security and isolation.
> 
> Signed-off-by: Vamsi Attunuru <vattunuru at marvell.com>
> ---
>  lib/dmadev/rte_dmadev.c       | 320 ++++++++++++++++++++++++++++++++++
>  lib/dmadev/rte_dmadev.h       | 255 +++++++++++++++++++++++++++
>  lib/dmadev/rte_dmadev_pmd.h   |  48 +++++
>  lib/dmadev/rte_dmadev_trace.h |  51 ++++++
>  4 files changed, 674 insertions(+)
> 

...



More information about the dev mailing list