diff --git a/zephyr/test/vmh.c b/zephyr/test/vmh.c index f12c57b269fb..abbde9089a12 100644 --- a/zephyr/test/vmh.c +++ b/zephyr/test/vmh.c @@ -17,24 +17,76 @@ LOG_MODULE_DECLARE(sof_boot_test, CONFIG_SOF_LOG_LEVEL); -static int vmh_test(void) +#define ALLOC_SIZE1 1616 +#define ALLOC_SIZE2 26 + +static int vmh_test_single(bool span) { - struct vmh_heap *h = vmh_init_heap(NULL, MEM_REG_ATTR_CORE_HEAP, 0, false); + struct vmh_heap *h = vmh_init_heap(NULL, MEM_REG_ATTR_CORE_HEAP, 0, span); if (!h) - return -ENOMEM; + return -EINVAL; + + char *buf = vmh_alloc(h, ALLOC_SIZE1); + int ret1; + + if (buf) { + buf[0] = 0; + buf[ALLOC_SIZE1 - 1] = 15; + + ret1 = vmh_free(h, buf); + if (ret1 < 0) + goto out; + } else if (span) { + ret1 = -ENOMEM; + LOG_ERR("Failed to allocate %u in contiguous mode", ALLOC_SIZE1); + goto out; + } else { + LOG_WRN("Ignoring failure to allocate %u in non-contiguous mode", + ALLOC_SIZE1); + } - char *buf = vmh_alloc(h, 1616); + buf = vmh_alloc(h, ALLOC_SIZE2); - if (!buf) - return -ENOMEM; + if (!buf) { + ret1 = -ENOMEM; + LOG_ERR("Failed to allocate %u", ALLOC_SIZE2); + goto out; + } buf[0] = 0; - buf[1615] = 15; + buf[ALLOC_SIZE2 - 1] = 15; + + ret1 = vmh_free(h, buf); + if (ret1 < 0) + LOG_ERR("Free error %d", ret1); + +out: + int ret2 = vmh_free_heap(h); + + if (ret2 < 0) + LOG_ERR("Free heap error %d", ret2); + + if (!ret1) + ret1 = ret2; + + return ret1; +} + +static int vmh_test(void) +{ + int ret = vmh_test_single(false); + + if (ret < 0) { + LOG_ERR("Non-contiguous test error %d", ret); + return ret; + } - vmh_free(h, buf); + ret = vmh_test_single(true); + if (ret < 0) + LOG_ERR("Contiguous test error %d", ret); - return vmh_free_heap(h); + return ret; } ZTEST(sof_boot, vmh)