]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe: Retry BO allocation
authorMatthew Brost <matthew.brost@intel.com>
Thu, 6 Mar 2025 01:26:26 +0000 (17:26 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:12:54 +0000 (11:12 +0200)
[ Upstream commit 1d724a2f1b2c3f0cba4975784a808482e0631adf ]

TTM doesn't support fair eviction via WW locking, this mitigated in by
using retry loops in exec and preempt rebind worker. Extend this retry
loop to BO allocation. Once TTM supports fair eviction this patch can be
reverted.

v4:
 - Keep line break (Stuart)

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306012657.3505757-2-matthew.brost@intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/xe/xe_bo.c

index 3f5391d416d469c636d951dd6f0a2b3b5ae95dab..d1eb87cb178bd4d3fb7267b56fa57b03c404be0a 100644 (file)
@@ -2142,6 +2142,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
        struct xe_file *xef = to_xe_file(file);
        struct drm_xe_gem_create *args = data;
        struct xe_vm *vm = NULL;
+       ktime_t end = 0;
        struct xe_bo *bo;
        unsigned int bo_flags;
        u32 handle;
@@ -2214,6 +2215,10 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
                vm = xe_vm_lookup(xef, args->vm_id);
                if (XE_IOCTL_DBG(xe, !vm))
                        return -ENOENT;
+       }
+
+retry:
+       if (vm) {
                err = xe_vm_lock(vm, true);
                if (err)
                        goto out_vm;
@@ -2227,6 +2232,8 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
 
        if (IS_ERR(bo)) {
                err = PTR_ERR(bo);
+               if (xe_vm_validate_should_retry(NULL, err, &end))
+                       goto retry;
                goto out_vm;
        }