[RFC v5 0/3] Introduce KUnit tests for TTM subsystem

Christian König christian.koenig at amd.com
Mon Aug 7 15:06:30 UTC 2023


Am 07.08.23 um 14:21 schrieb Karolina Stolarek:
> Hi Christian,
>
> On 3.08.2023 09:56, Christian König wrote:
>> Feel free to add Reviewed-by: Christian König 
>> <christian.koenig at amd.com> to the whole series and push to 
>> drm-misc-next.
>
> Thanks for reviewing the patches while I was away.
>
> I don't have commit rights to push it to drm-misc-next, so I'll go and 
> find someone to help me out. Still, I was thinking if I should send v6 
> of the series. I fixed a couple of small issues while working on new 
> tests, like UAF warnings from my kunit helpers when running kunit.py 
> with --raw_output option, but I can include them as a separate patch 
> in the new series. What's your preference?

Please send out the series once more based on current drm-misc-next and 
I can push it later today or tomorrow.

Regards,
Christian.

>
> All the best,
> Karolina
>
>>
>> Thanks,
>> Christian.
>>
>> Am 14.07.23 um 16:10 schrieb Karolina Stolarek:
>>> This series introduces KUnit[1] tests for TTM (Translation Table 
>>> Manager)
>>> subsystem, a memory manager used by graphics drivers to create and 
>>> manage
>>> memory buffers across different memory domains, such as system memory
>>> or VRAM.
>>>
>>> Unit tests implemented here cover two data structures:
>>>    - ttm_device -- referred as a buffer object device, which stores
>>>      resource managers and page pools
>>>    - ttm_pool -- a struct of pools (ttm_pool_type) of different page
>>>      orders and caching attributes, with pages that can be reused on
>>>      the next buffer allocation
>>>
>>> Use kunit_tool script to manually run the tests:
>>>
>>> $ ./tools/testing/kunit/kunit.py run 
>>> --kunitconfig=drivers/gpu/drm/ttm/tests
>>>
>>> To build a kernel with TTM KUnit tests, first enable CONFIG_KUNIT, 
>>> and then
>>> CONFIG_DRM_TTM_KUNIT_TEST.
>>>
>>> As for now, tests are architecture-agnostic (i.e. KUnit runner uses UML
>>> kernel), which means that we have limited coverage in some places. For
>>> example, we can't fully test the initialization of global page pools,
>>> such as global_write_combined. It is to be decided if we want to stick
>>> to UML or use CONFIG_X86 (at least to some extent).
>>>
>>> These patches are just a beginning of the work to improve the test
>>> coverage of TTM. Feel free to suggest changes, test cases or 
>>> priorities.
>>>
>>> Many thanks,
>>> Karolina
>>>
>>> v5:
>>>    - Drop unnecessary brackets in 2/3
>>>    - Rebase KConfig file on the top of drm-tip
>>>
>>> v4:
>>>    - Test helpers have been changed to make the creation of init/fini
>>>      functions for each test suite easier:
>>>      + Decouple device creation from test initialization by adding
>>>        helpers that initialize ttm_test_devices, a struct which stores
>>>        DRM/TTM devices, and can be used in test-specific init/finis
>>>        (see ttm_pool_tests.c for an example)
>>>      + Introduce generic init/fini functions for tests that only need
>>>        devices
>>>      + Add ttm_device field to ttm_test_devices (previously
>>>        ttm_test_devices_priv)
>>>    - Make TTM buffer object outlive its TT (Christian)
>>>    - Add a dedicated struct for ttm_pool_test (struct 
>>> ttm_pool_test_priv)
>>>    - Rename functions and structs:
>>>      + struct ttm_test_devices_priv   --> struct ttm_test_devices
>>>      + ttm_kunit_helper_init_device() --> ttm_device_kunit_init()
>>>      + ttm_kunit_helper_ttm_bo_init() --> ttm_bo_kunit_init()
>>>    - Split ttm_kunit_helper_init() into full config (with ttm_device
>>>      init) and basic (init only with device/drm_device) initialization
>>>      functions
>>>
>>> v3:
>>>    - Rename ttm_kunit_helper_alloc_device() to 
>>> ttm_kunit_helper_init_device()
>>>      (Christian)
>>>    - Don't leak a full-blown drm_gem_object in 
>>> ttm_kunit_helper_ttm_bo_init().
>>>      (Christian). Create a small mock object just to get 
>>> ttm_tt_init_fields()
>>>      to init the right number of pages
>>>    - As a follow up to the change above, delete 
>>> ttm_kunit_helper_ttm_bo_fini()
>>>      and just use ttm_bo_put()
>>>
>>> v2:
>>>    - Add missing symbol exports in ttm_kunit_helpers.c
>>>    - Update helpers include to fix compilation issues (didn't catch 
>>> it as
>>>      KUnit tests weren't enabled in the kernel I tested, an oversight
>>>      on my part)
>>>    - Add checks for ttm_pool fields in ttm_pool_alloc_basic(), 
>>> including the
>>>      one for NUMA node id
>>>    - Rebase the changes on the top of drm-tip
>>>
>>> --------------------------------
>>> [1] - https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html
>>>
>>> Karolina Stolarek (3):
>>>    drm/ttm: Introduce KUnit test
>>>    drm/ttm/tests: Add tests for ttm_device
>>>    drm/ttm/tests: Add tests for ttm_pool
>>>
>>>   drivers/gpu/drm/Kconfig                       |  15 +
>>>   drivers/gpu/drm/ttm/Makefile                  |   1 +
>>>   drivers/gpu/drm/ttm/tests/.kunitconfig        |   4 +
>>>   drivers/gpu/drm/ttm/tests/Makefile            |   6 +
>>>   drivers/gpu/drm/ttm/tests/ttm_device_test.c   | 212 +++++++++
>>>   drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c | 115 +++++
>>>   drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.h |  41 ++
>>>   drivers/gpu/drm/ttm/tests/ttm_pool_test.c     | 441 
>>> ++++++++++++++++++
>>>   8 files changed, 835 insertions(+)
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/.kunitconfig
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/Makefile
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/ttm_device_test.c
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.h
>>>   create mode 100644 drivers/gpu/drm/ttm/tests/ttm_pool_test.c
>>>
>>



More information about the dri-devel mailing list