[Mesa-dev] [PATCH] amdgpu: Add R600_DEBUG flag to reserve VMID per ctx.

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Oct 31 15:50:43 UTC 2017



On 10/31/2017 04:40 PM, Andrey Grodzovsky wrote:
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
> ---
>   configure.ac                                  | 2 +-
>   src/gallium/drivers/radeon/r600_pipe_common.c | 1 +
>   src/gallium/drivers/radeon/r600_pipe_common.h | 1 +
>   src/gallium/winsys/amdgpu/drm/amdgpu_cs.c     | 8 ++++++++
>   src/gallium/winsys/amdgpu/drm/amdgpu_cs.h     | 3 +++
>   src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 1 +
>   src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h | 1 +
>   7 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 9aa02f5..efc653a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -74,7 +74,7 @@ AC_SUBST([OPENCL_VERSION])
>   # in the first entry.
>   LIBDRM_REQUIRED=2.4.75
>   LIBDRM_RADEON_REQUIRED=2.4.71
> -LIBDRM_AMDGPU_REQUIRED=2.4.85
> +LIBDRM_AMDGPU_REQUIRED=2.4.86
>   LIBDRM_INTEL_REQUIRED=2.4.75
>   LIBDRM_NVVIEUX_REQUIRED=2.4.66
>   LIBDRM_NOUVEAU_REQUIRED=2.4.66
> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
> index b77d859..3364dac 100644
> --- a/src/gallium/drivers/radeon/r600_pipe_common.c
> +++ b/src/gallium/drivers/radeon/r600_pipe_common.c
> @@ -851,6 +851,7 @@ static const struct debug_named_value common_debug_options[] = {
>   	{ "dpbb", DBG(DPBB), "Enable DPBB." },
>   	{ "dfsm", DBG(DFSM), "Enable DFSM." },
>   	{ "nooutoforder", DBG(NO_OUT_OF_ORDER), "Disable out-of-order rasterization" },
> +	{ "reserve_vmid", DBG(RESERVE_VMID), "Force VMID resrvation per context." },

"reservation".

Can you also explain a bit what that stuff is? :)

Thanks!

>   
>   	DEBUG_NAMED_VALUE_END /* must be last */
>   };
> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
> index a7c91cb..94c8d4f 100644
> --- a/src/gallium/drivers/radeon/r600_pipe_common.h
> +++ b/src/gallium/drivers/radeon/r600_pipe_common.h
> @@ -107,6 +107,7 @@ enum {
>   	DBG_NO_DISCARD_RANGE,
>   	DBG_NO_WC,
>   	DBG_CHECK_VM,
> +	DBG_RESERVE_VMID,
>   
>   	/* 3D engine options: */
>   	DBG_SWITCH_ON_EOP,
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
> index 8f43e93..1155492 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
> @@ -256,6 +256,14 @@ static struct radeon_winsys_ctx *amdgpu_ctx_create(struct radeon_winsys *ws)
>         goto error_create;
>      }
>   
> +   if (ctx->ws->reserve_vmid) {
> +	   r = amdgpu_vm_reserve_vmid(ctx->ctx, 0);
> +	   if (r) {
> +		fprintf(stderr, "amdgpu: amdgpu_cs_ctx_create failed. (%i)\n", r);
> +		goto error_create;
> +	   }
> +   }
> +
>      alloc_buffer.alloc_size = ctx->ws->info.gart_page_size;
>      alloc_buffer.phys_alignment = ctx->ws->info.gart_page_size;
>      alloc_buffer.preferred_heap = AMDGPU_GEM_DOMAIN_GTT;
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> index 1c3d0f0..d023841 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> @@ -162,6 +162,9 @@ static inline bool amdgpu_fence_is_syncobj(struct amdgpu_fence *fence)
>   static inline void amdgpu_ctx_unref(struct amdgpu_ctx *ctx)
>   {
>      if (p_atomic_dec_zero(&ctx->refcount)) {
> +      if (ctx->ws->reserve_vmid)
> +         amdgpu_vm_unreserve_vmid(ctx->ctx, 0);
> +
>         amdgpu_cs_ctx_free(ctx->ctx);
>         amdgpu_bo_free(ctx->user_fence_bo);
>         FREE(ctx);
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> index a210a27..b80a988 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> @@ -73,6 +73,7 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
>   
>      ws->check_vm = strstr(debug_get_option("R600_DEBUG", ""), "check_vm") != NULL;
>      ws->debug_all_bos = debug_get_option_all_bos();
> +   ws->reserve_vmid = strstr(debug_get_option("R600_DEBUG", ""), "reserve_vmid") != NULL;
>   
>      return true;
>   
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
> index 8b62e2d..b4a3422 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
> @@ -81,6 +81,7 @@ struct amdgpu_winsys {
>   
>      bool check_vm;
>      bool debug_all_bos;
> +   bool reserve_vmid;
>   
>      /* List of all allocated buffers */
>      mtx_t global_bo_list_lock;
> 


More information about the mesa-dev mailing list