On Fri, 19 Jun 2026 19:11:36 +0800
fanhuang <[email protected]> wrote:

> Boot one sp-mem device and assert the guest's e820 table gains exactly
> one E820_SOFT_RESERVED range whose length matches the device's backend
> size.
> 
> Signed-off-by: FangSheng Huang <[email protected]>

Acked-by: Igor Mammedov <[email protected]>

> ---
>  tests/qtest/e820-test.c | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
> 
> diff --git a/tests/qtest/e820-test.c b/tests/qtest/e820-test.c
> index 1db0744c08..aafa3c1aa2 100644
> --- a/tests/qtest/e820-test.c
> +++ b/tests/qtest/e820-test.c
> @@ -16,6 +16,7 @@
>  #include "libqtest.h"
>  #include "libqos/fw_cfg.h"
>  #include "qemu/bswap.h"
> +#include "qemu/units.h"
>  
>  /* e820 entry layout and types (cf. hw/i386/e820_memory_layout.h) */
>  #define E820_RAM            1
> @@ -85,11 +86,44 @@ static void test_e820_basic(void)
>      qtest_quit(s);
>  }
>  
> +static void test_e820_sp_mem(void)
> +{
> +    struct e820_entry table[E820_MAX_ENTRIES];
> +    QFWCFG *fw_cfg;
> +    QTestState *s;
> +    size_t n, i;
> +    int soft_reserved = 0;
> +    uint64_t soft_reserved_len = 0;
> +
> +    s = qtest_init("-machine q35 -m 256M,slots=2,maxmem=2G "
> +                   "-object memory-backend-ram,id=ram0,size=256M "
> +                   "-numa node,nodeid=0,memdev=ram0 "
> +                   "-object memory-backend-ram,id=spm0,size=128M "
> +                   "-device sp-mem,id=sp0,memdev=spm0,node=0");
> +    fw_cfg = pc_fw_cfg_init(s);
> +
> +    n = get_e820_table(fw_cfg, table);
> +    for (i = 0; i < n; i++) {
> +        if (le32_to_cpu(table[i].type) == E820_SOFT_RESERVED) {
> +            soft_reserved++;
> +            soft_reserved_len = le64_to_cpu(table[i].length);
> +        }
> +    }
> +
> +    /* exactly one SOFT_RESERVED range, sized to the backend */
> +    g_assert_cmpint(soft_reserved, ==, 1);
> +    g_assert_cmpint(soft_reserved_len, ==, 128 * MiB);
> +
> +    pc_fw_cfg_uninit(fw_cfg);
> +    qtest_quit(s);
> +}
> +
>  int main(int argc, char **argv)
>  {
>      g_test_init(&argc, &argv, NULL);
>  
>      qtest_add_func("e820/basic", test_e820_basic);
> +    qtest_add_func("e820/sp-mem", test_e820_sp_mem);
>  
>      return g_test_run();
>  }


Reply via email to