<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 2017-10-31 11:50 AM, Samuel Pitoiset
wrote:<br>
</div>
<blockquote
cite="mid:078f3ca7-e108-6ce6-4e07-65d8f569eb45@gmail.com"
type="cite">
<br>
<br>
On 10/31/2017 04:40 PM, Andrey Grodzovsky wrote:
<br>
<blockquote type="cite">Signed-off-by: Andrey Grodzovsky
<a class="moz-txt-link-rfc2396E" href="mailto:andrey.grodzovsky@amd.com"><andrey.grodzovsky@amd.com></a>
<br>
---
<br>
 configure.ac                                 | 2 +-
<br>
 src/gallium/drivers/radeon/r600_pipe_common.c | 1 +
<br>
 src/gallium/drivers/radeon/r600_pipe_common.h | 1 +
<br>
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c    | 8 ++++++++
<br>
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.h    | 3 +++
<br>
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 1 +
<br>
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h | 1 +
<br>
 7 files changed, 16 insertions(+), 1 deletion(-)
<br>
<br>
diff --git a/configure.ac b/configure.ac
<br>
index 9aa02f5..efc653a 100644
<br>
--- a/configure.ac
<br>
+++ b/configure.ac
<br>
@@ -74,7 +74,7 @@ AC_SUBST([OPENCL_VERSION])
<br>
 # in the first entry.
<br>
 LIBDRM_REQUIRED=2.4.75
<br>
 LIBDRM_RADEON_REQUIRED=2.4.71
<br>
-LIBDRM_AMDGPU_REQUIRED=2.4.85
<br>
+LIBDRM_AMDGPU_REQUIRED=2.4.86
<br>
 LIBDRM_INTEL_REQUIRED=2.4.75
<br>
 LIBDRM_NVVIEUX_REQUIRED=2.4.66
<br>
 LIBDRM_NOUVEAU_REQUIRED=2.4.66
<br>
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c
b/src/gallium/drivers/radeon/r600_pipe_common.c
<br>
index b77d859..3364dac 100644
<br>
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
<br>
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
<br>
@@ -851,6 +851,7 @@ static const struct debug_named_value
common_debug_options[] = {
<br>
     { "dpbb", DBG(DPBB), "Enable DPBB." },
<br>
     { "dfsm", DBG(DFSM), "Enable DFSM." },
<br>
     { "nooutoforder", DBG(NO_OUT_OF_ORDER), "Disable
out-of-order rasterization" },
<br>
+Â Â Â { "reserve_vmid", DBG(RESERVE_VMID), "Force VMID resrvation
per context." },
<br>
</blockquote>
<br>
"reservation".
<br>
<br>
Can you also explain a bit what that stuff is? :)
<br>
</blockquote>
<br>
It allows to have fixed VMID assigned to a process, otherwise each
time a command is processed the next available VMID is assigned <br>
according to a policy in KMD (amdgpu_vm_grab_id).<br>
<br>
Thanks,<br>
Andrey<br>
<br>
<span style="color: rgb(176, 204, 232); font-family: "Source Sans Pro", sans-serif; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.2px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(23, 51, 79); text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"></span>
<blockquote
cite="mid:078f3ca7-e108-6ce6-4e07-65d8f569eb45@gmail.com"
type="cite">
<br>
Thanks!
<br>
<br>
<blockquote type="cite">Â Â Â Â Â Â DEBUG_NAMED_VALUE_END /* must be
last */
<br>
 };
<br>
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h
b/src/gallium/drivers/radeon/r600_pipe_common.h
<br>
index a7c91cb..94c8d4f 100644
<br>
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
<br>
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
<br>
@@ -107,6 +107,7 @@ enum {
<br>
     DBG_NO_DISCARD_RANGE,
<br>
     DBG_NO_WC,
<br>
     DBG_CHECK_VM,
<br>
+Â Â Â DBG_RESERVE_VMID,
<br>
      /* 3D engine options: */
<br>
     DBG_SWITCH_ON_EOP,
<br>
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
<br>
index 8f43e93..1155492 100644
<br>
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
<br>
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
<br>
@@ -256,6 +256,14 @@ static struct radeon_winsys_ctx
*amdgpu_ctx_create(struct radeon_winsys *ws)
<br>
       goto error_create;
<br>
    }
<br>
 +  if (ctx->ws->reserve_vmid) {
<br>
+Â Â Â Â Â Â r = amdgpu_vm_reserve_vmid(ctx->ctx, 0);
<br>
+Â Â Â Â Â Â if (r) {
<br>
+Â Â Â Â Â Â Â fprintf(stderr, "amdgpu: amdgpu_cs_ctx_create failed.
(%i)\n", r);
<br>
+Â Â Â Â Â Â Â goto error_create;
<br>
+Â Â Â Â Â Â }
<br>
+Â Â }
<br>
+
<br>
    alloc_buffer.alloc_size =
ctx->ws->info.gart_page_size;
<br>
    alloc_buffer.phys_alignment =
ctx->ws->info.gart_page_size;
<br>
    alloc_buffer.preferred_heap = AMDGPU_GEM_DOMAIN_GTT;
<br>
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
<br>
index 1c3d0f0..d023841 100644
<br>
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
<br>
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
<br>
@@ -162,6 +162,9 @@ static inline bool
amdgpu_fence_is_syncobj(struct amdgpu_fence *fence)
<br>
 static inline void amdgpu_ctx_unref(struct amdgpu_ctx *ctx)
<br>
 {
<br>
    if (p_atomic_dec_zero(&ctx->refcount)) {
<br>
+Â Â Â Â Â if (ctx->ws->reserve_vmid)
<br>
+Â Â Â Â Â Â Â Â amdgpu_vm_unreserve_vmid(ctx->ctx, 0);
<br>
+
<br>
       amdgpu_cs_ctx_free(ctx->ctx);
<br>
       amdgpu_bo_free(ctx->user_fence_bo);
<br>
       FREE(ctx);
<br>
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
<br>
index a210a27..b80a988 100644
<br>
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
<br>
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
<br>
@@ -73,6 +73,7 @@ static bool do_winsys_init(struct
amdgpu_winsys *ws, int fd)
<br>
     ws->check_vm = strstr(debug_get_option("R600_DEBUG",
""), "check_vm") != NULL;
<br>
    ws->debug_all_bos = debug_get_option_all_bos();
<br>
+Â Â ws->reserve_vmid = strstr(debug_get_option("R600_DEBUG",
""), "reserve_vmid") != NULL;
<br>
     return true;
<br>
 diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
<br>
index 8b62e2d..b4a3422 100644
<br>
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
<br>
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
<br>
@@ -81,6 +81,7 @@ struct amdgpu_winsys {
<br>
     bool check_vm;
<br>
    bool debug_all_bos;
<br>
+Â Â bool reserve_vmid;
<br>
     /* List of all allocated buffers */
<br>
    mtx_t global_bo_list_lock;
<br>
<br>
</blockquote>
</blockquote>
<br>
</body>
</html>