On Tue, 2024-12-17 at 15:33 -0800, Matthew Brost wrote: > 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. > > Signed-off-by: Matthew Brost <matthew.brost@xxxxxxxxx> > --- > drivers/gpu/drm/xe/xe_bo.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c > index e6c896ad5602..a670a0444e03 100644 > --- a/drivers/gpu/drm/xe/xe_bo.c > +++ b/drivers/gpu/drm/xe/xe_bo.c > @@ -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,11 +2215,14 @@ 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; > } > - Feel like we could keep this line break, but not a blocker. Looks good, thanks! Reviewed-by: Stuart Summers <stuart.summers@xxxxxxxxx> > bo = xe_bo_create_user(xe, NULL, vm, args->size, args- > >cpu_caching, > bo_flags); > > @@ -2227,6 +2231,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; > } >