From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>,
Intel-gfx@lists.freedesktop.org,
Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Subject: Re: [RFC 1/2] drm/i915: Move ioremap_wc tracking onto VMA
Date: Wed, 13 Apr 2016 10:14:50 +0100 [thread overview]
Message-ID: <570E0E0A.4000801@linux.intel.com> (raw)
In-Reply-To: <20160413090408.GB15577@nuc-i3427.alporthouse.com>
On 13/04/16 10:04, Chris Wilson wrote:
> On Wed, Apr 13, 2016 at 09:45:03AM +0100, Tvrtko Ursulin wrote:
>>
>> On 12/04/16 17:21, Chris Wilson wrote:
>>> On Tue, Apr 12, 2016 at 04:56:51PM +0100, Tvrtko Ursulin wrote:
>>>> From: Chris Wilson <chris@chris-wilson.co.uk>
>>>>
>>>> By tracking the iomapping on the VMA itself, we can share that area
>>>> between multiple users. Also by only revoking the iomapping upon
>>>> unbinding from the mappable portion of the GGTT, we can keep that iomap
>>>> across multiple invocations (e.g. execlists context pinning).
>>>>
>>>> v2:
>>>> * Rebase on nightly;
>>>> * added kerneldoc. (Tvrtko Ursulin)
>>>>
>>>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>>> ---
>>>> drivers/gpu/drm/i915/i915_gem.c | 2 ++
>>>> drivers/gpu/drm/i915/i915_gem_gtt.c | 38 +++++++++++++++++++++++++++++++++++++
>>>> drivers/gpu/drm/i915/i915_gem_gtt.h | 38 +++++++++++++++++++++++++++++++++++++
>>>> drivers/gpu/drm/i915/intel_fbdev.c | 8 +++-----
>>>> 4 files changed, 81 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
>>>> index b37ffea8b458..6a485630595e 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem.c
>>>> @@ -3393,6 +3393,8 @@ static int __i915_vma_unbind(struct i915_vma *vma, bool wait)
>>>> ret = i915_gem_object_put_fence(obj);
>>>> if (ret)
>>>> return ret;
>>>> +
>>>> + i915_vma_iounmap(vma);
>>>> }
>>>>
>>>> trace_i915_vma_unbind(vma);
>>>> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
>>>> index c5cb04907525..b2a8a14e8dcb 100644
>>>> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
>>>> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
>>>> @@ -3626,3 +3626,41 @@ i915_ggtt_view_size(struct drm_i915_gem_object *obj,
>>>> return obj->base.size;
>>>> }
>>>> }
>>>> +
>>>> +void *i915_vma_iomap(struct drm_i915_private *dev_priv,
>>>> + struct i915_vma *vma)
>>>> +{
>>>> + struct drm_i915_gem_object *obj = vma->obj;
>>>> + struct i915_ggtt *ggtt = &dev_priv->ggtt;
>>>> +
>>>> + if (WARN_ON(!obj->map_and_fenceable))
>>>> + return ERR_PTR(-ENODEV);
>>>> +
>>>> + BUG_ON(!vma->is_ggtt);
>>>> + BUG_ON(vma->ggtt_view.type != I915_GGTT_VIEW_NORMAL);
>>>> + BUG_ON((vma->bound & GLOBAL_BIND) == 0);
>>>> +
>>>> + if (vma->iomap == NULL) {
>>>> + void *ptr;
>>>
>>> We could extract ggtt from the is_ggtt vma->vm that would remove the
>>> dev_priv parameter and make the callers a bit tidier.
>>>
>>> static inline struct i915_ggtt *to_ggtt(struct i915_address_space *vm)
>>> {
>>> BUG_ON(!i915_is_ggtt(vm));
>>> return container_of(vm, struct i915_ggtt, base);
>>> }
>>>
>>>> +
>>>> + ptr = ioremap_wc(ggtt->mappable_base + vma->node.start,
>>>> + obj->base.size);
>>>> + if (ptr == NULL) {
>>>> + int ret;
>>>> +
>>>> + /* Too many areas already allocated? */
>>>> + ret = i915_gem_evict_vm(vma->vm, true);
>>>> + if (ret)
>>>> + return ERR_PTR(ret);
>>>> +
>>>> + ptr = ioremap_wc(ggtt->mappable_base + vma->node.start,
>>>> + obj->base.size);
>>>
>>> No, we really don't want to create a new ioremap for every caller when
>>> we already have one, ggtt->mappable. Hence,
>>> io-mapping: Specify mapping size for io_mapping_map_wc
>>> being its preceeding patch. The difference is huge on Braswell.
>>
>> I was following the principle of least change for this one since it
>> does remain the same in that respect as the current code. Goal was
>> to unblock the GuC early unpin / execlist no retired queue series
>> and not get into the trap of inflating the dependencies too much. I
>> thought to add this and default context cleanup but you keep adding
>> things to the pile. :)
>
> Tip of the iceberg. Only we have lots of icebergs. And the occasional
> dragon.
>
>> I'll have a look at your io_mapping stuff to see how much it would
>> add to the series. Remember I said I'll add the stable ctx id
>> patches as well. Do we need to come up with a plan here?
>
> We more or less own io_mapping, for this it is just one patch to add a
> pass-through parameter to ioremap_wc that's required for 32bit.
>
> I could mutter about the patch before this being quite a major
> bugfix...
>
>> I could have two separate series to simplify dependencies a bit:
>>
>> 1. GuC premature unpin and
>> 2. execlist no retired queue.
>>
>> The stack for the first one could look like (not as patches but
>> conceptually):
>>
>> 1. default context cleanup
>> 2. any io_mapping patches of yours
>> 3. i915_vma_iomap or WC pin_map as you suggested in the other reply.
>> 4. previous / pinned context
>>
>> Execlist no retired queue would then be:
>>
>> 1. stable ctx id
>> 2. removal of i915_gem_request_unreference__unlocked
>> 3. execlist no retired queue
>>
>> If I did not forget about something.
>>
>> At any point in any series we could add things like
>> i915_gem_request.c or those patches which move around the context
>> init.
>
> Could I see you some drm_mm.c patches after that?
If I am competent enough to help with them sure.
Does this mean above sounds like a plan to you? Two series containing
the listed items?
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-04-13 9:14 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-12 15:56 [RFC 1/2] drm/i915: Move ioremap_wc tracking onto VMA Tvrtko Ursulin
2016-04-12 15:56 ` [RFC 2/2] drm/i915: Use i915_vma_iomap from the ringbuffer Tvrtko Ursulin
2016-04-12 16:23 ` Chris Wilson
2016-04-12 16:21 ` [RFC 1/2] drm/i915: Move ioremap_wc tracking onto VMA Chris Wilson
2016-04-13 8:45 ` Tvrtko Ursulin
2016-04-13 9:04 ` Chris Wilson
2016-04-13 9:14 ` Tvrtko Ursulin [this message]
2016-04-13 9:56 ` Chris Wilson
2016-04-13 6:58 ` ✗ Fi.CI.BAT: failure for series starting with [RFC,1/2] " 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=570E0E0A.4000801@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=Intel-gfx@lists.freedesktop.org \
--cc=chris@chris-wilson.co.uk \
--cc=tvrtko.ursulin@intel.com \
/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 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.