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

drm: use new iterator in drm_gem_fence_array_add_implicit v3

Simplifying the code a bit.

v2: add missing rcu_read_lock()/unlock()
v3: switch to locked version

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211005113742.1101-24-christian.koenig@amd.com

+5 -21
+5 -21
drivers/gpu/drm/drm_gem.c
··· 1340 1340 struct drm_gem_object *obj, 1341 1341 bool write) 1342 1342 { 1343 - int ret; 1344 - struct dma_fence **fences; 1345 - unsigned int i, fence_count; 1343 + struct dma_resv_iter cursor; 1344 + struct dma_fence *fence; 1345 + int ret = 0; 1346 1346 1347 - if (!write) { 1348 - struct dma_fence *fence = 1349 - dma_resv_get_excl_unlocked(obj->resv); 1350 - 1351 - return drm_gem_fence_array_add(fence_array, fence); 1352 - } 1353 - 1354 - ret = dma_resv_get_fences(obj->resv, NULL, 1355 - &fence_count, &fences); 1356 - if (ret || !fence_count) 1357 - return ret; 1358 - 1359 - for (i = 0; i < fence_count; i++) { 1360 - ret = drm_gem_fence_array_add(fence_array, fences[i]); 1347 + dma_resv_for_each_fence(&cursor, obj->resv, write, fence) { 1348 + ret = drm_gem_fence_array_add(fence_array, fence); 1361 1349 if (ret) 1362 1350 break; 1363 1351 } 1364 - 1365 - for (; i < fence_count; i++) 1366 - dma_fence_put(fences[i]); 1367 - kfree(fences); 1368 1352 return ret; 1369 1353 } 1370 1354 EXPORT_SYMBOL(drm_gem_fence_array_add_implicit);