[PATCH v2 2/2] drm/tests: Add a unit test for range bias allocation
Matthew Auld
matthew.auld at intel.com
Mon May 13 15:20:59 UTC 2024
On 13/05/2024 16:11, Paneer Selvam, Arunpravin wrote:
> Hi Matthew,
>
> On 5/13/2024 1:49 PM, Matthew Auld wrote:
>> On 12/05/2024 08:59, Arunpravin Paneer Selvam wrote:
>>> Allocate cleared blocks in the bias range when the DRM
>>> buddy's clear avail is zero. This will validate the bias
>>> range allocation in scenarios like system boot when no
>>> cleared blocks are available and exercise the fallback
>>> path too. The resulting blocks should always be dirty.
>>>
>>> Signed-off-by: Arunpravin Paneer Selvam
>>> <Arunpravin.PaneerSelvam at amd.com>
>>> ---
>>> drivers/gpu/drm/tests/drm_buddy_test.c | 35 ++++++++++++++++++++++++++
>>> 1 file changed, 35 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/tests/drm_buddy_test.c
>>> b/drivers/gpu/drm/tests/drm_buddy_test.c
>>> index e3b50e240d36..a194f271bc55 100644
>>> --- a/drivers/gpu/drm/tests/drm_buddy_test.c
>>> +++ b/drivers/gpu/drm/tests/drm_buddy_test.c
>>> @@ -26,6 +26,8 @@ static void drm_test_buddy_alloc_range_bias(struct
>>> kunit *test)
>>> u32 mm_size, ps, bias_size, bias_start, bias_end, bias_rem;
>>> DRM_RND_STATE(prng, random_seed);
>>> unsigned int i, count, *order;
>>> + struct drm_buddy_block *block;
>>> + unsigned long flags;
>>> struct drm_buddy mm;
>>> LIST_HEAD(allocated);
>>> @@ -222,6 +224,39 @@ static void
>>> drm_test_buddy_alloc_range_bias(struct kunit *test)
>>> drm_buddy_free_list(&mm, &allocated, 0);
>>> drm_buddy_fini(&mm);
>>> +
>>> + /*
>>> + * Allocate cleared blocks in the bias range when the DRM
>>> buddy's clear avail is
>>> + * zero. This will validate the bias range allocation in
>>> scenarios like system boot
>>> + * when no cleared blocks are available and exercise the
>>> fallback path too. The resulting
>>> + * blocks should always be dirty.
>>> + */
>>> +
>>> + KUNIT_ASSERT_FALSE_MSG(test, drm_buddy_init(&mm, mm_size, ps),
>>> + "buddy_init failed\n");
>>> + mm.clear_avail = 0;
>>
>> Should already be zero, right? Maybe make this an assert instead?
> No, since the mm declared as a local variable in the test case,
> mm.clear_avail is not zero.
That sounds like a bug IMO. The init() should initialize it, like it
does for mm.avail and everything else.
>>
>>> +
>>> + bias_start = round_up(prandom_u32_state(&prng) % (mm_size - ps),
>>> ps);
>>> + bias_end = round_up(bias_start + prandom_u32_state(&prng) %
>>> (mm_size - bias_start), ps);
>>> + bias_end = max(bias_end, bias_start + ps);
>>> + bias_rem = bias_end - bias_start;
>>> +
>>> + flags = DRM_BUDDY_CLEAR_ALLOCATION | DRM_BUDDY_RANGE_ALLOCATION;
>>> + u32 size = max(round_up(prandom_u32_state(&prng) % bias_rem,
>>> ps), ps);
>>
>> u32 declaration should be moved to above?
> Sure.
>
> Thanks,
> Arun.
>>
>> Otherwise,
>> Reviewed-by: Matthew Auld <matthew.auld at intel.com>
>>
>>> +
>>> + KUNIT_ASSERT_FALSE_MSG(test,
>>> + drm_buddy_alloc_blocks(&mm, bias_start,
>>> + bias_end, size, ps,
>>> + &allocated,
>>> + flags),
>>> + "buddy_alloc failed with bias(%x-%x), size=%u,
>>> ps=%u\n",
>>> + bias_start, bias_end, size, ps);
>>> +
>>> + list_for_each_entry(block, &allocated, link)
>>> + KUNIT_EXPECT_EQ(test, drm_buddy_block_is_clear(block), false);
>>> +
>>> + drm_buddy_free_list(&mm, &allocated, 0);
>>> + drm_buddy_fini(&mm);
>>> }
>>> static void drm_test_buddy_alloc_clear(struct kunit *test)
>
More information about the amd-gfx
mailing list