From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, Intel-gfx@lists.freedesktop.org
Subject: Re: [RFC 3/5] drm/i915: Infrastructure for supporting different GGTT views per object
Date: Mon, 03 Nov 2014 16:34:29 +0000 [thread overview]
Message-ID: <5457AE95.1000509@linux.intel.com> (raw)
In-Reply-To: <20141103155821.GY26941@phenom.ffwll.local>
On 11/03/2014 03:58 PM, Daniel Vetter wrote:
> On Thu, Oct 30, 2014 at 04:39:36PM +0000, Tvrtko Ursulin wrote:
>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>
>> Things like reliable GGTT mappings and mirrored 3d display will need to be
>> to map the same object twice into the GGTT.
>>
>> Add a ggtt_view field per VMA and select the page view based on the type
>> of the view.
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> lgtm overall, some comments for polish in the crucial parts below.
>
>> @@ -2189,3 +2191,21 @@ i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
>>
>> return vma;
>> }
>> +
>> +void i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
>> + u32 flags)
>> +{
>> + struct sg_table *pages;
>> +
>> + if (vma->ggtt_view.get_pages)
>> + pages = vma->ggtt_view.get_pages(&vma->ggtt_view, vma->obj);
>> + else
>> + pages = vma->obj->pages;
>> +
>> + if (pages && !IS_ERR(pages)) {
>> + vma->bind_vma(vma, pages, cache_level, flags);
>> +
>> + if (vma->ggtt_view.put_pages)
>> + vma->ggtt_view.put_pages(&vma->ggtt_view);
>> + }
>
> tbh this looks a bit like overboarding generalism to me ;-) Imo
> - drop the ->put_pages callback and just free the sg table if you have
> one.
> - drop teh ->get_pages callbacks and replace it with a new
> i915_vma_shuffle_pages or similar you'll call for non-standard ggtt
> views. Two reasons: shuffle is a more accurate name than get since this
> version doesn't grab it's own page references any more, and with
> currently just one internal user for this a vtable is serious overkill.
I actually thought I will need semi-persistent view for this in the
future patch which get_pages()/put_pages() caters for.
More precisely it would be for holding onto created pages during view
creation across the i915_gem_gtt_prepare_object and i915_vma_bind in
i915_gem_object_bind_to_vm.
Also, ->put_pages looks much neater to me from i915_gem_vma_destroy
rather than leaking the knowledge of internal implementation. That is of
course if you will allow the above justification for making the
alternative view at least semi-persistent.
As additional bonus it has the same semantics to GEM get/put_pages.
>> +}
>> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
>> index 66bc44b..cbaddda 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
>> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
>> @@ -109,6 +109,23 @@ typedef gen8_gtt_pte_t gen8_ppgtt_pde_t;
>> #define GEN8_PPAT_ELLC_OVERRIDE (0<<2)
>> #define GEN8_PPAT(i, x) ((uint64_t) (x) << ((i) * 8))
>>
>> +enum i915_ggtt_view_type {
>> + I915_GGTT_VIEW_NORMAL = 0,
>> +};
>> +
>> +struct i915_ggtt_view {
>> + enum i915_ggtt_view_type type;
>> + unsigned int vma_id;
>
> Imo vma_id and ggtt_view_type are fairly redundant. If you _really_ want
> to make this super-generic (i.e. for ppgtt) just call it gtt_view instead
> fo ggtt_view. But I wouldn't bother.
So you suggest to imply VMA id to be equal to GGTT view type and
VMA_ID_DEFAULT to be fixed to I915_GGTT_VIEW_NORMAL? Is it not a
logistics/maintenance problem to sync the two then?
> Removing vma_id also removes the int, which I'd ask you to replace with an
> explicit enum anyway ;-)
Yes I left that for later. I mean, when at stage to be talking about
such detail it is a happy place.
>> + struct sg_table *pages;
>
> This seems unused - leftover from a previous patch which kept the sgtable
> around?
Yes, survived refactoring somehow, shouldn't be here.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2014-11-03 16:34 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-30 16:39 [RFC 0/5] Preparation for multiple VMA and GGTT views per GEM object Tvrtko Ursulin
2014-10-30 16:39 ` [PATCH 1/5] drm/i915: Move flags describing VMA mappings into the VMA Tvrtko Ursulin
2014-10-30 16:39 ` [RFC 2/5] drm/i915: Prepare for the idea there can be multiple VMA per VM Tvrtko Ursulin
2014-10-30 16:39 ` [RFC 3/5] drm/i915: Infrastructure for supporting different GGTT views per object Tvrtko Ursulin
2014-10-30 16:41 ` Chris Wilson
2014-10-30 16:55 ` Tvrtko Ursulin
2014-11-03 15:58 ` Daniel Vetter
2014-11-03 16:34 ` Tvrtko Ursulin [this message]
2014-11-03 16:52 ` Daniel Vetter
2014-11-03 17:20 ` Tvrtko Ursulin
2014-11-03 17:29 ` Daniel Vetter
2014-11-04 11:15 ` Tvrtko Ursulin
2014-11-04 11:23 ` Daniel Vetter
2014-11-03 17:35 ` Daniel Vetter
2014-11-04 10:25 ` Tvrtko Ursulin
2014-10-30 16:39 ` [PATCH 4/5] drm/i915: Make scatter-gather helper available to the driver Tvrtko Ursulin
2014-11-03 16:02 ` Daniel Vetter
2014-11-03 16:18 ` Tvrtko Ursulin
2014-11-03 16:53 ` Daniel Vetter
2014-11-03 16:05 ` Daniel Vetter
2014-11-03 20:30 ` Chris Wilson
2014-11-04 11:56 ` Imre Deak
2014-10-30 16:39 ` [RFC 5/5] drm/i915: Make intel_pin_and_fence_fb_obj take plane and framebuffer Tvrtko Ursulin
2014-11-03 16:18 ` Daniel Vetter
2014-11-06 14:39 ` [RFC] drm/i915: Infrastructure for supporting different GGTT views per object Tvrtko Ursulin
2014-11-12 17:02 ` Daniel Vetter
2014-11-24 12:32 ` Tvrtko Ursulin
2014-11-24 12:36 ` Chris Wilson
2014-11-24 13:57 ` Daniel Vetter
2014-11-27 14:52 ` [PATCH] " Tvrtko Ursulin
2014-11-28 0:59 ` [PATCH] drm/i915: Infrastructure for supporting shuang.he
2014-11-28 17:31 ` [PATCH] drm/i915: Infrastructure for supporting different GGTT views per object Daniel Vetter
2014-12-01 11:32 ` Tvrtko Ursulin
2014-12-01 14:46 ` Tvrtko Ursulin
2014-12-01 16:01 ` Daniel Vetter
2014-12-01 16:39 ` Tvrtko Ursulin
2014-12-01 17:16 ` Daniel Vetter
2014-12-01 17:24 ` Tvrtko Ursulin
2014-12-01 16:07 ` Daniel Vetter
2014-12-01 16:34 ` Tvrtko Ursulin
2014-12-01 17:19 ` Daniel Vetter
2014-12-01 17:50 ` Tvrtko Ursulin
2014-12-02 9:12 ` 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=5457AE95.1000509@linux.intel.com \
--to=tvrtko.ursulin@linux.intel.com \
--cc=Intel-gfx@lists.freedesktop.org \
--cc=daniel.vetter@ffwll.ch \
--cc=daniel@ffwll.ch \
/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.