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

Marek Olšák maraeo at gmail.com
Fri Nov 3 17:26:11 UTC 2017


Pushed with a fixed typo and whitespace, thanks.

Marek

On Thu, Nov 2, 2017 at 3:50 PM, Andrey Grodzovsky
<andrey.grodzovsky at amd.com> wrote:
> Fixes reverted patch f03b7c9 by doing VMID reservation per
> process and not per context.
> Also updates required amdgpu libdrm version since the change
> involved interface updates in amdgpu libdrm.
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
> ---
>  configure.ac                                  |  2 +-
>  meson.build                                   |  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.h     |  1 +
>  src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 12 ++++++++++++
>  src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h |  1 +
>  7 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 9aa02f5..0116b90 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.88
>  LIBDRM_INTEL_REQUIRED=2.4.75
>  LIBDRM_NVVIEUX_REQUIRED=2.4.66
>  LIBDRM_NOUVEAU_REQUIRED=2.4.66
> diff --git a/meson.build b/meson.build
> index 6ad8c8b..3ceaec4 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -638,7 +638,7 @@ dep_libdrm_nouveau = []
>  dep_libdrm_etnaviv = []
>  dep_libdrm_freedreno = []
>  if with_amd_vk or with_gallium_radeonsi
> -  dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.86')
> +  dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.88')
>  endif
>  if with_gallium_radeonsi or with_dri_r100 or with_dri_r200
>    dep_libdrm_radeon = dependency('libdrm_radeon', version : '>= 2.4.71')
> 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." },
>
>         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.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> index 1c3d0f0..5fe3592 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
> @@ -162,6 +162,7 @@ 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)) {
> +
>        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..7b261bb 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;
>
> @@ -92,6 +93,9 @@ static void amdgpu_winsys_destroy(struct radeon_winsys *rws)
>  {
>     struct amdgpu_winsys *ws = (struct amdgpu_winsys*)rws;
>
> +   if (ws->reserve_vmid)
> +      amdgpu_vm_unreserve_vmid(ws->dev, 0);
> +
>     if (util_queue_is_initialized(&ws->cs_queue))
>        util_queue_destroy(&ws->cs_queue);
>
> @@ -342,6 +346,14 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
>
>     util_hash_table_set(dev_tab, dev, ws);
>
> +   if (ws->reserve_vmid) {
> +          r = amdgpu_vm_reserve_vmid(dev, 0);
> +          if (r) {
> +               fprintf(stderr, "amdgpu: amdgpu_vm_reserve_vmid failed. (%i)\n", r);
> +               goto fail_cache;
> +          }
> +   }
> +
>     /* We must unlock the mutex once the winsys is fully initialized, so that
>      * other threads attempting to create the winsys from the same fd will
>      * get a fully initialized winsys and not just half-way initialized. */
> 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;
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list