Re: [PATCH V4 2/2] gpu/tests/gpu_buddy: Add KUnit test for gpu_buddy_allocated_addr_to_block
Arunpravin Paneer Selvam <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe |
|---|---|
| Message-ID | <[email protected]> |
On 8/6/2026 3:49 PM, Matthew Auld wrote: > On 06/08/2026 10:46, Upadhyay, Tejas wrote: >> >> >>> -----Original Message----- >>> From: Auld, Matthew <[email protected]> >>> Sent: 06 August 2026 14:31 >>> To: Upadhyay, Tejas <[email protected]>; intel- >>> [email protected]; [email protected] >>> Cc: [email protected] >>> Subject: Re: [PATCH V4 2/2] gpu/tests/gpu_buddy: Add KUnit test for >>> gpu_buddy_allocated_addr_to_block >>> >>> On 06/08/2026 06:36, Tejas Upadhyay wrote: >>>> Add a new KUnit test gpu_test_buddy_addr_to_block() that validates the >>>> gpu_buddy_allocated_addr_to_block() helper which traces a address back >>>> to its allocated buddy block. >>>> >>>> The test covers: >>>> - Exact address matching returns the correct allocated block >>>> - An unallocated address inside the manager should return NULL >>>> - An address outside the manager should return -ENXIO >>>> >>>> v4(MattA): >>>> - Add test for unaligned address >>>> v3(Sashiko): >>>> - remove unused target_addr variable >>>> v2(Sashiko): >>>> - Drop the mutex and lockdep annotation; standalone KUnit tests do >>>> not register a driver lock. >>>> >>>> Signed-off-by: Tejas Upadhyay <[email protected]> >>> >>> Reviewed-by: Matthew Auld <[email protected]> >> >> Hi Matt, >> >> Thanks for review. Since I don’t have merge rights on drm-tip, Would >> you please help merging this series. > > I think Arun normally merges these. Arun, any objections? We need this > for an upcoming driver feature (patches on the list), so wanted to > land this API ahead of time. I don't think this will conflict much > with the big rework you were doing. No objections. Do you want me to merge the series below into drm-misc-next? https://patchwork.freedesktop.org/series/171145/ Regards, Arun. > >> >> Tejas >>> >>>> --- >>>> drivers/gpu/tests/gpu_buddy_test.c | 45 >>> ++++++++++++++++++++++++++++++ >>>> 1 file changed, 45 insertions(+) >>>> >>>> diff --git a/drivers/gpu/tests/gpu_buddy_test.c >>>> b/drivers/gpu/tests/gpu_buddy_test.c >>>> index 7df5c2ae83bb..04e425eb8bdd 100644 >>>> --- a/drivers/gpu/tests/gpu_buddy_test.c >>>> +++ b/drivers/gpu/tests/gpu_buddy_test.c >>>> @@ -1381,6 +1381,50 @@ static void >>> gpu_test_buddy_alloc_exceeds_max_order(struct kunit *test) >>>> gpu_buddy_fini(&mm); >>>> } >>>> >>>> +static void gpu_test_buddy_addr_to_block(struct kunit *test) { >>>> + struct gpu_buddy_block *allocated_block, *found_block; >>>> + LIST_HEAD(allocated_list); >>>> + const u64 test_size = SZ_4M + SZ_2M; >>>> + const u64 alloc_start = SZ_4M; >>>> + const u64 alloc_size = SZ_4K; >>>> + const u64 chunk_size = SZ_4K; >>>> + struct gpu_buddy mm; >>>> + >>>> + KUNIT_ASSERT_FALSE_MSG(test, gpu_buddy_init(&mm, test_size, >>> chunk_size), >>>> + "buddy_init failed\n"); >>>> + >>>> + KUNIT_ASSERT_FALSE_MSG(test, gpu_buddy_alloc_blocks(&mm, >>> alloc_start, >>>> + alloc_start + >>> alloc_size, >>>> + alloc_size, >>> chunk_size, >>>> + &allocated_list, 0), >>>> + "buddy_alloc failed\n"); >>>> + >>>> + allocated_block = list_first_entry(&allocated_list, struct >>> gpu_buddy_block, link); >>>> + KUNIT_EXPECT_EQ(test, gpu_buddy_block_offset(allocated_block), >>> alloc_start); >>>> + KUNIT_EXPECT_EQ(test, gpu_buddy_block_size(&mm, >>> allocated_block), >>>> +alloc_size); >>>> + >>>> + found_block = gpu_buddy_allocated_addr_to_block(&mm, >>> alloc_start); >>>> + KUNIT_EXPECT_PTR_EQ(test, found_block, allocated_block); >>>> + >>>> + /* Unaligned address inside the allocated block (should >>>> resolve to the >>> same block) */ >>>> + found_block = gpu_buddy_allocated_addr_to_block(&mm, alloc_start >>> + 16); >>>> + KUNIT_EXPECT_PTR_EQ(test, found_block, allocated_block); >>>> + >>>> + /* An unallocated address inside the manager should return >>>> NULL. */ >>>> + found_block = gpu_buddy_allocated_addr_to_block(&mm, >>>> + alloc_start - >>> chunk_size); >>>> + KUNIT_EXPECT_NULL(test, found_block); >>>> + >>>> + /* An address outside the manager should return -ENXIO. */ >>>> + found_block = gpu_buddy_allocated_addr_to_block(&mm, test_size); >>>> + KUNIT_EXPECT_EQ(test, PTR_ERR(found_block), -ENXIO); >>>> + >>>> + /* 3. Standard inline cleanup flow */ >>>> + gpu_buddy_free_list(&mm, &allocated_list, 0); >>>> + gpu_buddy_fini(&mm); >>>> +} >>>> + >>>> static int gpu_buddy_suite_init(struct kunit_suite *suite) >>>> { >>>> while (!random_seed) >>>> @@ -1405,6 +1449,7 @@ static struct kunit_case gpu_buddy_tests[] = { >>>> KUNIT_CASE(gpu_test_buddy_alloc_exceeds_max_order), >>>> KUNIT_CASE(gpu_test_buddy_offset_aligned_allocation), >>>> KUNIT_CASE(gpu_test_buddy_subtree_offset_alignment_stress), >>>> + KUNIT_CASE(gpu_test_buddy_addr_to_block), >>>> {} >>>> }; >>>> >> >