mqd and fw objects are queue core objects which should remain
valid and never be unmapped and evicted for user queues to work
properly.

During eviction if these buffers are evicted the hw continue to
use the invalid addresses and caused page faults and system hung.

Signed-off-by: Sunil Khatri <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index 06b7b4228065..813df2d87dc3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -504,16 +504,20 @@ int amdgpu_userq_create_object(struct amdgpu_userq_mgr 
*uq_mgr,
                goto free_obj;
        }
 
+       r = amdgpu_bo_pin(userq_obj->obj, AMDGPU_GEM_DOMAIN_GTT);
+       if (r)
+               goto unresv;
+
        r = amdgpu_ttm_alloc_gart(&(userq_obj->obj)->tbo);
        if (r) {
                drm_file_err(uq_mgr->file, "Failed to alloc GART for userqueue 
object (%d)", r);
-               goto unresv;
+               goto unpin_bo;
        }
 
        r = amdgpu_bo_kmap(userq_obj->obj, &userq_obj->cpu_ptr);
        if (r) {
                drm_file_err(uq_mgr->file, "Failed to map BO for userqueue 
(%d)", r);
-               goto unresv;
+               goto unpin_bo;
        }
 
        userq_obj->gpu_addr = amdgpu_bo_gpu_offset(userq_obj->obj);
@@ -521,11 +525,13 @@ int amdgpu_userq_create_object(struct amdgpu_userq_mgr 
*uq_mgr,
        memset(userq_obj->cpu_ptr, 0, size);
        return 0;
 
+unpin_bo:
+       amdgpu_bo_unpin(userq_obj->obj);
 unresv:
        amdgpu_bo_unreserve(userq_obj->obj);
-
 free_obj:
        amdgpu_bo_unref(&userq_obj->obj);
+
        return r;
 }
 
@@ -533,6 +539,7 @@ void amdgpu_userq_destroy_object(struct amdgpu_userq_mgr 
*uq_mgr,
                                 struct amdgpu_userq_obj *userq_obj)
 {
        amdgpu_bo_kunmap(userq_obj->obj);
+       amdgpu_bo_unpin(userq_obj->obj);
        amdgpu_bo_unref(&userq_obj->obj);
 }
 
-- 
2.34.1

Reply via email to