[PATCH v2 2/2] drm/tests: Add a unit test for range bias allocation

Matthew Auld matthew.auld at intel.com
Mon May 13 08:19:11 UTC 2024


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?

> +
> +	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?

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