From: Thomas Hellström Date: Thu, 18 Sep 2025 14:28:47 +0000 (+0200) Subject: drm/xe/pm: Hold the validation lock around evicting user-space bos for suspend X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1364a9ead45f62a49533331687dc894f5a057cfe;p=thirdparty%2Fkernel%2Flinux.git drm/xe/pm: Hold the validation lock around evicting user-space bos for suspend During pm notifier eviction we may still race with validations. Ensure those are blocked out during eviction to ensure we have access to as much system memory as possible. During the suspend operation itself, we run single-threaded so that shouldn't be a problem. Signed-off-by: Thomas Hellström Reviewed-by: Matthew Auld Link: https://lore.kernel.org/r/20250918142848.21807-2-thomas.hellstrom@linux.intel.com --- diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index d6625c71115b1..1ec03ef19d9e8 100644 --- a/drivers/gpu/drm/xe/xe_pm.c +++ b/drivers/gpu/drm/xe/xe_pm.c @@ -329,9 +329,15 @@ static int xe_pm_notifier_callback(struct notifier_block *nb, switch (action) { case PM_HIBERNATION_PREPARE: case PM_SUSPEND_PREPARE: + { + struct xe_validation_ctx ctx; + reinit_completion(&xe->pm_block); xe_pm_runtime_get(xe); + (void)xe_validation_ctx_init(&ctx, &xe->val, NULL, + (struct xe_val_flags) {.exclusive = true}); err = xe_bo_evict_all_user(xe); + xe_validation_ctx_fini(&ctx); if (err) drm_dbg(&xe->drm, "Notifier evict user failed (%d)\n", err); @@ -344,6 +350,7 @@ static int xe_pm_notifier_callback(struct notifier_block *nb, * allocations. */ break; + } case PM_POST_HIBERNATION: case PM_POST_SUSPEND: complete_all(&xe->pm_block);