public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 10/16] drm/i915: Remove (struct_mutex) locking for wait-ioctl
Date: Thu, 04 Aug 2016 11:26:04 +0300	[thread overview]
Message-ID: <1470299164.3633.20.camel@linux.intel.com> (raw)
In-Reply-To: <1470075758-13871-11-git-send-email-chris@chris-wilson.co.uk>

On ma, 2016-08-01 at 19:22 +0100, Chris Wilson wrote:
> With a bit of care (and leniency) we can iterate over the object and
> wait for previous rendering to complete with judicial use of atomic
> reference counting. The ABI requires us to ensure that an active object
> is eventually flushed (like the busy-ioctl) which is guaranteed by our
> management of requests (i.e. everything that is submitted to hardware is
> flushed in the same request). All we have to do is ensure that we can
> detect when the requests are complete for reporting when the object is
> idle (without triggering ETIME) - this is handled by
> __i915_wait_request.
> 
> The biggest danger in the code is walking the object without holding any
> locks. We iterate over the set of last requests and carefully grab a
> reference upon it. (If it is changing beneath us, that is the usual
> userspace race and even with locking you get the same indeterminate
> results.) If the request is unreferenced beneath us, it will be disposed
> of into the request cache - so we have to carefully order the retrieval
> of the request pointer with its removal, and to do this we employ RCU on
> the request cache and upon the last_request pointer tracking.
> 
> The impact of this is actually quite small - the return to userspace
> following the wait was already lockless. What we achieve here is
> completing an already finished wait without hitting the struct_mutex,
> our hold is quite short and so we are typically just a victim of
> contention rather than a cause.
> 

The commit message seems little bit disconnect with the code, making
the patch sound much more complex than it is. Is it up to date? Or
maybe parts of this explanation would belong to an earlier patch?

> +	active = __I915_BO_ACTIVE(obj);
> +	for_each_active(active, idx) {
> +		ret = i915_gem_active_wait_unlocked(&obj->last_read[idx], true,
> +						    args->timeout_ns >= 0 ? &args->timeout_ns : NULL,
> +						    to_rps_client(file));

Long line.

This and explanation touched up,

Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>

Regards, Joonas
-- 
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-08-04  8:26 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-01 18:22 Put RCU request lookup to use Chris Wilson
2016-08-01 18:22 ` [PATCH 01/16] drm/i915: Introduce i915_gem_active_wait_unlocked() Chris Wilson
2016-08-03 11:41   ` Joonas Lahtinen
2016-08-03 11:56     ` Chris Wilson
2016-08-03 12:04       ` Chris Wilson
2016-08-03 13:30         ` Joonas Lahtinen
2016-08-03 13:43           ` Chris Wilson
2016-08-04 11:51             ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 02/16] drm/i915: Convert non-blocking waits for requests over to using RCU Chris Wilson
2016-08-03 13:23   ` Joonas Lahtinen
2016-08-03 13:36     ` Chris Wilson
2016-08-03 13:41       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 03/16] drm/i915: Convert non-blocking userptr " Chris Wilson
2016-08-03 13:27   ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 04/16] drm/i915/userptr: Remove superfluous interruptible=false on waiting Chris Wilson
2016-08-03 13:43   ` Joonas Lahtinen
2016-08-03 13:49     ` Chris Wilson
2016-08-04 11:53       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 05/16] drm/i915: Enable i915_gem_wait_for_idle() without holding struct_mutex Chris Wilson
2016-08-01 19:28   ` Chris Wilson
2016-08-04 11:50     ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 06/16] drm/gem/shrinker: Wait before acquiring struct_mutex under oom Chris Wilson
2016-08-04  6:46   ` Joonas Lahtinen
2016-08-04  6:52     ` Chris Wilson
2016-08-01 18:22 ` [PATCH 07/16] drm/i915: Tidy generation of the GTT mmap offset Chris Wilson
2016-08-04  7:25   ` Joonas Lahtinen
2016-08-04  7:30     ` Chris Wilson
2016-08-04 11:57       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 08/16] drm/i915: Remove unused no-shrinker-steal Chris Wilson
2016-08-04  7:26   ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 09/16] drm/i915: Do a nonblocking wait first in pread/pwrite Chris Wilson
2016-08-04  7:53   ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 10/16] drm/i915: Remove (struct_mutex) locking for wait-ioctl Chris Wilson
2016-08-04  8:26   ` Joonas Lahtinen [this message]
2016-08-04  8:37     ` Chris Wilson
2016-08-04 10:02     ` Chris Wilson
2016-08-04 12:00       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 11/16] drm/i915: Remove (struct_mutex) locking for busy-ioctl Chris Wilson
2016-08-04 10:25   ` Joonas Lahtinen
2016-08-04 10:30     ` Chris Wilson
2016-08-05  7:05   ` Joonas Lahtinen
2016-08-05  7:34     ` Chris Wilson
2016-08-05  8:06       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 12/16] drm/i915: Reduce locking inside swfinish ioctl Chris Wilson
2016-08-04 10:32   ` Joonas Lahtinen
2016-08-04 10:48     ` Chris Wilson
2016-08-01 18:22 ` [PATCH 13/16] drm/i915: Remove pinned check from madvise ioctl Chris Wilson
2016-08-04 10:36   ` Joonas Lahtinen
2016-08-04 10:42     ` Chris Wilson
2016-08-04 11:47       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 14/16] drm/i915: Remove locking for get_tiling Chris Wilson
2016-08-04 10:40   ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 15/16] drm/i915: Repack fence tiling mode and stride into a single integer Chris Wilson
2016-08-04 11:17   ` Joonas Lahtinen
2016-08-04 11:34     ` Chris Wilson
2016-08-04 11:36       ` Joonas Lahtinen
2016-08-04 11:41     ` Chris Wilson
2016-08-04 12:02       ` Joonas Lahtinen
2016-08-01 18:22 ` [PATCH 16/16] drm/i915: Assert that the request hasn't been retired Chris Wilson
2016-08-04 11:18   ` Joonas Lahtinen
2016-08-02  5:00 ` ✗ Ro.CI.BAT: failure for series starting with [01/16] drm/i915: Introduce i915_gem_active_wait_unlocked() Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1470299164.3633.20.camel@linux.intel.com \
    --to=joonas.lahtinen@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox