Re: [PATCH v3 2/7] dma-buf: Always build with DMABUF_MOVE_NOTIFY

Christian König
2026-01-21T08:55:50Z

On 1/20/26 15:07, Leon Romanovsky wrote:
> From: Leon Romanovsky <leonro@nvidia.com>
>
> DMABUF_MOVE_NOTIFY was introduced in 2018 and has been marked as
> experimental and disabled by default ever since. Six years later,
> all new importers implement this callback.
>
> It is therefore reasonable to drop CONFIG_DMABUF_MOVE_NOTIFY and
> always build DMABUF with support for it enabled.
>
> Suggested-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> ---
> drivers/dma-buf/Kconfig | 12 ------------
> drivers/dma-buf/dma-buf.c | 12 ++----------
> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 10 +++-------
> drivers/gpu/drm/amd/amdkfd/Kconfig | 2 +-
> drivers/gpu/drm/xe/tests/xe_dma_buf.c | 3 +--
> drivers/gpu/drm/xe/xe_dma_buf.c | 12 ++++--------
> 6 files changed, 11 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
> index b46eb8a552d7..84d5e9b24e20 100644
> --- a/drivers/dma-buf/Kconfig
> +++ b/drivers/dma-buf/Kconfig
> @@ -40,18 +40,6 @@ config UDMABUF
> A driver to let userspace turn memfd regions into dma-bufs.
> Qemu can use this to create host dmabufs for guest framebuffers.
>
> -config DMABUF_MOVE_NOTIFY
> - bool "Move notify between drivers (EXPERIMENTAL)"
> - default n
> - depends on DMA_SHARED_BUFFER
> - help
> - Don't pin buffers if the dynamic DMA-buf interface is available on
> - both the exporter as well as the importer. This fixes a security
> - problem where userspace is able to pin unrestricted amounts of memory
> - through DMA-buf.
> - This is marked experimental because we don't yet have a consistent
> - execution context and memory management between drivers.
> -
> config DMABUF_DEBUG
> bool "DMA-BUF debug checks"
> depends on DMA_SHARED_BUFFER
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index 59cc647bf40e..cd3b60ce4863 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -837,18 +837,10 @@ static void mangle_sg_table(struct sg_table *sg_table)
>
> }
>
> -static inline bool
> -dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach)

I would rather like to keep the wrapper and even add some explanation what it means when true is returned.

Apart from that looks good to me.

Regards,
Christian.

> -{
> - return !!attach->importer_ops;
> -}
> -
> static bool
> dma_buf_pin_on_map(struct dma_buf_attachment *attach)
> {
> - return attach->dmabuf->ops->pin &&
> - (!dma_buf_attachment_is_dynamic(attach) ||
> - !IS_ENABLED(CONFIG_DMABUF_MOVE_NOTIFY));
> + return attach->dmabuf->ops->pin && !attach->importer_ops;
> }
>
> /**
> @@ -1124,7 +1116,7 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
> /*
> * Importers with static attachments don't wait for fences.
> */
> - if (!dma_buf_attachment_is_dynamic(attach)) {
> + if (!attach->importer_ops) {
> ret = dma_resv_wait_timeout(attach->dmabuf->resv,
> DMA_RESV_USAGE_KERNEL, true,
> MAX_SCHEDULE_TIMEOUT);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index 863454148b28..349215549e8f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -145,13 +145,9 @@ static int amdgpu_dma_buf_pin(struct dma_buf_attachment *attach)
> * notifiers are disabled, only allow pinning in VRAM when move
> * notiers are enabled.
> */
> - if (!IS_ENABLED(CONFIG_DMABUF_MOVE_NOTIFY)) {
> - domains &= ~AMDGPU_GEM_DOMAIN_VRAM;
> - } else {
> - list_for_each_entry(attach, &dmabuf->attachments, node)
> - if (!attach->peer2peer)
> - domains &= ~AMDGPU_GEM_DOMAIN_VRAM;
> - }
> + list_for_each_entry(attach, &dmabuf->attachments, node)
> + if (!attach->peer2peer)
> + domains &= ~AMDGPU_GEM_DOMAIN_VRAM;
>
> if (domains & AMDGPU_GEM_DOMAIN_VRAM)
> bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> diff --git a/drivers/gpu/drm/amd/amdkfd/Kconfig b/drivers/gpu/drm/amd/amdkfd/Kconfig
> index 16e12c9913f9..a5d7467c2f34 100644
> --- a/drivers/gpu/drm/amd/amdkfd/Kconfig
> +++ b/drivers/gpu/drm/amd/amdkfd/Kconfig
> @@ -27,7 +27,7 @@ config HSA_AMD_SVM
>
> config HSA_AMD_P2P
> bool "HSA kernel driver support for peer-to-peer for AMD GPU devices"
> - depends on HSA_AMD && PCI_P2PDMA && DMABUF_MOVE_NOTIFY
> + depends on HSA_AMD && PCI_P2PDMA
> help
> Enable peer-to-peer (P2P) communication between AMD GPUs over
> the PCIe bus. This can improve performance of multi-GPU compute
> diff --git a/drivers/gpu/drm/xe/tests/xe_dma_buf.c b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
> index 1f2cca5c2f81..c107687ef3c0 100644
> --- a/drivers/gpu/drm/xe/tests/xe_dma_buf.c
> +++ b/drivers/gpu/drm/xe/tests/xe_dma_buf.c
> @@ -22,8 +22,7 @@ static bool p2p_enabled(struct dma_buf_test_params *params)
>
> static bool is_dynamic(struct dma_buf_test_params *params)
> {
> - return IS_ENABLED(CONFIG_DMABUF_MOVE_NOTIFY) && params->attach_ops &&
> - params->attach_ops->invalidate_mappings;
> + return params->attach_ops && params->attach_ops->invalidate_mappings;
> }
>
> static void check_residency(struct kunit *test, struct xe_bo *exported,
> diff --git a/drivers/gpu/drm/xe/xe_dma_buf.c b/drivers/gpu/drm/xe/xe_dma_buf.c
> index 1b9cd043e517..ea370cd373e9 100644
> --- a/drivers/gpu/drm/xe/xe_dma_buf.c
> +++ b/drivers/gpu/drm/xe/xe_dma_buf.c
> @@ -56,14 +56,10 @@ static int xe_dma_buf_pin(struct dma_buf_attachment *attach)
> bool allow_vram = true;
> int ret;
>
> - if (!IS_ENABLED(CONFIG_DMABUF_MOVE_NOTIFY)) {
> - allow_vram = false;
> - } else {
> - list_for_each_entry(attach, &dmabuf->attachments, node) {
> - if (!attach->peer2peer) {
> - allow_vram = false;
> - break;
> - }
> + list_for_each_entry(attach, &dmabuf->attachments, node) {
> + if (!attach->peer2peer) {
> + allow_vram = false;
> + break;
> }
> }
>
>