Hi Christian,
On 25.05.2023 10:30, Christian König wrote:
Hi Karolina,
Am 16.05.23 um 16:02 schrieb Karolina Stolarek:
Hi all,
I'm working on KUnit tests for TTM subsystem (nothing RFC-worthy yet),
with an aim to provide better test coverage for the code used by i915
and Xe. Before digging deeper, I wanted to check if the priorities
outlined here make sense and clarify a couple of things.
oh, yes please finally somebody taking care of this :)
:)
My plan is to focus on testing the higher layer structs to cover
what's below, e.g. test ttm_pool functions by testing
ttm_device_init() and ttm_tt_populate(). I want to split the work into
a couple of batches:
1. Basic testing of structs (init/fini and reserve/unreserve), with an
introduction of fake VRAM resource manager to test
ttm_resource_manager init. Add some ttm_bo_validate() test stubs.
2. Eviction-specific testing with ttm_bo_validate() to trigger
ttm_mem_evict_first(), possibly with a separate testing of
ttm_resource_*_bulk_move() and ttm_bo(un)pin(). Add tests for
ttm_resource_manager struct, including ttm_sys_man.
3. ttm_tt_(un)populate() testing, adding more coverage to what was
implemented in (1) and (2).
4. Testing of ttm_bo_vm_ops and mmap/kmap/other features offered by
ttm_bo_util (not quite clear on how to approach it; suggestions are
welcome).
Is there something else I should pay attention to here? I can share
more detailed plan listing specific functions and what tests could
cover what, if needed.
Sounds like a plan to me. But I suggest to start with the ttm_pool since
that one is easy to test and initialize without the
drm_device/drm_gem_object stuff etc... Write a patch for that, get it
reviewed and upstream and then extend from there.
Hmm, I can do it, ttm_pool has little dependency on other modules. IIRC,
Thomas suggested that I should try to cover ttm_pool functions with
tests from the higher level, but I don't mind writing independent tests.
As for drm_device init, I'm using functions from drm_kunit_helper.c and
they work fine. I was able to write simple tests for ttm_device_init()
with a dummy device.
If you don't mind, I can write some tests for ttm_pool, add some for
ttm_device, and send an RFC. It's going to be quite a small patch
series, but that fine, it'll make the review less painful :)
Also, I have a question on how should I treat drm_gem_object when
testing ttm_buffer_object. From what I understand, the majority of
drivers initialize and use the object, but the TTM BO can work without
it. Should I write the tests against TTM-backed gem objects or use TTM
BOs with a dummy gem object embedded?
IIRC VMWGFX was the last one to not use the GEM object, but Zack
implemented that a whole ago. So the GEM object is now mandatory.
OK, that makes sense, thanks. I'll go with GEM objects then.
It should be trivial to initialize. Just see the GEM unit tests how to
come up with a dummy GEM driver and GEM objects. IIRC it was something
like 10 lines of code for the EXEC unit test I've wrote.
Right, thanks for the pointers, I'll check this out.
All the best,
Karolina
Thanks,
Christian.
Many thanks,
Karolina