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

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: add amdgpu_ttm_buffer_entity_fini func

This allows to have init/fini functions to hold all the init and
teardown code for amdgpu_ttm_buffer_entity.
For now only drm_sched_entity init/destroy function calls are moved
here, but as entities gain new members it will make code simpler.

Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Pierre-Eric Pelloux-Prayer and committed by
Alex Deucher
2e885302 2c372557

+38 -35
+38 -35
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
··· 2012 2012 } 2013 2013 2014 2014 static int amdgpu_ttm_buffer_entity_init(struct amdgpu_ttm_buffer_entity *entity, 2015 + enum drm_sched_priority prio, 2016 + struct drm_gpu_scheduler **scheds, 2017 + int num_schedulers, 2015 2018 int starting_gart_window, 2016 2019 u32 num_gart_windows) 2017 2020 { 2018 - int i; 2021 + int i, r; 2022 + 2023 + r = drm_sched_entity_init(&entity->base, prio, scheds, num_schedulers, NULL); 2024 + if (r) 2025 + return r; 2026 + 2019 2027 2020 2028 mutex_init(&entity->lock); 2021 2029 ··· 2038 2030 } 2039 2031 2040 2032 return starting_gart_window; 2033 + } 2034 + 2035 + static void amdgpu_ttm_buffer_entity_fini(struct amdgpu_ttm_buffer_entity *entity) 2036 + { 2037 + drm_sched_entity_destroy(&entity->base); 2041 2038 } 2042 2039 2043 2040 /* ··· 2332 2319 void amdgpu_ttm_set_buffer_funcs_status(struct amdgpu_device *adev, bool enable) 2333 2320 { 2334 2321 struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM); 2335 - u32 used_windows; 2336 2322 uint64_t size; 2337 2323 int r; 2338 2324 ··· 2345 2333 2346 2334 ring = adev->mman.buffer_funcs_ring; 2347 2335 sched = &ring->sched; 2348 - r = drm_sched_entity_init(&adev->mman.default_entity.base, 2349 - DRM_SCHED_PRIORITY_KERNEL, &sched, 2350 - 1, NULL); 2351 - if (r) { 2336 + r = amdgpu_ttm_buffer_entity_init(&adev->mman.default_entity, 2337 + DRM_SCHED_PRIORITY_KERNEL, &sched, 1, 2338 + 0, 0); 2339 + if (r < 0) { 2352 2340 dev_err(adev->dev, 2353 - "Failed setting up TTM BO move entity (%d)\n", 2354 - r); 2341 + "Failed setting up TTM entity (%d)\n", r); 2355 2342 return; 2356 2343 } 2357 2344 2358 - r = drm_sched_entity_init(&adev->mman.clear_entity.base, 2359 - DRM_SCHED_PRIORITY_NORMAL, &sched, 2360 - 1, NULL); 2361 - if (r) { 2345 + r = amdgpu_ttm_buffer_entity_init(&adev->mman.clear_entity, 2346 + DRM_SCHED_PRIORITY_NORMAL, &sched, 1, 2347 + r, 1); 2348 + if (r < 0) { 2362 2349 dev_err(adev->dev, 2363 - "Failed setting up TTM BO clear entity (%d)\n", 2364 - r); 2365 - goto error_free_entity; 2350 + "Failed setting up TTM BO clear entity (%d)\n", r); 2351 + goto error_free_default_entity; 2366 2352 } 2367 2353 2368 - r = drm_sched_entity_init(&adev->mman.move_entity.base, 2369 - DRM_SCHED_PRIORITY_NORMAL, &sched, 2370 - 1, NULL); 2371 - if (r) { 2354 + r = amdgpu_ttm_buffer_entity_init(&adev->mman.move_entity, 2355 + DRM_SCHED_PRIORITY_NORMAL, &sched, 1, 2356 + r, 2); 2357 + if (r < 0) { 2372 2358 dev_err(adev->dev, 2373 - "Failed setting up TTM BO move entity (%d)\n", 2374 - r); 2375 - drm_sched_entity_destroy(&adev->mman.clear_entity.base); 2376 - goto error_free_entity; 2359 + "Failed setting up TTM BO move entity (%d)\n", r); 2360 + goto error_free_clear_entity; 2377 2361 } 2378 - 2379 - /* Statically assign GART windows to each entity. */ 2380 - used_windows = amdgpu_ttm_buffer_entity_init(&adev->mman.default_entity, 0, 0); 2381 - used_windows = amdgpu_ttm_buffer_entity_init(&adev->mman.move_entity, 2382 - used_windows, 2); 2383 - used_windows = amdgpu_ttm_buffer_entity_init(&adev->mman.clear_entity, 2384 - used_windows, 1); 2385 2362 } else { 2386 - drm_sched_entity_destroy(&adev->mman.default_entity.base); 2387 - drm_sched_entity_destroy(&adev->mman.clear_entity.base); 2388 - drm_sched_entity_destroy(&adev->mman.move_entity.base); 2363 + amdgpu_ttm_buffer_entity_fini(&adev->mman.default_entity); 2364 + amdgpu_ttm_buffer_entity_fini(&adev->mman.clear_entity); 2365 + amdgpu_ttm_buffer_entity_fini(&adev->mman.move_entity); 2389 2366 /* Drop all the old fences since re-creating the scheduler entities 2390 2367 * will allocate new contexts. 2391 2368 */ ··· 2391 2390 2392 2391 return; 2393 2392 2394 - error_free_entity: 2395 - drm_sched_entity_destroy(&adev->mman.default_entity.base); 2393 + error_free_clear_entity: 2394 + amdgpu_ttm_buffer_entity_fini(&adev->mman.clear_entity); 2395 + error_free_default_entity: 2396 + amdgpu_ttm_buffer_entity_fini(&adev->mman.default_entity); 2396 2397 } 2397 2398 2398 2399 static int amdgpu_ttm_prepare_job(struct amdgpu_device *adev,