test: dm: Fix delta usage in dm_test_devres_free()

This test passes delta values to ut_check_delta() where it expects
absolute values. ut_check_delta(last) computes (current - last), so
'last' must be an absolute reference point from a previous
ut_check_delta(0) call, not a delta.

The bug causes incorrect memory accounting that happens to work with
smaller allocation overhead but fails when mcheck header size increases.

Use ut_check_delta(0) to capture absolute reference points before each
operation.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
This commit is contained in:
Simon Glass
2025-12-09 06:25:54 -07:00
parent e0aa4bfae6
commit 82be61976f

View File

@@ -44,23 +44,21 @@ DM_TEST(dm_test_devres_alloc, UTF_SCAN_PDATA);
/* Test devm_kfree() can be used to free memory too */
static int dm_test_devres_free(struct unit_test_state *uts)
{
ulong mem_start, mem_dev, mem_kmalloc;
ulong mem_start, mem_alloc;
struct udevice *dev;
void *ptr;
mem_start = ut_check_delta(0);
ut_assertok(uclass_first_device_err(UCLASS_TEST, &dev));
mem_dev = ut_check_delta(mem_start);
ut_assert(mem_dev > 0);
ut_assert(ut_check_delta(mem_start) > 0);
ptr = devm_kmalloc(dev, TEST_DEVRES_SIZE, 0);
ut_assert(ptr != NULL);
mem_kmalloc = ut_check_delta(mem_dev);
ut_assert(mem_kmalloc > 0);
/* Free the ptr and check that memory usage goes down */
mem_alloc = ut_check_delta(0);
devm_kfree(dev, ptr);
ut_assert(ut_check_delta(mem_kmalloc) < 0);
ut_assert(ut_check_delta(mem_alloc) < 0);
device_remove(dev, DM_REMOVE_NORMAL);
ut_asserteq(0, ut_check_delta(mem_start));