[PATCH v2 2/2] drm/tests: Add a unit test for range bias allocation
Paneer Selvam, Arunpravin
arunpravin.paneerselvam at amd.com
Mon May 13 15:11:51 UTC 2024
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.
>
>> +
>> + 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