Message ID | cover.1715767062.git.karolina.stolarek@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | Improve test coverage of TTM | expand |
Test looks good. Regards, S.Amarnath amar@amar-Artic:~/amar/drm_misc/drm-misc1$ ./tools/testing/kunit/kunit.py run --kunitconfig=drivers/gpu/drm/ttm/tests [08:20:02] Configuring KUnit Kernel ... Regenerating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [08:20:03] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make ARCH=um O=.kunit --jobs=16 [08:20:11] Starting KUnit Kernel (1/1)... [08:20:11] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [08:20:11] ================= ttm_device (5 subtests) ================== [08:20:11] [PASSED] ttm_device_init_basic [08:20:11] [PASSED] ttm_device_init_multiple [08:20:11] [PASSED] ttm_device_fini_basic [08:20:11] [PASSED] ttm_device_init_no_vma_man [08:20:11] ================== ttm_device_init_pools ================== [08:20:11] [PASSED] No DMA allocations, no DMA32 required [08:20:11] [PASSED] DMA allocations, DMA32 required [08:20:11] [PASSED] No DMA allocations, DMA32 required [08:20:11] [PASSED] DMA allocations, no DMA32 required [08:20:11] ============== [PASSED] ttm_device_init_pools ============== [08:20:11] =================== [PASSED] ttm_device ==================== [08:20:11] ================== ttm_pool (8 subtests) =================== [08:20:11] ================== ttm_pool_alloc_basic =================== [08:20:11] [PASSED] One page [08:20:11] [PASSED] More than one page [08:20:11] [PASSED] Above the allocation limit [08:20:11] [PASSED] One page, with coherent DMA mappings enabled [08:20:11] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [08:20:11] ============== [PASSED] ttm_pool_alloc_basic =============== [08:20:11] ============== ttm_pool_alloc_basic_dma_addr ============== [08:20:11] [PASSED] One page [08:20:11] [PASSED] More than one page [08:20:11] [PASSED] Above the allocation limit [08:20:11] [PASSED] One page, with coherent DMA mappings enabled [08:20:11] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [08:20:11] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [08:20:11] [PASSED] ttm_pool_alloc_order_caching_match [08:20:11] [PASSED] ttm_pool_alloc_caching_mismatch [08:20:11] [PASSED] ttm_pool_alloc_order_mismatch [08:20:11] [PASSED] ttm_pool_free_dma_alloc [08:20:11] [PASSED] ttm_pool_free_no_dma_alloc [08:20:11] [PASSED] ttm_pool_fini_basic [08:20:11] ==================== [PASSED] ttm_pool ===================== [08:20:11] ================ ttm_resource (8 subtests) ================= [08:20:11] ================= ttm_resource_init_basic ================= [08:20:11] [PASSED] Init resource in TTM_PL_SYSTEM [08:20:11] [PASSED] Init resource in TTM_PL_VRAM [08:20:11] [PASSED] Init resource in a private placement [08:20:11] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [08:20:11] ============= [PASSED] ttm_resource_init_basic ============= [08:20:11] [PASSED] ttm_resource_init_pinned [08:20:11] [PASSED] ttm_resource_fini_basic [08:20:11] [PASSED] ttm_resource_manager_init_basic [08:20:11] [PASSED] ttm_resource_manager_usage_basic [08:20:11] [PASSED] ttm_resource_manager_set_used_basic [08:20:11] [PASSED] ttm_sys_man_alloc_basic [08:20:11] [PASSED] ttm_sys_man_free_basic [08:20:11] ================== [PASSED] ttm_resource =================== [08:20:11] =================== ttm_tt (15 subtests) =================== [08:20:11] ==================== ttm_tt_init_basic ==================== [08:20:11] [PASSED] Page-aligned size [08:20:11] [PASSED] Extra pages requested [08:20:11] ================ [PASSED] ttm_tt_init_basic ================ [08:20:11] [PASSED] ttm_tt_init_misaligned [08:20:11] [PASSED] ttm_tt_fini_basic [08:20:11] [PASSED] ttm_tt_fini_sg [08:20:11] [PASSED] ttm_tt_fini_shmem [08:20:11] [PASSED] ttm_tt_create_basic [08:20:11] [PASSED] ttm_tt_create_invalid_bo_type [08:20:11] [PASSED] ttm_tt_create_ttm_exists [08:20:11] [PASSED] ttm_tt_create_failed [08:20:11] [PASSED] ttm_tt_destroy_basic [08:20:11] [PASSED] ttm_tt_populate_null_ttm [08:20:11] [PASSED] ttm_tt_populate_populated_ttm [08:20:11] [PASSED] ttm_tt_unpopulate_basic [08:20:11] [PASSED] ttm_tt_unpopulate_empty_ttm [08:20:11] [PASSED] ttm_tt_swapin_basic [08:20:11] ===================== [PASSED] ttm_tt ====================== [08:20:11] =================== ttm_bo (14 subtests) =================== [08:20:11] =========== ttm_bo_reserve_optimistic_no_ticket =========== [08:20:11] [PASSED] Cannot be interrupted and sleeps [08:20:11] [PASSED] Cannot be interrupted, locks straight away [08:20:11] [PASSED] Can be interrupted, sleeps [08:20:11] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [08:20:11] [PASSED] ttm_bo_reserve_locked_no_sleep [08:20:11] [PASSED] ttm_bo_reserve_no_wait_ticket [08:20:11] [PASSED] ttm_bo_reserve_double_resv [08:20:11] [PASSED] ttm_bo_reserve_interrupted [08:20:11] [PASSED] ttm_bo_reserve_deadlock [08:20:11] [PASSED] ttm_bo_unreserve_basic [08:20:11] [PASSED] ttm_bo_unreserve_pinned [08:20:11] [PASSED] ttm_bo_unreserve_bulk [08:20:11] [PASSED] ttm_bo_put_basic [08:20:11] [PASSED] ttm_bo_put_shared_resv [08:20:11] [PASSED] ttm_bo_pin_basic [08:20:11] [PASSED] ttm_bo_pin_unpin_resource [08:20:11] [PASSED] ttm_bo_multiple_pin_one_unpin [08:20:11] ===================== [PASSED] ttm_bo ====================== [08:20:11] ============== ttm_bo_validate (22 subtests) =============== [08:20:11] ============== ttm_bo_init_reserved_sys_man =============== [08:20:11] [PASSED] Buffer object for userspace [08:20:11] [PASSED] Kernel buffer object [08:20:11] [PASSED] Shared buffer object [08:20:11] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [08:20:11] ============== ttm_bo_init_reserved_mock_man ============== [08:20:11] [PASSED] Buffer object for userspace [08:20:11] [PASSED] Kernel buffer object [08:20:11] [PASSED] Shared buffer object [08:20:11] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [08:20:11] [PASSED] ttm_bo_init_reserved_resv [08:20:11] ================== ttm_bo_validate_basic ================== [08:20:11] [PASSED] Buffer object for userspace [08:20:11] [PASSED] Kernel buffer object [08:20:11] [PASSED] Shared buffer object [08:20:11] ============== [PASSED] ttm_bo_validate_basic ============== [08:20:11] [PASSED] ttm_bo_validate_invalid_placement [08:20:11] ============= ttm_bo_validate_same_placement ============== [08:20:11] [PASSED] System manager [08:20:11] [PASSED] VRAM manager [08:20:11] ========= [PASSED] ttm_bo_validate_same_placement ========== [08:20:11] [PASSED] ttm_bo_validate_failed_alloc [08:20:11] [PASSED] ttm_bo_validate_pinned [08:20:11] [PASSED] ttm_bo_validate_busy_placement [08:20:11] ================ ttm_bo_validate_multihop ================= [08:20:11] [PASSED] Buffer object for userspace [08:20:11] [PASSED] Kernel buffer object [08:20:11] [PASSED] Shared buffer object [08:20:11] ============ [PASSED] ttm_bo_validate_multihop ============= [08:20:11] ========== ttm_bo_validate_no_placement_signaled ========== [08:20:11] [PASSED] Buffer object in system domain, no page vector [08:20:11] [PASSED] Buffer object in system domain with an existing page vector [08:20:11] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [08:20:11] ======== ttm_bo_validate_no_placement_not_signaled ======== [08:20:11] [PASSED] Buffer object for userspace [08:20:11] [PASSED] Kernel buffer object [08:20:11] [PASSED] Shared buffer object [08:20:11] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [08:20:11] [PASSED] ttm_bo_validate_move_fence_signaled [08:20:11] ========= ttm_bo_validate_move_fence_not_signaled ========= [08:20:11] [PASSED] Waits for GPU [08:20:11] [PASSED] Tries to lock straight away [08:20:11] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [08:20:11] [PASSED] ttm_bo_validate_swapout [08:20:11] [PASSED] ttm_bo_validate_happy_evict [08:20:11] [PASSED] ttm_bo_validate_all_pinned_evict [08:20:11] [PASSED] ttm_bo_validate_allowed_only_evict [08:20:11] [PASSED] ttm_bo_validate_deleted_evict [08:20:11] [PASSED] ttm_bo_validate_busy_domain_evict [08:20:11] [PASSED] ttm_bo_validate_evict_gutting [08:20:11] [PASSED] ttm_bo_validate_recrusive_evict [08:20:11] ================= [PASSED] ttm_bo_validate ================= [08:20:11] ============================================================ [08:20:11] Testing complete. Ran 102 tests: passed: 102 [08:20:11] Elapsed time: 9.732s total, 0.927s configuring, 8.085s building, 0.559s running On 5/15/2024 4:54 PM, Karolina Stolarek wrote: > Introduce tests for ttm_bo_validate()/ttm_bo_init_validate() that exercise > simple BO placement as well as eviction (including the case where the evict > domain also requires eviction to fit the incoming buffer). Prepare KUnit > helpers to handle such scenarios and add a mock VRAM manager. This series also > includes some updates to the helpers and more definitions used to define > "special" memory domains (e.g., one that can't allocate resources or is busy), > as well as drive-by fixes for the tests. > > There are a couple of areas in which this test suite can be improved. > Suggestions for future work can be found in the TODO file. > > Use kunit_tool script to manually run all the tests: > > $ ./tools/testing/kunit/kunit.py run --kunitconfig=drivers/gpu/drm/ttm/tests > > To build a kernel with TTM KUnit tests, use a UML configuration, > enable CONFIG_KUNIT, and then select CONFIG_DRM_TTM_KUNIT_TEST. > > Many thanks, > Karolina > > v12: > - Rewrite "drm/ttm/tests: Fix a warning in ttm_bo_unreserve_bulk" patch to > extend ttm_bo_kunit_init() helper to accept a dma_resv object and update > calls to that helper (Christian) > - Update drm_buddy_free_list() calls with an extra argument > > v11: > - Delete CONFIG_DRM_KUNIT_TEST_HELPERS from .kunitconfig file, as it gets > automatically selected when TTM KUnit tests are enabled > - Call ttm_bo_put() in ttm_bo_validate_pinned() test case (Matt) > - Fix a copy-paste mistake in ttm_mem_type_cases definition (Matt) > - Update mock_move definition to do a hop on VRAM -> sysmem move and > delete a dummy multihop domain. Fix the eviction tests accordingly (Matt) > - Update ttm_bo_validate_swapout() to use TT domain instead of VRAM > - Update eviction test cases to create TT domain, so they can perform multihop > - Update TODO file, as it got outdated already > > v10: > Many things have happened over the course of three months, so the series > had to be slightly reworked and expanded to accommodate these changes: > - Set DMA coherent mapping mask in the KUnit device so ttm_pool_alloc > tests can be executed > - Update ttm_bo_validate_invalid_placement() test case to check against > the right return error. It's no longer -EINVAL (which only is returned > for pinned buffers), but -ENOMEM. The behaviour has changed in > commit cc941c70df39 ("drm/ttm: improve idle/busy handling v5") > - Rework ttm_placement_kunit_init() to accept only one array of places > and update the tests that use that helper > - Set fallback flags in eviction domains defined in TTM KUnit helpers > - Fix a warning raised by ttm_bo_unreserve_bulk() test case > - Scrap all r-bs and tested-by, as many things were updated and should > be checked again > > Karolina Stolarek (10): > drm/ttm/tests: Fix a warning in ttm_bo_unreserve_bulk > drm/ttm/tests: Delete unnecessary config option > drm/ttm/tests: Set DMA mask in KUnit device > drm/ttm/tests: Use an init function from the helpers lib > drm/ttm/tests: Test simple BO creation and validation > drm/ttm/tests: Add tests with mock resource managers > drm/ttm/tests: Add test cases dependent on fence signaling > drm/ttm/tests: Add eviction testing > drm/ttm/tests: Add tests for ttm_tt_populate > drm/ttm/tests: Add TODO file > > drivers/gpu/drm/Kconfig | 1 + > drivers/gpu/drm/ttm/tests/.kunitconfig | 2 +- > drivers/gpu/drm/ttm/tests/Makefile | 2 + > drivers/gpu/drm/ttm/tests/TODO | 25 + > drivers/gpu/drm/ttm/tests/ttm_bo_test.c | 40 +- > .../gpu/drm/ttm/tests/ttm_bo_validate_test.c | 1225 +++++++++++++++++ > drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c | 178 ++- > drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.h | 13 +- > drivers/gpu/drm/ttm/tests/ttm_mock_manager.c | 235 ++++ > drivers/gpu/drm/ttm/tests/ttm_mock_manager.h | 33 + > drivers/gpu/drm/ttm/tests/ttm_pool_test.c | 4 +- > drivers/gpu/drm/ttm/tests/ttm_resource_test.c | 2 +- > drivers/gpu/drm/ttm/tests/ttm_tt_test.c | 154 ++- > drivers/gpu/drm/ttm/ttm_tt.c | 3 + > 14 files changed, 1862 insertions(+), 55 deletions(-) > create mode 100644 drivers/gpu/drm/ttm/tests/TODO > create mode 100644 drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c > create mode 100644 drivers/gpu/drm/ttm/tests/ttm_mock_manager.c > create mode 100644 drivers/gpu/drm/ttm/tests/ttm_mock_manager.h >