From: Simon Glass <simon.glass@canonical.com> 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> --- test/dm/devres.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/dm/devres.c b/test/dm/devres.c index efc5c72ae2a..353353767b4 100644 --- a/test/dm/devres.c +++ b/test/dm/devres.c @@ -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)); -- 2.43.0