aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>2013-06-27 07:48:24 -0400
committerDave Airlie <airlied@redhat.com>2013-06-27 22:04:09 -0400
commit3482032457f50cae196f6397ebec7f5f2ad3cf7d (patch)
tree7f41fe11224f91d1fb1b90edb0ccec56970cc921 /drivers/gpu
parentc43f9b16991950c00621641ef2c5cd4a3af2a052 (diff)
drm/ttm: inline ttm_bo_reserve and related calls
Makes lockdep a lot more useful. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c105
-rw-r--r--drivers/gpu/drm/ttm/ttm_execbuf_util.c9
2 files changed, 12 insertions, 102 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 5f9fe8044afc..a8a27f51e419 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -182,6 +182,7 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)
182 } 182 }
183 } 183 }
184} 184}
185EXPORT_SYMBOL(ttm_bo_add_to_lru);
185 186
186int ttm_bo_del_from_lru(struct ttm_buffer_object *bo) 187int ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
187{ 188{
@@ -204,35 +205,6 @@ int ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
204 return put_count; 205 return put_count;
205} 206}
206 207
207int ttm_bo_reserve_nolru(struct ttm_buffer_object *bo,
208 bool interruptible,
209 bool no_wait, bool use_ticket,
210 struct ww_acquire_ctx *ticket)
211{
212 int ret = 0;
213
214 if (no_wait) {
215 bool success;
216
217 /* not valid any more, fix your locking! */
218 if (WARN_ON(ticket))
219 return -EBUSY;
220
221 success = ww_mutex_trylock(&bo->resv->lock);
222 return success ? 0 : -EBUSY;
223 }
224
225 if (interruptible)
226 ret = ww_mutex_lock_interruptible(&bo->resv->lock,
227 ticket);
228 else
229 ret = ww_mutex_lock(&bo->resv->lock, ticket);
230 if (ret == -EINTR)
231 return -ERESTARTSYS;
232 return ret;
233}
234EXPORT_SYMBOL(ttm_bo_reserve);
235
236static void ttm_bo_ref_bug(struct kref *list_kref) 208static void ttm_bo_ref_bug(struct kref *list_kref)
237{ 209{
238 BUG(); 210 BUG();
@@ -245,77 +217,16 @@ void ttm_bo_list_ref_sub(struct ttm_buffer_object *bo, int count,
245 (never_free) ? ttm_bo_ref_bug : ttm_bo_release_list); 217 (never_free) ? ttm_bo_ref_bug : ttm_bo_release_list);
246} 218}
247 219
248int ttm_bo_reserve(struct ttm_buffer_object *bo, 220void ttm_bo_del_sub_from_lru(struct ttm_buffer_object *bo)
249 bool interruptible,
250 bool no_wait, bool use_ticket,
251 struct ww_acquire_ctx *ticket)
252{
253 struct ttm_bo_global *glob = bo->glob;
254 int put_count = 0;
255 int ret;
256
257 ret = ttm_bo_reserve_nolru(bo, interruptible, no_wait, use_ticket,
258 ticket);
259 if (likely(ret == 0)) {
260 spin_lock(&glob->lru_lock);
261 put_count = ttm_bo_del_from_lru(bo);
262 spin_unlock(&glob->lru_lock);
263 ttm_bo_list_ref_sub(bo, put_count, true);
264 }
265
266 return ret;
267}
268
269int ttm_bo_reserve_slowpath(struct ttm_buffer_object *bo,
270 bool interruptible, struct ww_acquire_ctx *ticket)
271{
272 struct ttm_bo_global *glob = bo->glob;
273 int put_count = 0;
274 int ret = 0;
275
276 if (interruptible)
277 ret = ww_mutex_lock_slow_interruptible(&bo->resv->lock,
278 ticket);
279 else
280 ww_mutex_lock_slow(&bo->resv->lock, ticket);
281
282 if (likely(ret == 0)) {
283 spin_lock(&glob->lru_lock);
284 put_count = ttm_bo_del_from_lru(bo);
285 spin_unlock(&glob->lru_lock);
286 ttm_bo_list_ref_sub(bo, put_count, true);
287 } else if (ret == -EINTR)
288 ret = -ERESTARTSYS;
289
290 return ret;
291}
292EXPORT_SYMBOL(ttm_bo_reserve_slowpath);
293
294void ttm_bo_unreserve_ticket_locked(struct ttm_buffer_object *bo, struct ww_acquire_ctx *ticket)
295{ 221{
296 ttm_bo_add_to_lru(bo); 222 int put_count;
297 ww_mutex_unlock(&bo->resv->lock);
298}
299
300void ttm_bo_unreserve(struct ttm_buffer_object *bo)
301{
302 struct ttm_bo_global *glob = bo->glob;
303
304 spin_lock(&glob->lru_lock);
305 ttm_bo_unreserve_ticket_locked(bo, NULL);
306 spin_unlock(&glob->lru_lock);
307}
308EXPORT_SYMBOL(ttm_bo_unreserve);
309
310void ttm_bo_unreserve_ticket(struct ttm_buffer_object *bo, struct ww_acquire_ctx *ticket)
311{
312 struct ttm_bo_global *glob = bo->glob;
313 223
314 spin_lock(&glob->lru_lock); 224 spin_lock(&bo->glob->lru_lock);
315 ttm_bo_unreserve_ticket_locked(bo, ticket); 225 put_count = ttm_bo_del_from_lru(bo);
316 spin_unlock(&glob->lru_lock); 226 spin_unlock(&bo->glob->lru_lock);
227 ttm_bo_list_ref_sub(bo, put_count, true);
317} 228}
318EXPORT_SYMBOL(ttm_bo_unreserve_ticket); 229EXPORT_SYMBOL(ttm_bo_del_sub_from_lru);
319 230
320/* 231/*
321 * Call bo->mutex locked. 232 * Call bo->mutex locked.
diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
index 7392da557be2..6c911789ae5c 100644
--- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c
+++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
@@ -44,12 +44,10 @@ static void ttm_eu_backoff_reservation_locked(struct list_head *list,
44 44
45 entry->reserved = false; 45 entry->reserved = false;
46 if (entry->removed) { 46 if (entry->removed) {
47 ttm_bo_unreserve_ticket_locked(bo, ticket); 47 ttm_bo_add_to_lru(bo);
48 entry->removed = false; 48 entry->removed = false;
49
50 } else {
51 ww_mutex_unlock(&bo->resv->lock);
52 } 49 }
50 ww_mutex_unlock(&bo->resv->lock);
53 } 51 }
54} 52}
55 53
@@ -220,7 +218,8 @@ void ttm_eu_fence_buffer_objects(struct ww_acquire_ctx *ticket,
220 bo = entry->bo; 218 bo = entry->bo;
221 entry->old_sync_obj = bo->sync_obj; 219 entry->old_sync_obj = bo->sync_obj;
222 bo->sync_obj = driver->sync_obj_ref(sync_obj); 220 bo->sync_obj = driver->sync_obj_ref(sync_obj);
223 ttm_bo_unreserve_ticket_locked(bo, ticket); 221 ttm_bo_add_to_lru(bo);
222 ww_mutex_unlock(&bo->resv->lock);
224 entry->reserved = false; 223 entry->reserved = false;
225 } 224 }
226 spin_unlock(&bdev->fence_lock); 225 spin_unlock(&bdev->fence_lock);