diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_object.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 55 |
1 files changed, 4 insertions, 51 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index e939cb6a91cc..a8594d289bcf 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -293,34 +293,9 @@ void radeon_bo_list_add_object(struct radeon_bo_list *lobj, | |||
293 | struct list_head *head) | 293 | struct list_head *head) |
294 | { | 294 | { |
295 | if (lobj->wdomain) { | 295 | if (lobj->wdomain) { |
296 | list_add(&lobj->list, head); | 296 | list_add(&lobj->tv.head, head); |
297 | } else { | 297 | } else { |
298 | list_add_tail(&lobj->list, head); | 298 | list_add_tail(&lobj->tv.head, head); |
299 | } | ||
300 | } | ||
301 | |||
302 | int radeon_bo_list_reserve(struct list_head *head) | ||
303 | { | ||
304 | struct radeon_bo_list *lobj; | ||
305 | int r; | ||
306 | |||
307 | list_for_each_entry(lobj, head, list){ | ||
308 | r = radeon_bo_reserve(lobj->bo, false); | ||
309 | if (unlikely(r != 0)) | ||
310 | return r; | ||
311 | lobj->reserved = true; | ||
312 | } | ||
313 | return 0; | ||
314 | } | ||
315 | |||
316 | void radeon_bo_list_unreserve(struct list_head *head) | ||
317 | { | ||
318 | struct radeon_bo_list *lobj; | ||
319 | |||
320 | list_for_each_entry(lobj, head, list) { | ||
321 | /* only unreserve object we successfully reserved */ | ||
322 | if (lobj->reserved && radeon_bo_is_reserved(lobj->bo)) | ||
323 | radeon_bo_unreserve(lobj->bo); | ||
324 | } | 299 | } |
325 | } | 300 | } |
326 | 301 | ||
@@ -331,14 +306,11 @@ int radeon_bo_list_validate(struct list_head *head) | |||
331 | u32 domain; | 306 | u32 domain; |
332 | int r; | 307 | int r; |
333 | 308 | ||
334 | list_for_each_entry(lobj, head, list) { | 309 | r = ttm_eu_reserve_buffers(head); |
335 | lobj->reserved = false; | ||
336 | } | ||
337 | r = radeon_bo_list_reserve(head); | ||
338 | if (unlikely(r != 0)) { | 310 | if (unlikely(r != 0)) { |
339 | return r; | 311 | return r; |
340 | } | 312 | } |
341 | list_for_each_entry(lobj, head, list) { | 313 | list_for_each_entry(lobj, head, tv.head) { |
342 | bo = lobj->bo; | 314 | bo = lobj->bo; |
343 | if (!bo->pin_count) { | 315 | if (!bo->pin_count) { |
344 | domain = lobj->wdomain ? lobj->wdomain : lobj->rdomain; | 316 | domain = lobj->wdomain ? lobj->wdomain : lobj->rdomain; |
@@ -361,25 +333,6 @@ int radeon_bo_list_validate(struct list_head *head) | |||
361 | return 0; | 333 | return 0; |
362 | } | 334 | } |
363 | 335 | ||
364 | void radeon_bo_list_fence(struct list_head *head, void *fence) | ||
365 | { | ||
366 | struct radeon_bo_list *lobj; | ||
367 | struct radeon_bo *bo; | ||
368 | struct radeon_fence *old_fence = NULL; | ||
369 | |||
370 | list_for_each_entry(lobj, head, list) { | ||
371 | bo = lobj->bo; | ||
372 | spin_lock(&bo->tbo.bdev->fence_lock); | ||
373 | old_fence = (struct radeon_fence *)bo->tbo.sync_obj; | ||
374 | bo->tbo.sync_obj = radeon_fence_ref(fence); | ||
375 | bo->tbo.sync_obj_arg = NULL; | ||
376 | spin_unlock(&bo->tbo.bdev->fence_lock); | ||
377 | if (old_fence) { | ||
378 | radeon_fence_unref(&old_fence); | ||
379 | } | ||
380 | } | ||
381 | } | ||
382 | |||
383 | int radeon_bo_fbdev_mmap(struct radeon_bo *bo, | 336 | int radeon_bo_fbdev_mmap(struct radeon_bo *bo, |
384 | struct vm_area_struct *vma) | 337 | struct vm_area_struct *vma) |
385 | { | 338 | { |