aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-02-15 10:59:57 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-16 17:46:24 -0500
commit418aa0c296ddb5df90c4e94f995cfd3f3c9e96dc (patch)
treead4be1eb7a8537b33c479418f6f749f7f827f1d2 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
parent7ea235653328644b5ba8707e65484446a118e193 (diff)
drm/amdgpu: cleanup gem init/finit
Remove the double housekeeping and use something sane to forcefuly delete BOs on unload. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
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/*