[Mesa-dev] [PATCH v2 3/4] i965: Pass the EGL/DRI context priority through to the kernel

Tapani Pälli tapani.palli at intel.com
Tue Apr 18 10:59:47 UTC 2017



On 04/11/2017 07:11 PM, Chris Wilson wrote:
> Decode the EGL/DRI priority enum into the [-1023, 1023] range as
> interpreted by the kernel and call DRM_I915_GEM_CONTEXT_SETPARAM to
> adjust the priority. We use 0 as the default medium priority (also the
> kernel default) and so only need adjust up or down. By only doing the
> adjustment if not setting to medium, we can faithfully report any error
> whilst setting without worrying about kernel version.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> ---
>   src/mesa/drivers/dri/i965/brw_bufmgr.c  | 22 ++++++++++++++++++++++
>   src/mesa/drivers/dri/i965/brw_bufmgr.h  |  3 +++
>   src/mesa/drivers/dri/i965/brw_context.c | 13 +++++++++++++
>   3 files changed, 38 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> index 1c5ad2467a..ec00ba5af3 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> @@ -1205,6 +1205,28 @@ brw_create_hw_context(struct brw_bufmgr *bufmgr)
>      return create.ctx_id;
>   }
>   
> +int brw_hw_context_set_priority(struct brw_bufmgr *bufmgr,
> +                                uint32_t ctx_id,
> +                                int priority)
> +{
> +#ifdef I915_CONTEXT_PARAM_PRIORITY
> +   struct drm_i915_gem_context_param p = {
> +      .ctx_id = ctx_id,
> +      .param = I915_CONTEXT_PARAM_PRIORITY,
> +      .value = priority,
> +   };
> +   int err;
> +
> +   err = 0;
> +   if (drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &p))
> +      err = -errno;
> +
> +   return err;
> +#else
> +   return -EINVAL;
> +#endif
> +}
> +
>   void
>   brw_destroy_hw_context(struct brw_bufmgr *bufmgr, uint32_t ctx_id)
>   {
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> index b27178b6fe..9b90ad4131 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> @@ -263,6 +263,9 @@ void *brw_bo_map__wc(struct brw_bo *bo);
>   int brw_bo_wait(struct brw_bo *bo, int64_t timeout_ns);
>   
>   uint32_t brw_create_hw_context(struct brw_bufmgr *bufmgr);
> +int brw_hw_context_set_priority(struct brw_bufmgr *bufmgr,
> +                                uint32_t ctx_id,
> +                                int priority);
>   void brw_destroy_hw_context(struct brw_bufmgr *bufmgr, uint32_t ctx_id);
>   
>   int brw_bo_gem_export_to_prime(struct brw_bo *bo, int *prime_fd);
> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> index f13c61b3e0..bdc132ff84 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.c
> +++ b/src/mesa/drivers/dri/i965/brw_context.c
> @@ -1102,6 +1102,19 @@ brwCreateContext(gl_api api,
>            intelDestroyContext(driContextPriv);
>            return false;
>         }
> +
> +      int hw_priority = 0;
> +      switch (priority) {
> +      case __DRI_CTX_PRIORITY_LOW: hw_priority = -1023/2; break;
> +      case __DRI_CTX_PRIORITY_HIGH: hw_priority = 1023/2; break;
> +      }
> +      if (hw_priority &&
> +          brw_hw_context_set_priority(brw->bufmgr, brw->hw_ctx, hw_priority)) {
> +         fprintf(stderr, "Failed to set priority [%d] for hardware context.\n",
> +                 hw_priority);
> +         intelDestroyContext(driContextPriv);
> +         return false;

I run some testing against these patches and for me this failure path 
does not work correctly (crash inside intelDestroyContext). I will send 
my test to Piglit mailing list for you to see. In order to trigger this, 
I've set disp->Extensions.IMG_context_priority to EGL_TRUE (instead of 
asking it via dri2_renderer_query_integer) and then try creating context 
with HIGH priority level.



> +      }
>      }
>   
>      if (brw_init_pipe_control(brw, devinfo)) {
> 


More information about the mesa-dev mailing list