On Mon, May 16, 2016 at 01:32:44AM +0800, Zhi Wang wrote:
> GVT context will use its own shadow PPGTT, and it doesn't need a
> i915_hw_ppgtt.
> 
> This patch adds a "has_ppgtt" param to i915_gem_context(), which
> allows the caller to create a context without PPGTT
> 
> Signed-off-by: Zhi Wang <zhi.a.w...@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_context.c | 34 
> ++++++++++++++++++---------------
>  1 file changed, 19 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
> b/drivers/gpu/drm/i915/i915_gem_context.c
> index 21498e5..b952e37 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -298,7 +298,8 @@ err_out:
>   */
>  static struct intel_context *
>  i915_gem_create_context(struct drm_device *dev,
> -                     struct drm_i915_file_private *file_priv)
> +                     struct drm_i915_file_private *file_priv,
> +                     bool has_ppgtt)
>  {
>       struct drm_i915_private *dev_priv = dev->dev_private;
>       const bool is_global_default_ctx = file_priv == NULL;
> @@ -327,19 +328,22 @@ i915_gem_create_context(struct drm_device *dev,
>               }
>       }
>  
> -     if (USES_FULL_PPGTT(dev)) {
> -             struct i915_hw_ppgtt *ppgtt = i915_ppgtt_create(dev, file_priv);
> +     if (has_ppgtt) {
> +             if (USES_FULL_PPGTT(dev)) {
> +                     struct i915_hw_ppgtt *ppgtt =
> +                             i915_ppgtt_create(dev, file_priv);
>  
> -             if (IS_ERR_OR_NULL(ppgtt)) {
> -                     DRM_DEBUG_DRIVER("PPGTT setup failed (%ld)\n",
> -                                      PTR_ERR(ppgtt));
> -                     ret = PTR_ERR(ppgtt);
> -                     goto err_unpin;
> -             }
> +                     if (IS_ERR_OR_NULL(ppgtt)) {
> +                             DRM_DEBUG_DRIVER("PPGTT setup failed (%ld)\n",
> +                                             PTR_ERR(ppgtt));
> +                             ret = PTR_ERR(ppgtt);
> +                             goto err_unpin;
> +                     }
>  
> -             ctx->ppgtt = ppgtt;
> -     } else
> -             ctx->ppgtt = dev_priv->mm.aliasing_ppgtt;
> +                     ctx->ppgtt = ppgtt;
> +             } else
> +                     ctx->ppgtt = dev_priv->mm.aliasing_ppgtt;

You have to first go through the driver and update the sematics for
ctx->ppgtt == NULL. (Note in some instances you have to use the
ggtt pointer and not the appgtt, just a minor case in execbuf!).
Then tell us how you didn't spot the explosion when trying to use the
aliasing_ppgtt after freeing it.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to