* [Intel-gfx] [PATCH] drm/i915: Check object_can_migrate from object_migrate
@ 2021-07-14 20:44 Jason Ekstrand
2021-07-15 12:59 ` Matthew Auld
2021-07-16 15:37 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: Check object_can_migrate from object_migrate (rev2) Patchwork
0 siblings, 2 replies; 3+ messages in thread
From: Jason Ekstrand @ 2021-07-14 20:44 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: Matthew Auld
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>
Cc: Matthew Auld <matthew.auld@intel.com>
---
drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 8 +++-----
drivers/gpu/drm/i915/gem/i915_gem_object.c | 13 ++-----------
.../gpu/drm/i915/gem/selftests/i915_gem_migrate.c | 15 ---------------
3 files changed, 5 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
index 3163f00554476..5d438b95826b9 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
@@ -173,16 +173,14 @@ static int i915_gem_dmabuf_attach(struct dma_buf *dmabuf,
struct i915_gem_ww_ctx ww;
int err;
+ if (!i915_gem_object_can_migrate(obj, INTEL_REGION_SMEM))
+ return -EOPNOTSUPP;
+
for_i915_gem_ww(&ww, err, true) {
err = i915_gem_object_lock(obj, &ww);
if (err)
continue;
- if (!i915_gem_object_can_migrate(obj, INTEL_REGION_SMEM)) {
- err = -EOPNOTSUPP;
- continue;
- }
-
err = i915_gem_object_migrate(obj, &ww, INTEL_REGION_SMEM);
if (err)
continue;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
index 9da7b288b7ede..f2244ae09a613 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
@@ -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);
}
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
index 0b7144d2991ca..28a700f08b49a 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
@@ -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");
--
2.31.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915: Check object_can_migrate from object_migrate
2021-07-14 20:44 [Intel-gfx] [PATCH] drm/i915: Check object_can_migrate from object_migrate Jason Ekstrand
@ 2021-07-15 12:59 ` Matthew Auld
2021-07-16 15:37 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: Check object_can_migrate from object_migrate (rev2) Patchwork
1 sibling, 0 replies; 3+ messages in thread
From: Matthew Auld @ 2021-07-15 12:59 UTC (permalink / raw)
To: Jason Ekstrand; +Cc: Intel Graphics Development, Matthew Auld, ML dri-devel
On Wed, 14 Jul 2021 at 21:45, Jason Ekstrand <jason@jlekstrand.net> wrote:
>
> 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>
> Cc: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: Check object_can_migrate from object_migrate (rev2)
2021-07-14 20:44 [Intel-gfx] [PATCH] drm/i915: Check object_can_migrate from object_migrate Jason Ekstrand
2021-07-15 12:59 ` Matthew Auld
@ 2021-07-16 15:37 ` Patchwork
1 sibling, 0 replies; 3+ messages in thread
From: Patchwork @ 2021-07-16 15:37 UTC (permalink / raw)
To: Jason Ekstrand; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: Check object_can_migrate from object_migrate (rev2)
URL : https://patchwork.freedesktop.org/series/92551/
State : failure
== Summary ==
Applying: drm/i915: Check object_can_migrate from object_migrate
error: sha1 information is lacking or useless (drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/i915: Check object_can_migrate from object_migrate
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-07-16 15:37 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-14 20:44 [Intel-gfx] [PATCH] drm/i915: Check object_can_migrate from object_migrate Jason Ekstrand
2021-07-15 12:59 ` Matthew Auld
2021-07-16 15:37 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: Check object_can_migrate from object_migrate (rev2) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).