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

Karolina Stolarek karolina.stolarek at intel.com
Tue Aug 8 09:48:16 UTC 2023


Hi Christian,

On 7.08.2023 17:06, Christian König wrote:
> 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.

I'll send out the series in a minute or so. I decided to _not_ add your 
r-b to the patches I modified, so you can take the final look and make 
sure everything is fine. There were no conflicts during the rebase, you 
can always take v5 if you fancy so.

Thank you for your help!

All the best,
Karolina

> 
> 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