[PATCH] amdgpu: Add R600_DEBUG flag to reserve VMID per ctx.
Andrey Grodzovsky
andrey.grodzovsky at amd.com
Tue Oct 31 15:56:36 UTC 2017
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>
More information about the amd-gfx
mailing list