[Intel-gfx] [PATCH 2/4] drm/i915: allow stolen, pre-allocated objects to avoid GTT allocation v2
Jesse Barnes
jbarnes at virtuousgeek.org
Thu May 9 21:28:16 CEST 2013
On Wed, 8 May 2013 19:12:49 -0700
Ben Widawsky <ben at bwidawsk.net> wrote:
> On Wed, May 08, 2013 at 10:45:14AM -0700, Jesse Barnes wrote:
> > In some cases, we may not need GTT address space allocated to a stolen
> > object, so allow passing -1 to the preallocated function to indicate as
> > much.
> >
> > v2: remove BUG_ON(gtt_offset & 4095) now that -1 is allowed (Ville)
> >
> > Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
> > ---
> > drivers/gpu/drm/i915/i915_gem_stolen.c | 5 ++++-
> > drivers/gpu/drm/i915/intel_pm.c | 2 +-
> > 2 files changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
> > index 913994c..89cbfab 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
> > @@ -339,7 +339,6 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
> >
> > /* KISS and expect everything to be page-aligned */
> > BUG_ON(stolen_offset & 4095);
> > - BUG_ON(gtt_offset & 4095);
> > BUG_ON(size & 4095);
> >
> > if (WARN_ON(size == 0))
> > @@ -360,6 +359,10 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
> > return NULL;
> > }
> >
> > + /* Some objects just need physical mem from stolen space */
> > + if (gtt_offset == -1)
> > + return obj;
> > +
> > /* To simplify the initialisation sequence between KMS and GTT,
> > * we allow construction of the stolen object prior to
> > * setting up the GTT space. The actual reservation will occur
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index e60cd3e..081194d 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -2877,7 +2877,7 @@ static void valleyview_setup_pctx(struct drm_device *dev)
> > pcbr_offset = (pcbr & (~4095)) - dev_priv->mm.stolen_base;
> > pctx = i915_gem_object_create_stolen_for_preallocated(dev_priv->dev,
> > pcbr_offset,
> > - pcbr_offset,
> > + -1,
> > pctx_size);
> > goto out;
> > }
>
> I'm not asking for any changes, just want clarification.
>
> Even the _i915_gem_object_create_stolen() call isn't very useful
> in this case. You really don't even want a gem object in this case, just
> to take it out of the stolen mm, so a simple call to drm_mm_create_block
> would be sufficient.
Yeah, but outside of stolen.c I thought that would be a bit
underhanded. We don't need the object really, but it doesn't hurt to
have it either, and it fits well for the case where we might need to
allocate it.
> In the case where we setup the powerctx ourselves, you really just need
> to carve it out of the allocator too, because once created, we never
> want to touch the thing... evicting it is out of the question as well.
> Therefore, similar to the previous case, all you really need is
> drm_mm_get_block().
>
> Certainly for the second case, it's much cleaner to use the existing
> APIs. It just showed up in my review that some of our object state
> doesn't make sense for the power context (read/write domains, cache
> level, has_dma_mapping, map_and_fenceable)
>
> I'd be happy with a True/False for the first two paragraphs, and an
> ignore on the third.
Yeah I'd be ok moving over to using something else for the power stuff
(and anything else that's a one time alloc, don't touch sort of
object), but it would be nicer if we had an API to do that, ideally
self-documenting.
--
Jesse Barnes, Intel Open Source Technology Center
More information about the Intel-gfx
mailing list