All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: Arvind Yadav <arvind.yadav@intel.com>, intel-xe@lists.freedesktop.org
Cc: matthew.brost@intel.com, himal.prasad.ghimiray@intel.com,
	 pallavi.mishra@intel.com
Subject: Re: [PATCH v5 7/9] drm/xe/madvise: Block imported and exported dma-bufs
Date: Tue, 24 Feb 2026 15:15:26 +0100	[thread overview]
Message-ID: <a221b642ba435c6a203e79e114544df7b815fde5.camel@linux.intel.com> (raw)
In-Reply-To: <20260211152644.1661165-8-arvind.yadav@intel.com>

On Wed, 2026-02-11 at 20:56 +0530, Arvind Yadav wrote:
> Prevent marking imported or exported dma-bufs as purgeable.
> External devices may be accessing these buffers without our
> knowledge, making purging unsafe.
> 
> Check drm_gem_is_imported() for buffers created by other
> drivers and obj->dma_buf for buffers exported to other
> drivers. Silently skip these BOs during madvise processing.
> 
> This follows drm_gem_shmem's purgeable implementation and
> prevents data corruption from purging actively-used shared
> buffers.
> 
> v3:
>    - Addresses review feedback from Matt Roper about handling
>      imported/exported BOs correctly in the purgeable BO
>      implementation.
> 
> v4:
>    - Check should be add to xe_vm_madvise_purgeable_bo.
> 
> v5:
>    - Rename xe_bo_is_external_dmabuf() to xe_bo_is_dmabuf_shared()
>      for clarity (Thomas)
>    - Update comments to clarify why both imports and exports
>      are unsafe to purge.
> 
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_vm_madvise.c | 35
> ++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c
> b/drivers/gpu/drm/xe/xe_vm_madvise.c
> index c184426546a2..8d55ea78b6d1 100644
> --- a/drivers/gpu/drm/xe/xe_vm_madvise.c
> +++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
> @@ -184,6 +184,33 @@ static void madvise_pat_index(struct xe_device
> *xe, struct xe_vm *vm,
>  	}
>  }
>  
> +/**
> + * xe_bo_is_dmabuf_shared() - Check if BO is shared via dma-buf
> + * @bo: Buffer object
> + *
> + * Prevent marking imported or exported dma-bufs as purgeable.
> + * For imported BOs, Xe doesn't own the backing store and cannot
> + * safely reclaim pages (exporter or other devices may still be
> + * using them). For exported BOs, external devices may have active
> + * mappings we cannot track.
> + *
> + * Return: true if BO is imported or exported, false otherwise

Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>


> + */
> +static bool xe_bo_is_dmabuf_shared(struct xe_bo *bo)
> +{
> +	struct drm_gem_object *obj = &bo->ttm.base;
> +
> +	/* Imported: exporter owns backing store */
> +	if (drm_gem_is_imported(obj))
> +		return true;
> +
> +	/* Exported: external devices may be accessing */
> +	if (obj->dma_buf)
> +		return true;
> +
> +	return false;
> +}
> +
>  /**
>   * xe_bo_all_vmas_dontneed() - Check if all VMAs of a BO are marked
> DONTNEED
>   * @bo: Buffer object
> @@ -204,6 +231,10 @@ static bool xe_bo_all_vmas_dontneed(struct xe_bo
> *bo)
>  
>  	xe_bo_assert_held(bo);
>  
> +	/* Shared dma-bufs cannot be purgeable */
> +	if (xe_bo_is_dmabuf_shared(bo))
> +		return false;
> +
>  	drm_gem_for_each_gpuvm_bo(vm_bo, obj) {
>  		drm_gpuvm_bo_for_each_va(gpuva, vm_bo) {
>  			struct xe_vma *vma = gpuva_to_vma(gpuva);
> @@ -304,6 +335,10 @@ static void __maybe_unused
> madvise_purgeable(struct xe_device *xe,
>  		/* BO must be locked before modifying madv state */
>  		xe_bo_assert_held(bo);
>  
> +		/* Skip shared dma-bufs */
> +		if (xe_bo_is_dmabuf_shared(bo))
> +			continue;
> +
>  		/*
>  		 * Once purged, always purged. Cannot transition
> back to WILLNEED.
>  		 * This matches i915 semantics where purged BOs are
> permanently invalid.

  reply	other threads:[~2026-02-24 14:15 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-11 15:26 [PATCH v5 0/9] drm/xe/madvise: Add support for purgeable buffer objects Arvind Yadav
2026-02-11 15:26 ` [PATCH v5 1/9] drm/xe/uapi: Add UAPI " Arvind Yadav
2026-02-24 10:50   ` Thomas Hellström
2026-02-26 17:58   ` Souza, Jose
2026-02-27  9:32     ` Yadav, Arvind
2026-02-11 15:26 ` [PATCH v5 2/9] drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo Arvind Yadav
2026-02-11 16:00   ` Matthew Brost
2026-02-11 15:26 ` [PATCH v5 3/9] drm/xe/madvise: Implement purgeable buffer object support Arvind Yadav
2026-02-24 12:21   ` Thomas Hellström
2026-02-24 14:56     ` Yadav, Arvind
2026-02-11 15:26 ` [PATCH v5 4/9] drm/xe/bo: Handle CPU faults on purged buffer objects Arvind Yadav
2026-02-11 15:26 ` [PATCH v5 5/9] drm/xe/vm: Prevent binding of " Arvind Yadav
2026-02-11 16:17   ` Matthew Brost
2026-02-11 15:26 ` [PATCH v5 6/9] drm/xe/madvise: Implement per-VMA purgeable state tracking Arvind Yadav
2026-02-24 12:48   ` Thomas Hellström
2026-02-24 15:07     ` Yadav, Arvind
2026-02-24 16:36       ` Matthew Brost
2026-02-25  5:35         ` Yadav, Arvind
2026-02-25  8:21           ` Thomas Hellström
2026-02-25  9:04             ` Matthew Brost
2026-02-25  9:18               ` Thomas Hellström
2026-02-25  9:40                 ` Yadav, Arvind
2026-02-25 18:32                   ` Matthew Brost
2026-02-11 15:26 ` [PATCH v5 7/9] drm/xe/madvise: Block imported and exported dma-bufs Arvind Yadav
2026-02-24 14:15   ` Thomas Hellström [this message]
2026-02-11 15:26 ` [PATCH v5 8/9] drm/xe/bo: Add purgeable shrinker state helpers Arvind Yadav
2026-02-24 14:21   ` Thomas Hellström
2026-02-24 15:09     ` Yadav, Arvind
2026-02-11 15:26 ` [PATCH v5 9/9] drm/xe/madvise: Enable purgeable buffer object IOCTL support Arvind Yadav
2026-02-11 15:40   ` Matthew Brost
2026-02-11 15:46 ` [PATCH v5 0/9] drm/xe/madvise: Add support for purgeable buffer objects Matthew Brost
2026-02-25 10:10   ` Yadav, Arvind
2026-02-11 16:21 ` ✗ CI.checkpatch: warning for drm/xe/madvise: Add support for purgeable buffer objects (rev6) Patchwork
2026-02-11 16:22 ` ✓ CI.KUnit: success " Patchwork
2026-02-11 17:11 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-02-13  1:15 ` ✗ Xe.CI.FULL: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a221b642ba435c6a203e79e114544df7b815fde5.camel@linux.intel.com \
    --to=thomas.hellstrom@linux.intel.com \
    --cc=arvind.yadav@intel.com \
    --cc=himal.prasad.ghimiray@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=matthew.brost@intel.com \
    --cc=pallavi.mishra@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.