public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Dave Gordon <david.s.gordon@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2 11/28] drm/i915: Add IRQ friendly request deference facility
Date: Wed, 19 Nov 2014 18:08:54 +0000	[thread overview]
Message-ID: <546CDCB6.40609@intel.com> (raw)
In-Reply-To: <546CCDD3.40808@Intel.com>

On 19/11/14 17:05, John Harrison wrote:
> On 19/11/2014 13:28, Daniel, Thomas wrote:
>>> -----Original Message-----
>>> From: Harrison, John C
>>> Sent: Wednesday, November 19, 2014 12:26 PM
>>> To: Daniel, Thomas; Intel-GFX@Lists.FreeDesktop.Org
>>> Subject: Re: [Intel-gfx] [PATCH v2 11/28] drm/i915: Add IRQ friendly
>>> request
>>> deference facility
>>>
>>> On 18/11/2014 09:34, Daniel, Thomas wrote:
>>>>> -----Original Message-----
>>>>> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On
>>>>> Behalf Of John.C.Harrison@Intel.com
>>>>> Sent: Friday, November 14, 2014 12:19 PM
>>>>> To: Intel-GFX@Lists.FreeDesktop.Org
>>>>> Subject: [Intel-gfx] [PATCH v2 11/28] drm/i915: Add IRQ friendly
>>>>> request deference facility
>>>>>
>>>>> From: John Harrison <John.C.Harrison@Intel.com>
>>>>>
>>>>> The next patches in the series convert some display related seqno
>>>>> usage to request structure usage. However, the request dereference
>>>>> introduced must be done from interrupt context. As the dereference
>>>>> potentially involves freeing the request structure and thus calling
>>>>> lots of non-interrupt friendly code, this poses a problem.
>>>>>
>>>>> The solution is to add an IRQ friendly version of the dereference
>>>>> function. All this does is to add the request structure to a
>>>>> 'delayed free'
>>> list and return.
>>>>> The retire code, which is run periodically, then processes this list
>>>>> and does the actual dereferencing of the request structures.
>>>>>
>>>>> v2: Added a count to allow for multiple IRQ dereferences of the same
>>>>> request at a time.
>>>>>
>>>>> For: VIZ-4377
>>>>> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
>>>>> ---
>>>>>    drivers/gpu/drm/i915/i915_drv.h         |    7 +++++++
>>>>>    drivers/gpu/drm/i915/i915_gem.c         |   33
>>>>> +++++++++++++++++++++++++++++++
>>>>>    drivers/gpu/drm/i915/intel_lrc.c        |    2 ++
>>>>>    drivers/gpu/drm/i915/intel_ringbuffer.c |    3 +++
>>>>>    drivers/gpu/drm/i915/intel_ringbuffer.h |    2 ++
>>>>>    5 files changed, 47 insertions(+)
>>>>>
[snip]
>>>>>
>>>>> @@ -5055,6 +5087,7 @@ init_ring_lists(struct intel_engine_cs *ring)  {
>>>>>        INIT_LIST_HEAD(&ring->active_list);
>>>>>        INIT_LIST_HEAD(&ring->request_list);
>>>>> +    INIT_LIST_HEAD(&ring->delayed_free_list);
>>>> Same comment as before - multiple init points for this list.
>>>>
>>>> Thomas.
>>> Same reply as before: the function already exists and is already
>>> initialising
>> You forgot to reply to the mailing list last time.
>>
>>> other lists therefore it seems sensible to initialise the new list as
>>> well.
>>> Whether the function as a whole is redundant or not is unclear. The same
>> You've introduced a new list - surely it's your responsibility to know
>> where it should be initialised?
> My list is an extension of the existing 'request_list'. Therefore is
> seems prudent to initialise it wherever better minds than me have deemed
> it necessary to initialise request_list itself.
> 
>>> duplicated initialisation also happens in
>>> intel_render_ring_init_dri(). If
>>> someone thinks these can all be simplified and wants to only do the
>>> initialisation once in one place then that should be another patch.
>> Agree that the other duplicate inits should also be fixed up in
>> another patch but that's no reason to add another dupe.
>>
>> Thomas.
> 
> Only if it is definitely a redundant duplication. Currently, it is not
> obvious that it is therefore I am being safe/sensible by following the
> existing convention.

One initialisation of (ring->request_list) is in init_ring_lists()
which does nothing other than what it's name implies. It's called
only from i915_gem_load(), in turn called (early) from i915_driver_load().

The same list is also (re)initialised in i915_gem_init_rings() in legacy
mode or logical_ring_init() in LRC mode; these are called (indirectly)
from i915_gem_init_hw(). But this is called not only from
i915_gem_init() (which is called via i915_load_modeset_init() later in
i915_driver_load()), but also from i915_reset(), i915_drm_resume(),
and i915_gem_entervt_ioctl!

It is therefore entirely likely that it is necessary to REinitialise
these lists in various situations after driver loading is complete; but
conversely quite possible that they have to be set up very early, before
the modeset call -- and in any case there's the possibility that the
modeset may not be executed, on sufficiently ancient h/w :(

It should be possible to test whether the early initialisation is
necessary by poisoning the list {head,tail} values so that it triggers
an OOPS if they're dereferenced before they're reinitialised.

There's one more initialisation in intel_render_ring_init_dri(), but
this code is not reachable on post-gen5 h/w and therefore by definition
not when using execlists.

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

  parent reply	other threads:[~2014-11-19 18:09 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-14 12:18 [PATCH v2 00/28] Replace seqno values with request structures John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 01/28] drm/i915: Ensure OLS & PLR are always in sync John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 02/28] drm/i915: Add reference count to request structure John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 03/28] drm/i915: Add helper functions to aid seqno -> request transition John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 04/28] drm/i915: Replace last_[rwf]_seqno with last_[rwf]_req John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 05/28] drm/i915: Convert i915_gem_ring_throttle to use requests John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 06/28] drm/i915: Ensure requests stick around during waits John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 07/28] drm/i915: Remove 'outstanding_lazy_seqno' John.C.Harrison
2014-11-14 12:18 ` [PATCH v2 08/28] drm/i915: Make 'i915_gem_check_olr' actually check by request not seqno John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 09/28] drm/i915: Convert 'last_flip_req' to be a request not a seqno John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 10/28] drm/i915: Convert i915_wait_seqno to i915_wait_request John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 11/28] drm/i915: Add IRQ friendly request deference facility John.C.Harrison
2014-11-18  9:34   ` Daniel, Thomas
2014-11-19 12:25     ` John Harrison
2014-11-19 13:28       ` Daniel, Thomas
2014-11-19 17:05         ` John Harrison
2014-11-19 17:28           ` Daniel, Thomas
2014-11-19 18:08           ` Dave Gordon [this message]
2014-11-14 12:19 ` [PATCH v2 12/28] drm/i915: Convert mmio_flip::seqno to struct request John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 13/28] drm/i915: Convert __wait_seqno() to __wait_request() John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 14/28] drm/i915: Remove obsolete seqno parameter from 'i915_add_request' John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 15/28] drm/i915: Convert 'flip_queued_seqno' into 'flip_queued_request' John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 16/28] drm/i915: Convert trace functions from seqno to request John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 17/28] drm/i915: Convert 'trace_irq' to use requests rather than seqnos John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 18/28] drm/i915: Convert 'ring_idle()' to use requests not seqnos John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 19/28] drm/i915: Connect requests to rings at creation not submission John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 20/28] drm/i915: Convert 'i915_seqno_passed' calls into 'i915_gem_request_completed' John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 21/28] drm/i915: Remove the now redundant 'obj->ring' John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 22/28] drm/i915: Cache request completion status John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 23/28] drm/i915: Zero fill the request structure John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 24/28] drm/i915: Spinlock protection for request list John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 25/28] drm/i915: Interrupt driven request completion John.C.Harrison
2014-11-18  9:40   ` Daniel, Thomas
2014-11-19 12:29     ` John Harrison
2014-11-14 12:19 ` [PATCH v2 26/28] drm/i915: Remove obsolete parameter to i915_gem_request_completed() John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 27/28] drm/i915: Add unique id to the request structure for debugging John.C.Harrison
2014-11-14 12:19 ` [PATCH v2 28/28] drm/i915: Additional request structure tracing John.C.Harrison
2014-11-14 20:54   ` [PATCH v2 28/28] drm/i915: Additional request structure shuang.he
2014-11-19 19:28 ` [PATCH v2 00/28] Replace seqno values with request structures Daniel Vetter
2014-11-20  9:32   ` Daniel, Thomas
2014-11-21 20:52     ` Daniel Vetter
2014-11-21 20:56       ` Daniel Vetter

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=546CDCB6.40609@intel.com \
    --to=david.s.gordon@intel.com \
    --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