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:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user