On 2017-10-31 11:50 AM, Samuel Pitoiset wrote: > > > 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? :) It allows to have fixed VMID assigned to a process, otherwise each time a command is processed the next available VMID is assigned according to a policy in KMD (amdgpu_vm_grab_id). Thanks, Andrey > > 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; >> -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20171031/cc110a46/attachment-0001.html>