mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo
Add infrastructure for tracking purgeable state of buffer objects.
This includes:
Introduce enum xe_madv_purgeable_state with three states:
- XE_MADV_PURGEABLE_WILLNEED (0): BO is needed and should not be
purged. This is the default state for all BOs.
- XE_MADV_PURGEABLE_DONTNEED (1): BO is not currently needed and
can be purged by the kernel under memory pressure to reclaim
resources. Only non-shared BOs can be marked as DONTNEED.
- XE_MADV_PURGEABLE_PURGED (2): BO has been purged by the kernel.
Accessing a purged BO results in error. Follows i915 semantics
where once purged, the BO remains permanently invalid ("once
purged, always purged").
Add madv_purgeable field to struct xe_bo for state tracking
of purgeable state across concurrent access paths
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260326130843.3545241-3-arvind.yadav@intel.com
This commit is contained in:
parent
f99a05cc0b
commit
b67427f939
|
|
@ -87,6 +87,28 @@
|
|||
|
||||
#define XE_PCI_BARRIER_MMAP_OFFSET (0x50 << XE_PTE_SHIFT)
|
||||
|
||||
/**
|
||||
* enum xe_madv_purgeable_state - Buffer object purgeable state enumeration
|
||||
*
|
||||
* This enum defines the possible purgeable states for a buffer object,
|
||||
* allowing userspace to provide memory usage hints to the kernel for
|
||||
* better memory management under pressure.
|
||||
*
|
||||
* @XE_MADV_PURGEABLE_WILLNEED: The buffer object is needed and should not be purged.
|
||||
* This is the default state.
|
||||
* @XE_MADV_PURGEABLE_DONTNEED: The buffer object is not currently needed and can be
|
||||
* purged by the kernel under memory pressure.
|
||||
* @XE_MADV_PURGEABLE_PURGED: The buffer object has been purged by the kernel.
|
||||
*
|
||||
* Accessing a purged buffer will result in an error. Per i915 semantics,
|
||||
* once purged, a BO remains permanently invalid and must be destroyed and recreated.
|
||||
*/
|
||||
enum xe_madv_purgeable_state {
|
||||
XE_MADV_PURGEABLE_WILLNEED,
|
||||
XE_MADV_PURGEABLE_DONTNEED,
|
||||
XE_MADV_PURGEABLE_PURGED,
|
||||
};
|
||||
|
||||
struct sg_table;
|
||||
|
||||
struct xe_bo *xe_bo_alloc(void);
|
||||
|
|
@ -215,6 +237,40 @@ static inline bool xe_bo_is_protected(const struct xe_bo *bo)
|
|||
return bo->pxp_key_instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_bo_is_purged() - Check if buffer object has been purged
|
||||
* @bo: The buffer object to check
|
||||
*
|
||||
* Checks if the buffer object's backing store has been discarded by the
|
||||
* kernel due to memory pressure after being marked as purgeable (DONTNEED).
|
||||
* Once purged, the BO cannot be restored and any attempt to use it will fail.
|
||||
*
|
||||
* Context: Caller must hold the BO's dma-resv lock
|
||||
* Return: true if the BO has been purged, false otherwise
|
||||
*/
|
||||
static inline bool xe_bo_is_purged(struct xe_bo *bo)
|
||||
{
|
||||
xe_bo_assert_held(bo);
|
||||
return bo->madv_purgeable == XE_MADV_PURGEABLE_PURGED;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_bo_madv_is_dontneed() - Check if BO is marked as DONTNEED
|
||||
* @bo: The buffer object to check
|
||||
*
|
||||
* Checks if userspace has marked this BO as DONTNEED (i.e., its contents
|
||||
* are not currently needed and can be discarded under memory pressure).
|
||||
* This is used internally to decide whether a BO is eligible for purging.
|
||||
*
|
||||
* Context: Caller must hold the BO's dma-resv lock
|
||||
* Return: true if the BO is marked DONTNEED, false otherwise
|
||||
*/
|
||||
static inline bool xe_bo_madv_is_dontneed(struct xe_bo *bo)
|
||||
{
|
||||
xe_bo_assert_held(bo);
|
||||
return bo->madv_purgeable == XE_MADV_PURGEABLE_DONTNEED;
|
||||
}
|
||||
|
||||
static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
|
||||
{
|
||||
if (likely(bo)) {
|
||||
|
|
|
|||
|
|
@ -108,6 +108,12 @@ struct xe_bo {
|
|||
* from default
|
||||
*/
|
||||
u64 min_align;
|
||||
|
||||
/**
|
||||
* @madv_purgeable: user space advise on BO purgeability, protected
|
||||
* by BO's dma-resv lock.
|
||||
*/
|
||||
u32 madv_purgeable;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user