* [PATCH] drm/xe: Don't transfer shrinker pages for pinned bos on purgeable state change
@ 2026-10-09 7:00 Thomas Hellström
2026-10-09 8:38 ` Matthew Auld
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Hellström @ 2026-10-09 7:00 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Arvind Yadav, Matthew Brost,
Himal Prasad Ghimiray, Rodrigo Vivi, Matthew Auld, stable
Pinned bos have their pages removed from the shrinker's shrinkable /
purgeable counts on pin, and added back on unpin according to the
bo's purgeable state at that time.
However, xe_bo_set_purgeable_shrinker() unconditionally transfers
pages between the shrinkable and purgeable counts. If the purgeable
state of a pinned bo changes, for example by userspace madvising
DONTNEED on a VMA of a bo that is also pinned as a scanout buffer,
this underflows one count and, after unpin, leaves the other one
permanently inflated.
Only update the purgeable flag for pinned bos, and leave the page
accounting to unpin.
Fixes: 536a2ead3a8f ("drm/xe/bo: Add purgeable shrinker state helpers")
Cc: Arvind Yadav <arvind.yadav@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: intel-xe@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v7.1+
Assisted-by: LLM
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 469fa4d5feb5..cc78283b702c 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -954,6 +954,8 @@ static int xe_bo_move_notify(struct xe_bo *bo,
*
* Transfers pages between shrinkable and purgeable buckets when the BO
* purgeable state changes. Called automatically from xe_bo_set_purgeable_state().
+ * For pinned BOs, whose pages are not accounted, only the purgeable flag is
+ * updated, so that the correct bucket is used when the BO is unpinned.
*/
static void xe_bo_set_purgeable_shrinker(struct xe_bo *bo,
enum xe_madv_purgeable_state new_state)
@@ -970,7 +972,8 @@ static void xe_bo_set_purgeable_shrinker(struct xe_bo *bo,
return;
xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
- tt_pages = tt->num_pages;
+ /* Pinned bos are not accounted. Only update the purgeable flag. */
+ tt_pages = xe_bo_is_pinned(bo) ? 0 : tt->num_pages;
if (!xe_tt->purgeable && new_state == XE_MADV_PURGEABLE_DONTNEED) {
xe_tt->purgeable = true;
--
2.56.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] drm/xe: Don't transfer shrinker pages for pinned bos on purgeable state change
2026-10-09 7:00 [PATCH] drm/xe: Don't transfer shrinker pages for pinned bos on purgeable state change Thomas Hellström
@ 2026-10-09 8:38 ` Matthew Auld
0 siblings, 0 replies; 2+ messages in thread
From: Matthew Auld @ 2026-10-09 8:38 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Arvind Yadav, Matthew Brost, Himal Prasad Ghimiray, Rodrigo Vivi,
stable
On 09/10/2026 08:00, Thomas Hellström wrote:
> Pinned bos have their pages removed from the shrinker's shrinkable /
> purgeable counts on pin, and added back on unpin according to the
> bo's purgeable state at that time.
>
> However, xe_bo_set_purgeable_shrinker() unconditionally transfers
> pages between the shrinkable and purgeable counts. If the purgeable
> state of a pinned bo changes, for example by userspace madvising
> DONTNEED on a VMA of a bo that is also pinned as a scanout buffer,
> this underflows one count and, after unpin, leaves the other one
> permanently inflated.
>
> Only update the purgeable flag for pinned bos, and leave the page
> accounting to unpin.
>
> Fixes: 536a2ead3a8f ("drm/xe/bo: Add purgeable shrinker state helpers")
> Cc: Arvind Yadav <arvind.yadav@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Cc: <stable@vger.kernel.org> # v7.1+
> Assisted-by: LLM
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-09 8:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-09 7:00 [PATCH] drm/xe: Don't transfer shrinker pages for pinned bos on purgeable state change Thomas Hellström
2026-10-09 8:38 ` Matthew Auld
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox