All of lore.kernel.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 v2 06/11] drm/i915: Move pinning of dev_priv->kernel_context into its creator
Date: Wed, 25 May 2016 12:25:12 +0300	[thread overview]
Message-ID: <1464168312.4875.8.camel@linux.intel.com> (raw)
In-Reply-To: <1464003258-23669-7-git-send-email-chris@chris-wilson.co.uk>

On ma, 2016-05-23 at 12:34 +0100, Chris Wilson wrote:
> Rather than have every context ask "am I owned by the kernel? pin!",
> move that logic into the creator of the kernel context, in order to
> improve code comprehension.
> 
> v2: Throw away the user_handle on failure to allocate the ppgtt.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_context.c | 53 +++++++++++++++------------------
>  1 file changed, 24 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index a4c6377eea32..474174c20be2 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -303,9 +303,7 @@ static struct i915_gem_context *
>  i915_gem_create_context(struct drm_device *dev,
>  			struct drm_i915_file_private *file_priv)
>  {
> -	const bool is_global_default_ctx = file_priv == NULL;
>  	struct i915_gem_context *ctx;
> -	int ret = 0;
>  
>  	BUG_ON(!mutex_is_locked(&dev->struct_mutex));
>  
> @@ -313,30 +311,15 @@ i915_gem_create_context(struct drm_device *dev,
>  	if (IS_ERR(ctx))
>  		return ctx;
>  
> -	if (is_global_default_ctx && ctx->legacy_hw_ctx.rcs_state) {
> -		/* We may need to do things with the shrinker which
> -		 * require us to immediately switch back to the default
> -		 * context. This can cause a problem as pinning the
> -		 * default context also requires GTT space which may not
> -		 * be available. To avoid this we always pin the default
> -		 * context.
> -		 */
> -		ret = i915_gem_obj_ggtt_pin(ctx->legacy_hw_ctx.rcs_state,
> -					    get_context_alignment(to_i915(dev)), 0);
> -		if (ret) {
> -			DRM_DEBUG_DRIVER("Couldn't pin %d\n", ret);
> -			goto err_destroy;
> -		}
> -	}
> -
>  	if (USES_FULL_PPGTT(dev)) {
>  		struct i915_hw_ppgtt *ppgtt = i915_ppgtt_create(dev, file_priv);
>  
> -		if (IS_ERR_OR_NULL(ppgtt)) {
> +		if (IS_ERR(ppgtt)) {
>  			DRM_DEBUG_DRIVER("PPGTT setup failed (%ld)\n",
>  					 PTR_ERR(ppgtt));
> -			ret = PTR_ERR(ppgtt);
> -			goto err_unpin;
> +			idr_remove(&file_priv->context_idr, ctx->user_handle);
> +			i915_gem_context_put(ctx);
> +			return ERR_CAST(ppgtt);
>  		}
>  
>  		ctx->ppgtt = ppgtt;
> @@ -345,14 +328,6 @@ i915_gem_create_context(struct drm_device *dev,
>  	trace_i915_context_create(ctx);
>  
>  	return ctx;
> -
> -err_unpin:
> -	if (is_global_default_ctx && ctx->legacy_hw_ctx.rcs_state)
> -		i915_gem_object_ggtt_unpin(ctx->legacy_hw_ctx.rcs_state);
> -err_destroy:
> -	idr_remove(&file_priv->context_idr, ctx->user_handle);
> -	i915_gem_context_put(ctx);
> -	return ERR_PTR(ret);

Don't remove a perfectly good error path.

>  }
>  
>  static void i915_gem_context_unpin(struct i915_gem_context *ctx,
> @@ -426,6 +401,26 @@ int i915_gem_context_init(struct drm_device *dev)
>  		return PTR_ERR(ctx);
>  	}
>  
> +	if (ctx->legacy_hw_ctx.rcs_state) {
> +		int ret;
> +
> +		/* We may need to do things with the shrinker which
> +		 * require us to immediately switch back to the default
> +		 * context. This can cause a problem as pinning the
> +		 * default context also requires GTT space which may not
> +		 * be available. To avoid this we always pin the default
> +		 * context.
> +		 */
> +		ret = i915_gem_obj_ggtt_pin(ctx->legacy_hw_ctx.rcs_state,
> +					    get_context_alignment(dev_priv), 0);
> +		if (ret) {
> +			DRM_ERROR("Failed to pinned default global context (error %d)\n",
> +				  ret);
> +			i915_gem_context_put(ctx);

And please make this into teardown path.

> +			return ret;
> +		}
> +	}
> +
>  	dev_priv->kernel_context = ctx;
>  
>  	DRM_DEBUG_DRIVER("%s context support initialized\n",
-- 
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

  parent reply	other threads:[~2016-05-25  9:25 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-23 11:34 Context churn Chris Wilson
2016-05-23 11:34 ` [PATCH v2 01/11] drm/i915: Rename struct intel_context Chris Wilson
2016-05-23 11:34 ` [PATCH v2 02/11] drm/i915: Apply lockdep annotations to i915_gem_context.c Chris Wilson
2016-05-23 11:34 ` [PATCH v2 03/11] drm/i915: Rename and inline i915_gem_context_get() Chris Wilson
2016-05-23 11:34 ` [PATCH v2 04/11] drm/i915: Rename i915_gem_context_reference/unreference() Chris Wilson
2016-05-24 11:21   ` Chris Wilson
2016-05-23 11:34 ` [PATCH v2 05/11] drm/i915: Name the inner most per-engine intel_context struct Chris Wilson
2016-05-23 11:34 ` [PATCH v2 06/11] drm/i915: Move pinning of dev_priv->kernel_context into its creator Chris Wilson
2016-05-23 12:09   ` Tvrtko Ursulin
2016-05-23 12:16     ` Chris Wilson
2016-05-23 12:23       ` Tvrtko Ursulin
2016-05-25  9:25   ` Joonas Lahtinen [this message]
2016-05-23 11:34 ` [PATCH v2 07/11] drm/i915: Show i915_gem_context owner in debugfs Chris Wilson
2016-05-23 12:18   ` Tvrtko Ursulin
2016-05-25  9:18   ` Joonas Lahtinen
2016-05-23 11:34 ` [PATCH v2 08/11] drm/i915: Put the kernel_context in drm_i915_private next to its friends Chris Wilson
2016-05-23 11:34 ` [PATCH v2 09/11] drm/i915: Merge legacy+execlists context structs Chris Wilson
2016-05-23 11:34 ` [PATCH v2 10/11] drm/i915: Rearrange i915_gem_context Chris Wilson
2016-05-25  9:15   ` Joonas Lahtinen
2016-05-23 11:34 ` [PATCH v2 11/11] drm/i915: Show context objects in debugfs/i915_gem_objects Chris Wilson
2016-05-23 12:31   ` Tvrtko Ursulin
2016-05-23 12:40     ` Chris Wilson
2016-05-23 13:01     ` [PATCH v3] drm/i915/debugfs: Show context objects in i915_gem_objects Chris Wilson
2016-05-23 13:42       ` kbuild test robot
2016-05-23 13:50       ` kbuild test robot
2016-05-24 11:15       ` Tvrtko Ursulin
2016-05-25  9:55       ` Joonas Lahtinen
2016-05-25 10:00         ` Chris Wilson
2016-05-25  9:33   ` [PATCH v2 11/11] drm/i915: Show context objects in debugfs/i915_gem_objects Joonas Lahtinen
2016-05-23 12:01 ` ✓ Ro.CI.BAT: success for series starting with [v2,01/11] drm/i915: Rename struct intel_context Patchwork
2016-05-23 14:30 ` ✗ Ro.CI.BAT: failure for series starting with [v2,01/11] drm/i915: Rename struct intel_context (rev2) Patchwork
2016-05-24 13:53 ` [CI 01/10] drm/i915: Rename struct intel_context Chris Wilson
2016-05-24 13:53   ` [CI 02/10] drm/i915: Apply lockdep annotations to i915_gem_context.c Chris Wilson
2016-05-24 13:53   ` [CI 03/10] drm/i915: Rename and inline i915_gem_context_get() Chris Wilson
2016-05-24 13:53   ` [CI 04/10] drm/i915: Name the inner most per-engine intel_context struct Chris Wilson
2016-05-24 13:53   ` [CI 05/10] drm/i915: Move pinning of dev_priv->kernel_context into its creator Chris Wilson
2016-05-24 13:53   ` [CI 06/10] drm/i915: Show i915_gem_context owner in debugfs Chris Wilson
2016-05-24 13:53   ` [CI 07/10] drm/i915: Put the kernel_context in drm_i915_private next to its friends Chris Wilson
2016-05-24 13:53   ` [CI 08/10] drm/i915: Merge legacy+execlists context structs Chris Wilson
2016-05-24 13:53   ` [CI 09/10] drm/i915: Rearrange i915_gem_context Chris Wilson
2016-05-24 13:53   ` [CI 10/10] drm/i915/debugfs: Show context objects in i915_gem_objects Chris Wilson
2016-05-24 14:19 ` ✗ Ro.CI.BAT: warning for series starting with [v2,01/11] drm/i915: Rename struct intel_context (rev10) 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=1464168312.4875.8.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 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.