From: Matthew Brost <matthew.brost@intel.com>
To: Arvind Yadav <arvind.yadav@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
<himal.prasad.ghimiray@intel.com>,
<thomas.hellstrom@linux.intel.com>, <pallavi.mishra@intel.com>,
<rodrigo.vivi@intel.com>
Subject: Re: [PATCH v4 1/8] drm/xe/uapi: Add UAPI support for purgeable buffer objects
Date: Tue, 20 Jan 2026 09:20:49 -0800 [thread overview]
Message-ID: <aW+5cVnfpNZNggeD@lstrano-desk.jf.intel.com> (raw)
In-Reply-To: <20260120060900.3137984-2-arvind.yadav@intel.com>
On Tue, Jan 20, 2026 at 11:38:47AM +0530, Arvind Yadav wrote:
> From: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>
> Extend the DRM_XE_MADVISE ioctl to support purgeable buffer object
> management by adding DRM_XE_VMA_ATTR_PURGEABLE_STATE attribute type.
>
> This allows userspace applications to provide memory usage hints to
> the kernel for better memory management under pressure:
>
> This allows userspace applications to provide memory usage hints to
> the kernel for better memory management under pressure:
>
> - WILLNEED: Buffer is needed and should not be purged. If the BO was
> previously purged, retained field returns 0 indicating backing store
> was lost (once purged, always purged semantics matching i915).
>
> - DONTNEED: Buffer is not currently needed and may be purged by the
> kernel under memory pressure to free resources. Only applies to
> non-shared BOs.
>
> The implementation includes a 'retained' output field (matching i915's
> drm_i915_gem_madvise.retained) that indicates whether the BO's backing
> store still exists (1) or has been purged (0).
>
> v2:
> - Add PURGED state for read-only status, change ioctl to DRM_IOWR,
> add retained field for i915 compatibility
>
> v3:
> - UAPI rule should not be changed (Matthew Brost)
> - Make 'retained' a userptr (Matthew Brost)
>
> v4:
> - You cannot make this part of the union (purge_state_val) larger
> than the existing union (16 bytes). So just drop the '__u64 reserved'
> field. (Matt)
>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
> include/uapi/drm/xe_drm.h | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 077e66a682e2..7b3901e4b85e 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -2099,6 +2099,7 @@ struct drm_xe_madvise {
> #define DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC 0
> #define DRM_XE_MEM_RANGE_ATTR_ATOMIC 1
> #define DRM_XE_MEM_RANGE_ATTR_PAT 2
> +#define DRM_XE_VMA_ATTR_PURGEABLE_STATE 3
> /** @type: type of attribute */
> __u32 type;
>
> @@ -2189,6 +2190,42 @@ struct drm_xe_madvise {
> /** @pat_index.reserved: Reserved */
> __u64 reserved;
> } pat_index;
> +
> + /**
> + * @purge_state_val: Purgeable state configuration
> + *
> + * Used when @type == DRM_XE_VMA_ATTR_PURGEABLE_STATE.
> + *
> + * Configures the purgeable state of buffer objects in the specified
> + * virtual address range. This allows applications to hint to the kernel
> + * about bo's usage patterns for better memory management.
> + *
> + * Supported values for @purge_state_val.val:
> + * - DRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed.
> + * If BO was purged, returns retained=0 (backing store lost).
> + *
> + * - DRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Hints that BO is not
> + * currently needed. Kernel may purge it under memory pressure.
> + * Only applies to non-shared BOs. Returns retained=1 if not purged.
> + */
> + struct {
> +#define DRM_XE_VMA_PURGEABLE_STATE_WILLNEED 0
> +#define DRM_XE_VMA_PURGEABLE_STATE_DONTNEED 1
> + /** @purge_state_val.val: value for DRM_XE_VMA_ATTR_PURGEABLE_STATE */
> + __u32 val;
> +
> + /* @purge_state_val.pad */
> + __u32 pad;
> + /**
> + * @purge_state_val.retained: Pointer to output field for backing
> + * store status.
> + *
> + * Userspace provides a pointer to u32. Kernel writes to it:
> + * 1 if backing store exists, 0 if purged.
> + * Similar to i915's drm_i915_gem_madvise.retained field.
> + */
> + __u64 retained;
@Rodrigo + @Thomas.
Here we are adding a userptr for copying the result back to userspace
because the existing madvise IOCTL is IOW. If we could change this IOCTL
to IOWR, we could let DRM handle this for us. I'm not sure whether
changing an IOCTL from IOW to IOWR is allowed. My understanding is that
the ioctl encoding is basically the same aside from some control bits,
so switching from IOW → IOWR shouldn’t break anything, but I'm unclear
on the rules.
What do you two think?
Matt
> + } purge_state_val;
> };
>
> /** @reserved: Reserved */
> --
> 2.43.0
>
next prev parent reply other threads:[~2026-01-20 17:21 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-20 6:08 [PATCH v4 0/8] drm/xe/madvise: Add support for purgeable buffer objects Arvind Yadav
2026-01-20 6:08 ` [PATCH v4 1/8] drm/xe/uapi: Add UAPI " Arvind Yadav
2026-01-20 17:20 ` Matthew Brost [this message]
2026-01-21 18:42 ` Vivi, Rodrigo
2026-01-20 6:08 ` [PATCH v4 2/8] drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo Arvind Yadav
2026-01-20 17:45 ` Matthew Brost
2026-01-21 5:30 ` Yadav, Arvind
2026-01-22 15:05 ` Thomas Hellström
2026-01-20 6:08 ` [PATCH v4 3/8] drm/xe/madvise: Implement purgeable buffer object support Arvind Yadav
2026-01-20 16:58 ` Matthew Brost
2026-01-20 17:15 ` Matthew Brost
2026-01-21 8:24 ` Yadav, Arvind
2026-01-22 15:30 ` Thomas Hellström
2026-01-30 8:13 ` Yadav, Arvind
2026-01-20 17:44 ` Matthew Brost
2026-01-20 6:08 ` [PATCH v4 4/8] drm/xe/bo: Handle CPU faults on purged buffer objects Arvind Yadav
2026-01-20 17:23 ` Matthew Brost
2026-01-22 15:54 ` Thomas Hellström
2026-01-20 6:08 ` [PATCH v4 5/8] drm/xe/vm: Prevent binding of " Arvind Yadav
2026-01-20 17:27 ` Matthew Brost
2026-01-23 5:41 ` Yadav, Arvind
2026-01-23 12:37 ` Thomas Hellström
2026-01-30 8:17 ` Yadav, Arvind
2026-01-20 6:08 ` [PATCH v4 6/8] drm/xe/madvise: Implement per-VMA purgeable state tracking Arvind Yadav
2026-01-20 17:41 ` Matthew Brost
2026-01-21 5:11 ` Yadav, Arvind
2026-01-23 13:07 ` Thomas Hellström
2026-01-20 6:08 ` [PATCH v4 7/8] drm/xe/madvise: Block imported and exported dma-bufs Arvind Yadav
2026-01-20 17:51 ` Matthew Brost
2026-01-23 13:31 ` Thomas Hellström
2026-01-30 8:22 ` Yadav, Arvind
2026-01-30 8:59 ` Thomas Hellström
2026-01-20 6:08 ` [PATCH v4 8/8] drm/xe/bo: Add purgeable shrinker state helpers Arvind Yadav
2026-01-20 17:58 ` Matthew Brost
2026-01-23 13:42 ` Thomas Hellström
2026-01-20 6:14 ` ✗ CI.checkpatch: warning for drm/xe/madvise: Add support for purgeable buffer objects (rev5) Patchwork
2026-01-20 6:16 ` ✗ CI.KUnit: failure " 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=aW+5cVnfpNZNggeD@lstrano-desk.jf.intel.com \
--to=matthew.brost@intel.com \
--cc=arvind.yadav@intel.com \
--cc=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=pallavi.mishra@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=thomas.hellstrom@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox