hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/gpu/drm/radeon/radeon_gem.c
....@@ -25,8 +25,14 @@
2525 * Alex Deucher
2626 * Jerome Glisse
2727 */
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>
2934 #include <drm/radeon_drm.h>
35
+
3036 #include "radeon.h"
3137
3238 void radeon_gem_object_free(struct drm_gem_object *gobj)
....@@ -78,7 +84,7 @@
7884 }
7985 return r;
8086 }
81
- *obj = &robj->gem_base;
87
+ *obj = &robj->tbo.base;
8288 robj->pid = task_pid_nr(current);
8389
8490 mutex_lock(&rdev->gem.mutex);
....@@ -109,7 +115,7 @@
109115 }
110116 if (domain == RADEON_GEM_DOMAIN_CPU) {
111117 /* 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);
113119 if (!r)
114120 r = -EBUSY;
115121
....@@ -218,9 +224,9 @@
218224 {
219225 struct radeon_device *rdev = dev->dev_private;
220226 struct drm_radeon_gem_info *args = data;
221
- struct ttm_mem_type_manager *man;
227
+ struct ttm_resource_manager *man;
222228
223
- man = &rdev->mman.bdev.man[TTM_PL_VRAM];
229
+ man = ttm_manager_type(&rdev->mman.bdev, TTM_PL_VRAM);
224230
225231 args->vram_size = (u64)man->size << PAGE_SHIFT;
226232 args->vram_visible = rdev->mc.visible_vram_size;
....@@ -269,7 +275,7 @@
269275 }
270276 r = drm_gem_handle_create(filp, gobj, &handle);
271277 /* drop reference from allocate - handle holds it now */
272
- drm_gem_object_put_unlocked(gobj);
278
+ drm_gem_object_put(gobj);
273279 if (r) {
274280 up_read(&rdev->exclusive_lock);
275281 r = radeon_gem_handle_lockup(rdev, r);
....@@ -325,7 +331,7 @@
325331 goto handle_lockup;
326332
327333 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);
329335 if (r)
330336 goto release_object;
331337
....@@ -336,24 +342,24 @@
336342 }
337343
338344 if (args->flags & RADEON_GEM_USERPTR_VALIDATE) {
339
- down_read(&current->mm->mmap_sem);
345
+ mmap_read_lock(current->mm);
340346 r = radeon_bo_reserve(bo, true);
341347 if (r) {
342
- up_read(&current->mm->mmap_sem);
348
+ mmap_read_unlock(current->mm);
343349 goto release_object;
344350 }
345351
346352 radeon_ttm_placement_from_domain(bo, RADEON_GEM_DOMAIN_GTT);
347353 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
348354 radeon_bo_unreserve(bo);
349
- up_read(&current->mm->mmap_sem);
355
+ mmap_read_unlock(current->mm);
350356 if (r)
351357 goto release_object;
352358 }
353359
354360 r = drm_gem_handle_create(filp, gobj, &handle);
355361 /* drop reference from allocate - handle holds it now */
356
- drm_gem_object_put_unlocked(gobj);
362
+ drm_gem_object_put(gobj);
357363 if (r)
358364 goto handle_lockup;
359365
....@@ -362,7 +368,7 @@
362368 return 0;
363369
364370 release_object:
365
- drm_gem_object_put_unlocked(gobj);
371
+ drm_gem_object_put(gobj);
366372
367373 handle_lockup:
368374 up_read(&rdev->exclusive_lock);
....@@ -396,7 +402,7 @@
396402
397403 r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain);
398404
399
- drm_gem_object_put_unlocked(gobj);
405
+ drm_gem_object_put(gobj);
400406 up_read(&rdev->exclusive_lock);
401407 r = radeon_gem_handle_lockup(robj->rdev, r);
402408 return r;
....@@ -414,12 +420,12 @@
414420 return -ENOENT;
415421 }
416422 robj = gem_to_radeon_bo(gobj);
417
- if (radeon_ttm_tt_has_userptr(robj->tbo.ttm)) {
418
- drm_gem_object_put_unlocked(gobj);
423
+ if (radeon_ttm_tt_has_userptr(robj->rdev, robj->tbo.ttm)) {
424
+ drm_gem_object_put(gobj);
419425 return -EPERM;
420426 }
421427 *offset_p = radeon_bo_mmap_offset(robj);
422
- drm_gem_object_put_unlocked(gobj);
428
+ drm_gem_object_put(gobj);
423429 return 0;
424430 }
425431
....@@ -446,7 +452,7 @@
446452 }
447453 robj = gem_to_radeon_bo(gobj);
448454
449
- r = reservation_object_test_signaled_rcu(robj->tbo.resv, true);
455
+ r = dma_resv_test_signaled_rcu(robj->tbo.base.resv, true);
450456 if (r == 0)
451457 r = -EBUSY;
452458 else
....@@ -454,7 +460,7 @@
454460
455461 cur_placement = READ_ONCE(robj->tbo.mem.mem_type);
456462 args->domain = radeon_mem_type_to_domain(cur_placement);
457
- drm_gem_object_put_unlocked(gobj);
463
+ drm_gem_object_put(gobj);
458464 return r;
459465 }
460466
....@@ -475,7 +481,7 @@
475481 }
476482 robj = gem_to_radeon_bo(gobj);
477483
478
- ret = reservation_object_wait_timeout_rcu(robj->tbo.resv, true, true, 30 * HZ);
484
+ ret = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, 30 * HZ);
479485 if (ret == 0)
480486 r = -EBUSY;
481487 else if (ret < 0)
....@@ -486,7 +492,7 @@
486492 if (rdev->asic->mmio_hdp_flush &&
487493 radeon_mem_type_to_domain(cur_placement) == RADEON_GEM_DOMAIN_VRAM)
488494 robj->rdev->asic->mmio_hdp_flush(rdev);
489
- drm_gem_object_put_unlocked(gobj);
495
+ drm_gem_object_put(gobj);
490496 r = radeon_gem_handle_lockup(rdev, r);
491497 return r;
492498 }
....@@ -505,7 +511,7 @@
505511 return -ENOENT;
506512 robj = gem_to_radeon_bo(gobj);
507513 r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch);
508
- drm_gem_object_put_unlocked(gobj);
514
+ drm_gem_object_put(gobj);
509515 return r;
510516 }
511517
....@@ -528,7 +534,7 @@
528534 radeon_bo_get_tiling_flags(rbo, &args->tiling_flags, &args->pitch);
529535 radeon_bo_unreserve(rbo);
530536 out:
531
- drm_gem_object_put_unlocked(gobj);
537
+ drm_gem_object_put(gobj);
532538 return r;
533539 }
534540
....@@ -554,7 +560,7 @@
554560 INIT_LIST_HEAD(&list);
555561
556562 tv.bo = &bo_va->bo->tbo;
557
- tv.shared = true;
563
+ tv.num_shared = 1;
558564 list_add(&tv.head, &list);
559565
560566 vm_bos = radeon_vm_get_bos(rdev, bo_va->vm, &list);
....@@ -662,14 +668,14 @@
662668 r = radeon_bo_reserve(rbo, false);
663669 if (r) {
664670 args->operation = RADEON_VA_RESULT_ERROR;
665
- drm_gem_object_put_unlocked(gobj);
671
+ drm_gem_object_put(gobj);
666672 return r;
667673 }
668674 bo_va = radeon_vm_bo_find(&fpriv->vm, rbo);
669675 if (!bo_va) {
670676 args->operation = RADEON_VA_RESULT_ERROR;
671677 radeon_bo_unreserve(rbo);
672
- drm_gem_object_put_unlocked(gobj);
678
+ drm_gem_object_put(gobj);
673679 return -ENOENT;
674680 }
675681
....@@ -696,7 +702,7 @@
696702 args->operation = RADEON_VA_RESULT_ERROR;
697703 }
698704 out:
699
- drm_gem_object_put_unlocked(gobj);
705
+ drm_gem_object_put(gobj);
700706 return r;
701707 }
702708
....@@ -715,7 +721,7 @@
715721 robj = gem_to_radeon_bo(gobj);
716722
717723 r = -EPERM;
718
- if (radeon_ttm_tt_has_userptr(robj->tbo.ttm))
724
+ if (radeon_ttm_tt_has_userptr(robj->rdev, robj->tbo.ttm))
719725 goto out;
720726
721727 r = radeon_bo_reserve(robj, false);
....@@ -737,7 +743,7 @@
737743
738744 radeon_bo_unreserve(robj);
739745 out:
740
- drm_gem_object_put_unlocked(gobj);
746
+ drm_gem_object_put(gobj);
741747 return r;
742748 }
743749
....@@ -763,7 +769,7 @@
763769
764770 r = drm_gem_handle_create(file_priv, gobj, &handle);
765771 /* drop reference from allocate - handle holds it now */
766
- drm_gem_object_put_unlocked(gobj);
772
+ drm_gem_object_put(gobj);
767773 if (r) {
768774 return r;
769775 }