Re: [PATCH i-g-t v3 1/8] drm-uapi/xe_drm: Add UAPI support for purgeable buffer objects

Yadav, Arvind
2026-02-23T09:33:49Z

On 23-02-2026 09:59, Gurram, Pravalika wrote:
>
>> -----Original Message-----
>> From: Yadav, Arvind <arvind.yadav@intel.com>
>> Sent: Tuesday, 17 February, 2026 08:04 AM
>> To: igt-dev@lists.freedesktop.org
>> Cc: Brost, Matthew <matthew.brost@intel.com>; Ghimiray, Himal Prasad
>> <himal.prasad.ghimiray@intel.com>; thomas.hellstrom@linux.intel.com;
>> Sharma, Nishit <nishit.sharma@intel.com>; Gurram, Pravalika
>> <pravalika.gurram@intel.com>
>> Subject: [PATCH i-g-t v3 1/8] drm-uapi/xe_drm: Add UAPI support for
>> purgeable buffer objects
>>
>> 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:
>> - Update UAPI documentation to clarify retained must be initialized
>> to 0(Thomas)
>>
>> Cc: Nishit Sharma <nishit.sharma@intel.com>
>> Cc: Pravalika Gurram <pravalika.gurram@intel.com>
>> 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/drm-uapi/xe_drm.h | 44
>> +++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 44 insertions(+)
>>
>> diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h index
>> 077e66a68..3dd1ba875 100644
>> --- a/include/drm-uapi/xe_drm.h
>> +++ b/include/drm-uapi/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,49 @@ 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 must initialize this u32 field to 0 before
>> the
>> + * ioctl. Kernel writes to it after the operation:
>> + * - 1 if backing store exists (not purged)
>> + * - 0 if backing store was purged
>> + *
>> + * If userspace fails to initialize to 0, ioctl returns -
>> EINVAL.
>> + * This ensures a safe default (0 = assume purged) if
>> kernel
>> + * cannot write the result.
>> + *
>> + * Similar to i915's drm_i915_gem_madvise.retained
>> field.
>> + */
>> + __u64 retained;
>> + } purge_state_val;
>> };
> As kamil suggested please make sure that it’s a copy of kernel
> Reviewed-by: Pravalika Gurram <pravalika.gurram@intel.com>

Noted,
Thanks,
Arvind

>> /** @reserved: Reserved */
>> --
>> 2.43.0