From 0dcaa42694aa799cabb8db2fbd06ed1ce26d7b4c Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 11 Mar 2026 22:16:29 +0100 Subject: [PATCH] target/mips/cpu: Move initialization of memory region to realize function When introspecting the Loongson-3A4000 CPUs from the command line, QEMU currently crashes: $ ./qemu-system-mips64el -device Loongson-3A4000-mips64-cpu,help qemu-system-mips64el: ../../devel/qemu/system/physmem.c:1401: register_multipage: Assertion `num_pages' failed. Aborted (core dumped) Move the initialization of the memory regions to the realize function to fix this problem. Reported-by: Markus Armbruster Message-ID: <87y0jxzdrk.fsf@pond.sub.org> Tested-by: Markus Armbruster Signed-off-by: Thomas Huth Message-ID: <20260311211629.118608-1-thuth@redhat.com> --- target/mips/cpu.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/target/mips/cpu.c b/target/mips/cpu.c index e424d11501..5f88c077db 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -460,6 +460,14 @@ static void mips_cpu_realizefn(DeviceState *dev, Error **errp) MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(dev); Error *local_err = NULL; +#ifndef CONFIG_USER_ONLY + if (mcc->cpu_def->lcsr_cpucfg2 & (1 << CPUCFG2_LCSRP)) { + memory_region_init_io(&env->iocsr.mr, OBJECT(cpu), NULL, + env, "iocsr", UINT64_MAX); + address_space_init(&env->iocsr.as, &env->iocsr.mr, "IOCSR"); + } +#endif + if (!clock_get(cpu->clock)) { #ifndef CONFIG_USER_ONLY if (!qtest_enabled()) { @@ -504,14 +512,6 @@ static void mips_cpu_initfn(Object *obj) cpu->count_div = clock_new(OBJECT(obj), "clk-div-count"); env->count_clock = clock_new(OBJECT(obj), "clk-count"); env->cpu_model = mcc->cpu_def; -#ifndef CONFIG_USER_ONLY - if (mcc->cpu_def->lcsr_cpucfg2 & (1 << CPUCFG2_LCSRP)) { - memory_region_init_io(&env->iocsr.mr, OBJECT(cpu), NULL, - env, "iocsr", UINT64_MAX); - address_space_init(&env->iocsr.as, - &env->iocsr.mr, "IOCSR"); - } -#endif } static char *mips_cpu_type_name(const char *cpu_model)