All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915: Skip object locking around a no-op set-domain ioctl
@ 2019-03-21  8:05 Chris Wilson
  2019-03-21  8:41 ` ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
                   ` (8 more replies)
  0 siblings, 9 replies; 12+ messages in thread
From: Chris Wilson @ 2019-03-21  8:05 UTC (permalink / raw)
  To: intel-gfx

If we are already in the desired write domain of a set-domain ioctl,
then there is nothing for us to do and we can quickly return back to
userspace, avoiding any lock contention.

Secondary aspect of this is that we undo the arbitrary fetching and
potential flushing of all pages for a set-domain(.write=CPU) call on a
fresh object -- which was introduced simply because we do the get-pages
before taking the struct_mutex.

References: 40e62d5d6be8 ("drm/i915: Acquire the backing storage outside of struct_mutex in set-domain")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Matthew Auld <matthew.william.auld@gmail.com>
---
 drivers/gpu/drm/i915/i915_gem.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 1a684b7e8c09..e30165536f9a 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1484,7 +1484,8 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
 	if ((write_domain | read_domains) & I915_GEM_GPU_DOMAINS)
 		return -EINVAL;
 
-	/* Having something in the write domain implies it's in the read
+	/*
+	 * Having something in the write domain implies it's in the read
 	 * domain, and only that read domain.  Enforce that in the request.
 	 */
 	if (write_domain != 0 && read_domains != write_domain)
@@ -1494,7 +1495,14 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
 	if (!obj)
 		return -ENOENT;
 
-	/* Try to flush the object off the GPU without holding the lock.
+	/* Already in the desired target write domain? Nothing for us to! */
+	if (READ_ONCE(obj->write_domain) == write_domain) {
+		err = 0;
+		goto out;
+	}
+
+	/*
+	 * Try to flush the object off the GPU without holding the lock.
 	 * We will repeat the flush holding the lock in the normal manner
 	 * to catch cases where we are gazumped.
 	 */
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-03-22  1:31 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-21  8:05 [PATCH] drm/i915: Skip object locking around a no-op set-domain ioctl Chris Wilson
2019-03-21  8:41 ` ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2019-03-21  9:04 ` ✗ Fi.CI.BAT: failure " Patchwork
2019-03-21  9:11   ` Chris Wilson
2019-03-21  9:21     ` Chris Wilson
2019-03-21  9:14 ` [PATCH] " Chris Wilson
2019-03-21  9:17 ` Chris Wilson
2019-03-21  9:35 ` [PATCH v3] " Chris Wilson
2019-03-21  9:44 ` [PATCH v4] " Chris Wilson
2019-03-21 12:36 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Skip object locking around a no-op set-domain ioctl (rev4) Patchwork
2019-03-21 12:59 ` ✓ Fi.CI.BAT: success " Patchwork
2019-03-22  1:31 ` ✓ Fi.CI.IGT: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.