RE: [PATCH V3 2/2] gpu/tests/gpu_buddy: Add KUnit test for gpu_buddy_allocated_addr_to_block

"Upadhyay, Tejas" <[email protected]>
Newsgroups org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe
Message-ID <DS0PR11MB8718C53436BDECFD9FBA3F6D81D32@DS0PR11MB8718.namprd11.prod.outlook.com>

> -----Original Message-----
> From: Auld, Matthew <[email protected]>
> Sent: 29 July 2026 21:37
> To: Upadhyay, Tejas <[email protected]>; intel-
> [email protected]; [email protected]
> Cc: [email protected]
> Subject: Re: [PATCH V3 2/2] gpu/tests/gpu_buddy: Add KUnit test for
> gpu_buddy_allocated_addr_to_block
> 
> On 29/07/2026 16:38, Matthew Auld wrote:
> > On 28/07/2026 13:44, 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
> >
> > Do we allow an unaligned addr? It looks like we do, but I would think
> > best to reject if not at least aligned to chunk size?
> 
> Or if that is a legit thing, then maybe also include it in the test coverage. And
> even if rejected, maybe also cover that in the test.

No we expect aligned address. I will put a check to validate if address is aligned.

Tejas
> 
> >
> >>
> >> 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]>
> >> ---
> >>   drivers/gpu/tests/gpu_buddy_test.c | 41
> >> ++++++++++++++++++++++++++++++
> >>   1 file changed, 41 insertions(+)
> >>
> >> diff --git a/drivers/gpu/tests/gpu_buddy_test.c b/drivers/gpu/tests/
> >> gpu_buddy_test.c index 89698563c61b..21c90e96ac13 100644
> >> --- a/drivers/gpu/tests/gpu_buddy_test.c
> >> +++ b/drivers/gpu/tests/gpu_buddy_test.c
> >> @@ -1422,6 +1422,46 @@ 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);
> >> +
> >> +    /* 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)
> >> @@ -1446,6 +1486,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),
> >>       {}
> >>   };
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.