diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_object.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 57 |
1 files changed, 6 insertions, 51 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index a598d0049aa5..7d6b8e88f746 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <drm/drmP.h> | 34 | #include <drm/drmP.h> |
35 | #include "radeon_drm.h" | 35 | #include "radeon_drm.h" |
36 | #include "radeon.h" | 36 | #include "radeon.h" |
37 | #include "radeon_trace.h" | ||
37 | 38 | ||
38 | 39 | ||
39 | int radeon_ttm_init(struct radeon_device *rdev); | 40 | int radeon_ttm_init(struct radeon_device *rdev); |
@@ -146,6 +147,7 @@ retry: | |||
146 | list_add_tail(&bo->list, &rdev->gem.objects); | 147 | list_add_tail(&bo->list, &rdev->gem.objects); |
147 | mutex_unlock(&bo->rdev->gem.mutex); | 148 | mutex_unlock(&bo->rdev->gem.mutex); |
148 | } | 149 | } |
150 | trace_radeon_bo_create(bo); | ||
149 | return 0; | 151 | return 0; |
150 | } | 152 | } |
151 | 153 | ||
@@ -302,34 +304,9 @@ void radeon_bo_list_add_object(struct radeon_bo_list *lobj, | |||
302 | struct list_head *head) | 304 | struct list_head *head) |
303 | { | 305 | { |
304 | if (lobj->wdomain) { | 306 | if (lobj->wdomain) { |
305 | list_add(&lobj->list, head); | 307 | list_add(&lobj->tv.head, head); |
306 | } else { | 308 | } else { |
307 | list_add_tail(&lobj->list, head); | 309 | list_add_tail(&lobj->tv.head, head); |
308 | } | ||
309 | } | ||
310 | |||
311 | int radeon_bo_list_reserve(struct list_head *head) | ||
312 | { | ||
313 | struct radeon_bo_list *lobj; | ||
314 | int r; | ||
315 | |||
316 | list_for_each_entry(lobj, head, list){ | ||
317 | r = radeon_bo_reserve(lobj->bo, false); | ||
318 | if (unlikely(r != 0)) | ||
319 | return r; | ||
320 | lobj->reserved = true; | ||
321 | } | ||
322 | return 0; | ||
323 | } | ||
324 | |||
325 | void radeon_bo_list_unreserve(struct list_head *head) | ||
326 | { | ||
327 | struct radeon_bo_list *lobj; | ||
328 | |||
329 | list_for_each_entry(lobj, head, list) { | ||
330 | /* only unreserve object we successfully reserved */ | ||
331 | if (lobj->reserved && radeon_bo_is_reserved(lobj->bo)) | ||
332 | radeon_bo_unreserve(lobj->bo); | ||
333 | } | 310 | } |
334 | } | 311 | } |
335 | 312 | ||
@@ -340,14 +317,11 @@ int radeon_bo_list_validate(struct list_head *head) | |||
340 | u32 domain; | 317 | u32 domain; |
341 | int r; | 318 | int r; |
342 | 319 | ||
343 | list_for_each_entry(lobj, head, list) { | 320 | r = ttm_eu_reserve_buffers(head); |
344 | lobj->reserved = false; | ||
345 | } | ||
346 | r = radeon_bo_list_reserve(head); | ||
347 | if (unlikely(r != 0)) { | 321 | if (unlikely(r != 0)) { |
348 | return r; | 322 | return r; |
349 | } | 323 | } |
350 | list_for_each_entry(lobj, head, list) { | 324 | list_for_each_entry(lobj, head, tv.head) { |
351 | bo = lobj->bo; | 325 | bo = lobj->bo; |
352 | if (!bo->pin_count) { | 326 | if (!bo->pin_count) { |
353 | domain = lobj->wdomain ? lobj->wdomain : lobj->rdomain; | 327 | domain = lobj->wdomain ? lobj->wdomain : lobj->rdomain; |
@@ -370,25 +344,6 @@ int radeon_bo_list_validate(struct list_head *head) | |||
370 | return 0; | 344 | return 0; |
371 | } | 345 | } |
372 | 346 | ||
373 | void radeon_bo_list_fence(struct list_head *head, void *fence) | ||
374 | { | ||
375 | struct radeon_bo_list *lobj; | ||
376 | struct radeon_bo *bo; | ||
377 | struct radeon_fence *old_fence = NULL; | ||
378 | |||
379 | list_for_each_entry(lobj, head, list) { | ||
380 | bo = lobj->bo; | ||
381 | spin_lock(&bo->tbo.lock); | ||
382 | old_fence = (struct radeon_fence *)bo->tbo.sync_obj; | ||
383 | bo->tbo.sync_obj = radeon_fence_ref(fence); | ||
384 | bo->tbo.sync_obj_arg = NULL; | ||
385 | spin_unlock(&bo->tbo.lock); | ||
386 | if (old_fence) { | ||
387 | radeon_fence_unref(&old_fence); | ||
388 | } | ||
389 | } | ||
390 | } | ||
391 | |||
392 | int radeon_bo_fbdev_mmap(struct radeon_bo *bo, | 347 | int radeon_bo_fbdev_mmap(struct radeon_bo *bo, |
393 | struct vm_area_struct *vma) | 348 | struct vm_area_struct *vma) |
394 | { | 349 | { |