Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: remove PL_PREEMPT accounting

This is provided by TTM now.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220214093439.2989-7-christian.koenig@amd.com

+6 -63
+5 -57
drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
··· 25 25 26 26 #include "amdgpu.h" 27 27 28 - static inline struct amdgpu_preempt_mgr * 29 - to_preempt_mgr(struct ttm_resource_manager *man) 30 - { 31 - return container_of(man, struct amdgpu_preempt_mgr, manager); 32 - } 33 - 34 28 /** 35 29 * DOC: mem_info_preempt_used 36 30 * ··· 39 45 { 40 46 struct drm_device *ddev = dev_get_drvdata(dev); 41 47 struct amdgpu_device *adev = drm_to_adev(ddev); 42 - struct ttm_resource_manager *man; 48 + struct ttm_resource_manager *man = &adev->mman.preempt_mgr; 43 49 44 - man = ttm_manager_type(&adev->mman.bdev, AMDGPU_PL_PREEMPT); 45 - return sysfs_emit(buf, "%llu\n", amdgpu_preempt_mgr_usage(man)); 50 + return sysfs_emit(buf, "%llu\n", ttm_resource_manager_usage(man)); 46 51 } 47 52 48 53 static DEVICE_ATTR_RO(mem_info_preempt_used); ··· 61 68 const struct ttm_place *place, 62 69 struct ttm_resource **res) 63 70 { 64 - struct amdgpu_preempt_mgr *mgr = to_preempt_mgr(man); 65 - 66 71 *res = kzalloc(sizeof(**res), GFP_KERNEL); 67 72 if (!*res) 68 73 return -ENOMEM; 69 74 70 75 ttm_resource_init(tbo, place, *res); 71 76 (*res)->start = AMDGPU_BO_INVALID_OFFSET; 72 - 73 - atomic64_add((*res)->num_pages, &mgr->used); 74 77 return 0; 75 78 } 76 79 ··· 81 92 static void amdgpu_preempt_mgr_del(struct ttm_resource_manager *man, 82 93 struct ttm_resource *res) 83 94 { 84 - struct amdgpu_preempt_mgr *mgr = to_preempt_mgr(man); 85 - 86 - atomic64_sub(res->num_pages, &mgr->used); 87 95 ttm_resource_fini(man, res); 88 96 kfree(res); 89 - } 90 - 91 - /** 92 - * amdgpu_preempt_mgr_usage - return usage of PREEMPT domain 93 - * 94 - * @man: TTM memory type manager 95 - * 96 - * Return how many bytes are used in the GTT domain 97 - */ 98 - uint64_t amdgpu_preempt_mgr_usage(struct ttm_resource_manager *man) 99 - { 100 - struct amdgpu_preempt_mgr *mgr = to_preempt_mgr(man); 101 - s64 result = atomic64_read(&mgr->used); 102 - 103 - return (result > 0 ? result : 0) * PAGE_SIZE; 104 - } 105 - 106 - /** 107 - * amdgpu_preempt_mgr_debug - dump VRAM table 108 - * 109 - * @man: TTM memory type manager 110 - * @printer: DRM printer to use 111 - * 112 - * Dump the table content using printk. 113 - */ 114 - static void amdgpu_preempt_mgr_debug(struct ttm_resource_manager *man, 115 - struct drm_printer *printer) 116 - { 117 - struct amdgpu_preempt_mgr *mgr = to_preempt_mgr(man); 118 - 119 - drm_printf(printer, "man size:%llu pages, preempt used:%lld pages\n", 120 - man->size, (u64)atomic64_read(&mgr->used)); 121 97 } 122 98 123 99 static const struct ttm_resource_manager_func amdgpu_preempt_mgr_func = { 124 100 .alloc = amdgpu_preempt_mgr_new, 125 101 .free = amdgpu_preempt_mgr_del, 126 - .debug = amdgpu_preempt_mgr_debug 127 102 }; 128 103 129 104 /** ··· 99 146 */ 100 147 int amdgpu_preempt_mgr_init(struct amdgpu_device *adev) 101 148 { 102 - struct amdgpu_preempt_mgr *mgr = &adev->mman.preempt_mgr; 103 - struct ttm_resource_manager *man = &mgr->manager; 149 + struct ttm_resource_manager *man = &adev->mman.preempt_mgr; 104 150 int ret; 105 151 106 152 man->use_tt = true; ··· 107 155 108 156 ttm_resource_manager_init(man, &adev->mman.bdev, (1 << 30)); 109 157 110 - atomic64_set(&mgr->used, 0); 111 - 112 158 ret = device_create_file(adev->dev, &dev_attr_mem_info_preempt_used); 113 159 if (ret) { 114 160 DRM_ERROR("Failed to create device file mem_info_preempt_used\n"); 115 161 return ret; 116 162 } 117 163 118 - ttm_set_driver_manager(&adev->mman.bdev, AMDGPU_PL_PREEMPT, 119 - &mgr->manager); 164 + ttm_set_driver_manager(&adev->mman.bdev, AMDGPU_PL_PREEMPT, man); 120 165 ttm_resource_manager_set_used(man, true); 121 166 return 0; 122 167 } ··· 128 179 */ 129 180 void amdgpu_preempt_mgr_fini(struct amdgpu_device *adev) 130 181 { 131 - struct amdgpu_preempt_mgr *mgr = &adev->mman.preempt_mgr; 132 - struct ttm_resource_manager *man = &mgr->manager; 182 + struct ttm_resource_manager *man = &adev->mman.preempt_mgr; 133 183 int ret; 134 184 135 185 ttm_resource_manager_set_used(man, false);
+1 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
··· 54 54 spinlock_t lock; 55 55 }; 56 56 57 - struct amdgpu_preempt_mgr { 58 - struct ttm_resource_manager manager; 59 - atomic64_t used; 60 - }; 61 - 62 57 struct amdgpu_mman { 63 58 struct ttm_device bdev; 64 59 bool initialized; ··· 70 75 71 76 struct amdgpu_vram_mgr vram_mgr; 72 77 struct amdgpu_gtt_mgr gtt_mgr; 73 - struct amdgpu_preempt_mgr preempt_mgr; 78 + struct ttm_resource_manager preempt_mgr; 74 79 75 80 uint64_t stolen_vga_size; 76 81 struct amdgpu_bo *stolen_vga_memory;