.. | .. |
---|
25 | 25 | * Alex Deucher |
---|
26 | 26 | * Jerome Glisse |
---|
27 | 27 | */ |
---|
28 | | -#include <drm/drmP.h> |
---|
| 28 | + |
---|
| 29 | +#include <linux/pci.h> |
---|
| 30 | + |
---|
| 31 | +#include <drm/drm_debugfs.h> |
---|
| 32 | +#include <drm/drm_device.h> |
---|
| 33 | +#include <drm/drm_file.h> |
---|
29 | 34 | #include <drm/radeon_drm.h> |
---|
| 35 | + |
---|
30 | 36 | #include "radeon.h" |
---|
31 | 37 | |
---|
32 | 38 | void radeon_gem_object_free(struct drm_gem_object *gobj) |
---|
.. | .. |
---|
78 | 84 | } |
---|
79 | 85 | return r; |
---|
80 | 86 | } |
---|
81 | | - *obj = &robj->gem_base; |
---|
| 87 | + *obj = &robj->tbo.base; |
---|
82 | 88 | robj->pid = task_pid_nr(current); |
---|
83 | 89 | |
---|
84 | 90 | mutex_lock(&rdev->gem.mutex); |
---|
.. | .. |
---|
109 | 115 | } |
---|
110 | 116 | if (domain == RADEON_GEM_DOMAIN_CPU) { |
---|
111 | 117 | /* Asking for cpu access wait for object idle */ |
---|
112 | | - r = reservation_object_wait_timeout_rcu(robj->tbo.resv, true, true, 30 * HZ); |
---|
| 118 | + r = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, 30 * HZ); |
---|
113 | 119 | if (!r) |
---|
114 | 120 | r = -EBUSY; |
---|
115 | 121 | |
---|
.. | .. |
---|
218 | 224 | { |
---|
219 | 225 | struct radeon_device *rdev = dev->dev_private; |
---|
220 | 226 | struct drm_radeon_gem_info *args = data; |
---|
221 | | - struct ttm_mem_type_manager *man; |
---|
| 227 | + struct ttm_resource_manager *man; |
---|
222 | 228 | |
---|
223 | | - man = &rdev->mman.bdev.man[TTM_PL_VRAM]; |
---|
| 229 | + man = ttm_manager_type(&rdev->mman.bdev, TTM_PL_VRAM); |
---|
224 | 230 | |
---|
225 | 231 | args->vram_size = (u64)man->size << PAGE_SHIFT; |
---|
226 | 232 | args->vram_visible = rdev->mc.visible_vram_size; |
---|
.. | .. |
---|
269 | 275 | } |
---|
270 | 276 | r = drm_gem_handle_create(filp, gobj, &handle); |
---|
271 | 277 | /* drop reference from allocate - handle holds it now */ |
---|
272 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 278 | + drm_gem_object_put(gobj); |
---|
273 | 279 | if (r) { |
---|
274 | 280 | up_read(&rdev->exclusive_lock); |
---|
275 | 281 | r = radeon_gem_handle_lockup(rdev, r); |
---|
.. | .. |
---|
325 | 331 | goto handle_lockup; |
---|
326 | 332 | |
---|
327 | 333 | bo = gem_to_radeon_bo(gobj); |
---|
328 | | - r = radeon_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags); |
---|
| 334 | + r = radeon_ttm_tt_set_userptr(rdev, bo->tbo.ttm, args->addr, args->flags); |
---|
329 | 335 | if (r) |
---|
330 | 336 | goto release_object; |
---|
331 | 337 | |
---|
.. | .. |
---|
336 | 342 | } |
---|
337 | 343 | |
---|
338 | 344 | if (args->flags & RADEON_GEM_USERPTR_VALIDATE) { |
---|
339 | | - down_read(¤t->mm->mmap_sem); |
---|
| 345 | + mmap_read_lock(current->mm); |
---|
340 | 346 | r = radeon_bo_reserve(bo, true); |
---|
341 | 347 | if (r) { |
---|
342 | | - up_read(¤t->mm->mmap_sem); |
---|
| 348 | + mmap_read_unlock(current->mm); |
---|
343 | 349 | goto release_object; |
---|
344 | 350 | } |
---|
345 | 351 | |
---|
346 | 352 | radeon_ttm_placement_from_domain(bo, RADEON_GEM_DOMAIN_GTT); |
---|
347 | 353 | r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); |
---|
348 | 354 | radeon_bo_unreserve(bo); |
---|
349 | | - up_read(¤t->mm->mmap_sem); |
---|
| 355 | + mmap_read_unlock(current->mm); |
---|
350 | 356 | if (r) |
---|
351 | 357 | goto release_object; |
---|
352 | 358 | } |
---|
353 | 359 | |
---|
354 | 360 | r = drm_gem_handle_create(filp, gobj, &handle); |
---|
355 | 361 | /* drop reference from allocate - handle holds it now */ |
---|
356 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 362 | + drm_gem_object_put(gobj); |
---|
357 | 363 | if (r) |
---|
358 | 364 | goto handle_lockup; |
---|
359 | 365 | |
---|
.. | .. |
---|
362 | 368 | return 0; |
---|
363 | 369 | |
---|
364 | 370 | release_object: |
---|
365 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 371 | + drm_gem_object_put(gobj); |
---|
366 | 372 | |
---|
367 | 373 | handle_lockup: |
---|
368 | 374 | up_read(&rdev->exclusive_lock); |
---|
.. | .. |
---|
379 | 385 | struct radeon_device *rdev = dev->dev_private; |
---|
380 | 386 | struct drm_radeon_gem_set_domain *args = data; |
---|
381 | 387 | struct drm_gem_object *gobj; |
---|
382 | | - struct radeon_bo *robj; |
---|
383 | 388 | int r; |
---|
384 | 389 | |
---|
385 | 390 | /* for now if someone requests domain CPU - |
---|
.. | .. |
---|
392 | 397 | up_read(&rdev->exclusive_lock); |
---|
393 | 398 | return -ENOENT; |
---|
394 | 399 | } |
---|
395 | | - robj = gem_to_radeon_bo(gobj); |
---|
396 | 400 | |
---|
397 | 401 | r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain); |
---|
398 | 402 | |
---|
399 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 403 | + drm_gem_object_put(gobj); |
---|
400 | 404 | up_read(&rdev->exclusive_lock); |
---|
401 | | - r = radeon_gem_handle_lockup(robj->rdev, r); |
---|
| 405 | + r = radeon_gem_handle_lockup(rdev, r); |
---|
402 | 406 | return r; |
---|
403 | 407 | } |
---|
404 | 408 | |
---|
.. | .. |
---|
414 | 418 | return -ENOENT; |
---|
415 | 419 | } |
---|
416 | 420 | robj = gem_to_radeon_bo(gobj); |
---|
417 | | - if (radeon_ttm_tt_has_userptr(robj->tbo.ttm)) { |
---|
418 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 421 | + if (radeon_ttm_tt_has_userptr(robj->rdev, robj->tbo.ttm)) { |
---|
| 422 | + drm_gem_object_put(gobj); |
---|
419 | 423 | return -EPERM; |
---|
420 | 424 | } |
---|
421 | 425 | *offset_p = radeon_bo_mmap_offset(robj); |
---|
422 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 426 | + drm_gem_object_put(gobj); |
---|
423 | 427 | return 0; |
---|
424 | 428 | } |
---|
425 | 429 | |
---|
.. | .. |
---|
446 | 450 | } |
---|
447 | 451 | robj = gem_to_radeon_bo(gobj); |
---|
448 | 452 | |
---|
449 | | - r = reservation_object_test_signaled_rcu(robj->tbo.resv, true); |
---|
| 453 | + r = dma_resv_test_signaled_rcu(robj->tbo.base.resv, true); |
---|
450 | 454 | if (r == 0) |
---|
451 | 455 | r = -EBUSY; |
---|
452 | 456 | else |
---|
.. | .. |
---|
454 | 458 | |
---|
455 | 459 | cur_placement = READ_ONCE(robj->tbo.mem.mem_type); |
---|
456 | 460 | args->domain = radeon_mem_type_to_domain(cur_placement); |
---|
457 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 461 | + drm_gem_object_put(gobj); |
---|
458 | 462 | return r; |
---|
459 | 463 | } |
---|
460 | 464 | |
---|
.. | .. |
---|
475 | 479 | } |
---|
476 | 480 | robj = gem_to_radeon_bo(gobj); |
---|
477 | 481 | |
---|
478 | | - ret = reservation_object_wait_timeout_rcu(robj->tbo.resv, true, true, 30 * HZ); |
---|
| 482 | + ret = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, 30 * HZ); |
---|
479 | 483 | if (ret == 0) |
---|
480 | 484 | r = -EBUSY; |
---|
481 | 485 | else if (ret < 0) |
---|
.. | .. |
---|
486 | 490 | if (rdev->asic->mmio_hdp_flush && |
---|
487 | 491 | radeon_mem_type_to_domain(cur_placement) == RADEON_GEM_DOMAIN_VRAM) |
---|
488 | 492 | robj->rdev->asic->mmio_hdp_flush(rdev); |
---|
489 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 493 | + drm_gem_object_put(gobj); |
---|
490 | 494 | r = radeon_gem_handle_lockup(rdev, r); |
---|
491 | 495 | return r; |
---|
492 | 496 | } |
---|
.. | .. |
---|
505 | 509 | return -ENOENT; |
---|
506 | 510 | robj = gem_to_radeon_bo(gobj); |
---|
507 | 511 | r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch); |
---|
508 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 512 | + drm_gem_object_put(gobj); |
---|
509 | 513 | return r; |
---|
510 | 514 | } |
---|
511 | 515 | |
---|
.. | .. |
---|
528 | 532 | radeon_bo_get_tiling_flags(rbo, &args->tiling_flags, &args->pitch); |
---|
529 | 533 | radeon_bo_unreserve(rbo); |
---|
530 | 534 | out: |
---|
531 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 535 | + drm_gem_object_put(gobj); |
---|
532 | 536 | return r; |
---|
533 | 537 | } |
---|
534 | 538 | |
---|
.. | .. |
---|
554 | 558 | INIT_LIST_HEAD(&list); |
---|
555 | 559 | |
---|
556 | 560 | tv.bo = &bo_va->bo->tbo; |
---|
557 | | - tv.shared = true; |
---|
| 561 | + tv.num_shared = 1; |
---|
558 | 562 | list_add(&tv.head, &list); |
---|
559 | 563 | |
---|
560 | 564 | vm_bos = radeon_vm_get_bos(rdev, bo_va->vm, &list); |
---|
.. | .. |
---|
662 | 666 | r = radeon_bo_reserve(rbo, false); |
---|
663 | 667 | if (r) { |
---|
664 | 668 | args->operation = RADEON_VA_RESULT_ERROR; |
---|
665 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 669 | + drm_gem_object_put(gobj); |
---|
666 | 670 | return r; |
---|
667 | 671 | } |
---|
668 | 672 | bo_va = radeon_vm_bo_find(&fpriv->vm, rbo); |
---|
669 | 673 | if (!bo_va) { |
---|
670 | 674 | args->operation = RADEON_VA_RESULT_ERROR; |
---|
671 | 675 | radeon_bo_unreserve(rbo); |
---|
672 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 676 | + drm_gem_object_put(gobj); |
---|
673 | 677 | return -ENOENT; |
---|
674 | 678 | } |
---|
675 | 679 | |
---|
.. | .. |
---|
696 | 700 | args->operation = RADEON_VA_RESULT_ERROR; |
---|
697 | 701 | } |
---|
698 | 702 | out: |
---|
699 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 703 | + drm_gem_object_put(gobj); |
---|
700 | 704 | return r; |
---|
701 | 705 | } |
---|
702 | 706 | |
---|
.. | .. |
---|
715 | 719 | robj = gem_to_radeon_bo(gobj); |
---|
716 | 720 | |
---|
717 | 721 | r = -EPERM; |
---|
718 | | - if (radeon_ttm_tt_has_userptr(robj->tbo.ttm)) |
---|
| 722 | + if (radeon_ttm_tt_has_userptr(robj->rdev, robj->tbo.ttm)) |
---|
719 | 723 | goto out; |
---|
720 | 724 | |
---|
721 | 725 | r = radeon_bo_reserve(robj, false); |
---|
.. | .. |
---|
737 | 741 | |
---|
738 | 742 | radeon_bo_unreserve(robj); |
---|
739 | 743 | out: |
---|
740 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 744 | + drm_gem_object_put(gobj); |
---|
741 | 745 | return r; |
---|
742 | 746 | } |
---|
743 | 747 | |
---|
.. | .. |
---|
763 | 767 | |
---|
764 | 768 | r = drm_gem_handle_create(file_priv, gobj, &handle); |
---|
765 | 769 | /* drop reference from allocate - handle holds it now */ |
---|
766 | | - drm_gem_object_put_unlocked(gobj); |
---|
| 770 | + drm_gem_object_put(gobj); |
---|
767 | 771 | if (r) { |
---|
768 | 772 | return r; |
---|
769 | 773 | } |
---|