mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
drm/i915/gem: Check object_can_migrate from object_migrate
We don't roll them together entirely because there are still a couple cases where we want a separate can_migrate check. For instance, the display code checks that you can migrate a buffer to LMEM before it accepts it in fb_create. The dma-buf import code also uses it to do an early check and return a different error code if someone tries to attach a LMEM-only dma-buf to another driver. However, no one actually wants to call object_migrate when can_migrate has failed. The stated intention is for self-tests but none of those actually take advantage of this unsafe migration. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Cc: Daniel Vetter <daniel@ffwll.ch> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Signed-off-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210723172142.3273510-2-jason@jlekstrand.net
This commit is contained in:
parent
816753c06f
commit
f3170ba8c9
|
|
@ -584,12 +584,6 @@ bool i915_gem_object_can_migrate(struct drm_i915_gem_object *obj,
|
|||
* completed yet, and to accomplish that, i915_gem_object_wait_migration()
|
||||
* must be called.
|
||||
*
|
||||
* This function is a bit more permissive than i915_gem_object_can_migrate()
|
||||
* to allow for migrating objects where the caller knows exactly what is
|
||||
* happening. For example within selftests. More specifically this
|
||||
* function allows migrating I915_BO_ALLOC_USER objects to regions
|
||||
* that are not in the list of allowable regions.
|
||||
*
|
||||
* Note: the @ww parameter is not used yet, but included to make sure
|
||||
* callers put some effort into obtaining a valid ww ctx if one is
|
||||
* available.
|
||||
|
|
@ -616,11 +610,8 @@ int i915_gem_object_migrate(struct drm_i915_gem_object *obj,
|
|||
if (obj->mm.region == mr)
|
||||
return 0;
|
||||
|
||||
if (!i915_gem_object_evictable(obj))
|
||||
return -EBUSY;
|
||||
|
||||
if (!obj->ops->migrate)
|
||||
return -EOPNOTSUPP;
|
||||
if (!i915_gem_object_can_migrate(obj, id))
|
||||
return -EINVAL;
|
||||
|
||||
return obj->ops->migrate(obj, mr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,11 +61,6 @@ static int igt_create_migrate(struct intel_gt *gt, enum intel_region_id src,
|
|||
if (err)
|
||||
continue;
|
||||
|
||||
if (!i915_gem_object_can_migrate(obj, dst)) {
|
||||
err = -EINVAL;
|
||||
continue;
|
||||
}
|
||||
|
||||
err = i915_gem_object_migrate(obj, &ww, dst);
|
||||
if (err)
|
||||
continue;
|
||||
|
|
@ -114,11 +109,6 @@ static int lmem_pages_migrate_one(struct i915_gem_ww_ctx *ww,
|
|||
return err;
|
||||
|
||||
if (i915_gem_object_is_lmem(obj)) {
|
||||
if (!i915_gem_object_can_migrate(obj, INTEL_REGION_SMEM)) {
|
||||
pr_err("object can't migrate to smem.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = i915_gem_object_migrate(obj, ww, INTEL_REGION_SMEM);
|
||||
if (err) {
|
||||
pr_err("Object failed migration to smem\n");
|
||||
|
|
@ -137,11 +127,6 @@ static int lmem_pages_migrate_one(struct i915_gem_ww_ctx *ww,
|
|||
}
|
||||
|
||||
} else {
|
||||
if (!i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM)) {
|
||||
pr_err("object can't migrate to lmem.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = i915_gem_object_migrate(obj, ww, INTEL_REGION_LMEM);
|
||||
if (err) {
|
||||
pr_err("Object failed migration to lmem\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user