[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