Re: [PATCH v6] drm/tests/gpu_buddy: add a new test case for buffer clearance during resume
Jani Nikula <[email protected]> Tue, 28 Jul 2026 10:58:16 +0300
| Newsgroups | org.freedesktop.lists.intel-gfx,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs Bertel Jungin Aukio 5, 02600 Espoo, Finland |
| Message-ID | <[email protected]> |
On Tue, 21 Jul 2026, Arunpravin Paneer Selvam <[email protected]> wrote: > Add a new unit test case for buffer clearance issue during > resume. > > Using a non-power-of-two mm size, allocate alternating blocks of > 4KiB in an even sequence and free them as cleared. All alternate > blocks should be marked as dirty and the split blocks should be > merged back to their original size when the blocks clear reset > function is called. > > Signed-off-by: Arunpravin Paneer Selvam <[email protected]> > Reviewed-by: Matthew Auld <[email protected]> > --- > v6: Standalone repost of patch 3/3 from series 151686; the other two > patches are already applied. Rebased onto the gpu_buddy rename > (drm_buddy_test.c -> gpu_buddy_test.c, drm_buddy_* -> gpu_buddy_*) > and updated the subject accordingly. No functional change; kept > Matthew's Reviewed-by as the port is mechanical. > > 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 7df5c2ae83bb..89698563c61b 100644 > --- a/drivers/gpu/tests/gpu_buddy_test.c > +++ b/drivers/gpu/tests/gpu_buddy_test.c > @@ -1002,6 +1002,47 @@ static void gpu_test_buddy_alloc_clear(struct kunit *test) > "buddy_alloc hit an error size=%lu\n", ps); > gpu_buddy_free_list(&mm, &allocated, GPU_BUDDY_CLEARED); > gpu_buddy_fini(&mm); > + > + /* > + * Using a non-power-of-two mm size, allocate alternating blocks of 4KiB in an > + * even sequence and free them as cleared. All blocks should be marked as > + * dirty and the split blocks should be merged back to their original > + * size when the blocks clear reset function is called. > + */ > + KUNIT_EXPECT_FALSE(test, gpu_buddy_init(&mm, mm_size, ps)); > + KUNIT_EXPECT_EQ(test, mm.max_order, max_order); > + > + i = 0; > + n_pages = mm_size / ps; > + do { > + if (i % 2 == 0) > + KUNIT_ASSERT_FALSE_MSG(test, gpu_buddy_alloc_blocks(&mm, 0, mm_size, > + ps, ps, &allocated, 0), > + "buddy_alloc hit an error size=%lu\n", ps); > + } while (++i < n_pages); Please prefer a for loop over do-while or while. This is so much more obvious: for (i = 0; i < n_pages; i++) > + > + gpu_buddy_free_list(&mm, &allocated, GPU_BUDDY_CLEARED); > + gpu_buddy_reset_clear(&mm, false); > + KUNIT_EXPECT_EQ(test, mm.clear_avail, 0); > + > + /* > + * Using a non-power-of-two mm size, allocate alternating blocks of 4KiB in an > + * odd sequence and free them as cleared. All blocks should be marked as > + * cleared and the split blocks should be merged back to their original > + * size when the blocks clear reset function is called. > + */ > + i = 0; > + do { > + if (i % 2 != 0) > + KUNIT_ASSERT_FALSE_MSG(test, gpu_buddy_alloc_blocks(&mm, 0, mm_size, > + ps, ps, &allocated, 0), > + "buddy_alloc hit an error size=%lu\n", ps); > + } while (++i < n_pages); > + > + gpu_buddy_free_list(&mm, &allocated, GPU_BUDDY_CLEARED); > + gpu_buddy_reset_clear(&mm, true); > + KUNIT_EXPECT_EQ(test, mm.clear_avail, mm_size); > + gpu_buddy_fini(&mm); > } > > static void gpu_test_buddy_alloc_contiguous(struct kunit *test) -- Jani Nikula, Intel