diff options
author | Christian König <christian.koenig@amd.com> | 2016-02-15 10:59:57 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-16 17:46:24 -0500 |
commit | 418aa0c296ddb5df90c4e94f995cfd3f3c9e96dc (patch) | |
tree | ad4be1eb7a8537b33c479418f6f749f7f827f1d2 /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
parent | 7ea235653328644b5ba8707e65484446a118e193 (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.c | 31 |
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 | ||
94 | int amdgpu_gem_init(struct amdgpu_device *adev) | 90 | void 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 | ||
100 | void 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 | /* |