diff options
author | Maarten Lankhorst <m.b.lankhorst@gmail.com> | 2013-06-27 07:48:24 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-06-27 22:04:09 -0400 |
commit | 3482032457f50cae196f6397ebec7f5f2ad3cf7d (patch) | |
tree | 7f41fe11224f91d1fb1b90edb0ccec56970cc921 /drivers/gpu | |
parent | c43f9b16991950c00621641ef2c5cd4a3af2a052 (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.c | 105 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_execbuf_util.c | 9 |
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 | } |
185 | EXPORT_SYMBOL(ttm_bo_add_to_lru); | ||
185 | 186 | ||
186 | int ttm_bo_del_from_lru(struct ttm_buffer_object *bo) | 187 | int 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 | ||
207 | int 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 | } | ||
234 | EXPORT_SYMBOL(ttm_bo_reserve); | ||
235 | |||
236 | static void ttm_bo_ref_bug(struct kref *list_kref) | 208 | static 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 | ||
248 | int ttm_bo_reserve(struct ttm_buffer_object *bo, | 220 | void 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 | |||
269 | int 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 | } | ||
292 | EXPORT_SYMBOL(ttm_bo_reserve_slowpath); | ||
293 | |||
294 | void 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 | |||
300 | void 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 | } | ||
308 | EXPORT_SYMBOL(ttm_bo_unreserve); | ||
309 | |||
310 | void 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 | } |
318 | EXPORT_SYMBOL(ttm_bo_unreserve_ticket); | 229 | EXPORT_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); |