aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 0a80febbc1b2..2e26a517f2d6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -84,22 +84,31 @@ retry:
84 } 84 }
85 *obj = &robj->gem_base; 85 *obj = &robj->gem_base;
86 86
87 mutex_lock(&adev->gem.mutex);
88 list_add_tail(&robj->list, &adev->gem.objects);
89 mutex_unlock(&adev->gem.mutex);
90
91 return 0; 87 return 0;
92} 88}
93 89
94int amdgpu_gem_init(struct amdgpu_device *adev) 90void amdgpu_gem_force_release(struct amdgpu_device *adev)
95{ 91{
96 INIT_LIST_HEAD(&adev->gem.objects); 92 struct drm_device *ddev = adev->ddev;
97 return 0; 93 struct drm_file *file;
98}
99 94
100void amdgpu_gem_fini(struct amdgpu_device *adev) 95 mutex_lock(&ddev->struct_mutex);
101{ 96
102 amdgpu_bo_force_delete(adev); 97 list_for_each_entry(file, &ddev->filelist, lhead) {
98 struct drm_gem_object *gobj;
99 int handle;
100
101 WARN_ONCE(1, "Still active user space clients!\n");
102 spin_lock(&file->table_lock);
103 idr_for_each_entry(&file->object_idr, gobj, handle) {
104 WARN_ONCE(1, "And also active allocations!\n");
105 drm_gem_object_unreference(gobj);
106 }
107 idr_destroy(&file->object_idr);
108 spin_unlock(&file->table_lock);
109 }
110
111 mutex_unlock(&ddev->struct_mutex);
103} 112}
104 113
105/* 114/*