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),
>>>>        {}
>>>>    };
>>>>
>>
>
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.