winsys/amdgpu: Add R600_DEBUG flag to reserve VMID per ctx.
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Thu, 2 Nov 2017 14:50:39 +0000 (10:50 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 3 Nov 2017 17:06:17 +0000 (18:06 +0100)
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@amd.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
configure.ac
meson.build
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeon/r600_pipe_common.h
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h

index 9aa02f55ded7737830c7ce5ffb060e07dcf77150..0116b90743ff64cb6eb3f6f0b1b814f7c20b0ee4 100644 (file)
@@ -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
index d22d49535af114f27275bf0edfd7cc9301c11859..3ceaec483a39f398797ac38821f16e0797a0ae82 100644 (file)
@@ -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.85')
+  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')
index 856e8abc2d9c77fd5913ed6f27f3b51e994fdc3d..478f626b2995229d9898681c606dc2169f4c8031 100644 (file)
@@ -848,6 +848,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 reservation per context." },
 
        DEBUG_NAMED_VALUE_END /* must be last */
 };
index 711594164ca672aa139e3174b68e48b218a79434..a45921e72b6eba06cd55c1684738301e418a6b62 100644 (file)
@@ -104,6 +104,7 @@ enum {
        DBG_NO_DISCARD_RANGE,
        DBG_NO_WC,
        DBG_CHECK_VM,
+       DBG_RESERVE_VMID,
 
        /* 3D engine options: */
        DBG_SWITCH_ON_EOP,
index a4c06cfa7ea336229cc12613ec78c7f1cb431cb9..5f7654bef8c8501f9b0816c89b4c73a2b677ebeb 100644 (file)
@@ -69,6 +69,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;
 
@@ -88,6 +89,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);
 
@@ -338,6 +342,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. */
index 7a9b02db9011b65c0cc6ba5e63c7b94751d83f85..59a5ecaeccb54eef23d3f9ff88503f72312c8908 100644 (file)
@@ -77,6 +77,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;