drm/i915/gem: Ignore readonly failures when updating relocs
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 31 Mar 2020 16:21:50 +0000 (17:21 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 31 Mar 2020 21:40:39 +0000 (22:40 +0100)
If the user passes in a readonly reloc[], by the time we notice we have
already committed to modifying the execobjects, or have indeed done so
already. Reporting the failure just compounds the issue as we have no
second pass to fall back to anymore.

"Be damned if you do, and damned if you don't."

Testcase: igt/gem_exec_reloc/readonly
Fixes: 7dc8f1143778 ("drm/i915/gem: Drop relocation slowpath")
References: fddcd00a49e9 ("drm/i915: Force the slow path after a user-write error")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Andi Shyti <andi.shyti@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200331162150.3635-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c

index cda35e6dfc446eb60398432c7302f85fd41319df..908fb877f875cb0d7f138f7984de1819b6ca8a99 100644 (file)
@@ -1540,10 +1540,8 @@ static int eb_relocate_vma(struct i915_execbuffer *eb, struct eb_vma *ev)
                                 * can read from this userspace address.
                                 */
                                offset = gen8_canonical_addr(offset & ~UPDATE);
-                               if (unlikely(__put_user(offset, &urelocs[r-stack].presumed_offset))) {
-                                       remain = -EFAULT;
-                                       goto out;
-                               }
+                               __put_user(offset,
+                                          &urelocs[r - stack].presumed_offset);
                        }
                } while (r++, --count);
                urelocs += ARRAY_SIZE(stack);