diff --git a/qemu/cpus.c b/qemu/cpus.c index 427c642e..28e331da 100644 --- a/qemu/cpus.c +++ b/qemu/cpus.c @@ -104,11 +104,8 @@ int qemu_init_vcpu(CPUState *cpu) /* If the target cpu hasn't set up any address spaces itself, * give it the default one. */ - AddressSpace *as = address_space_init_shareable(cpu->uc, - cpu->memory, - "cpu-memory"); cpu->num_ases = 1; - cpu_address_space_init(cpu, as, 0); + cpu_address_space_init(cpu, 0, "cpu-memory", cpu->memory); } if (tcg_enabled(cpu->uc)) { diff --git a/qemu/exec.c b/qemu/exec.c index 6bd65155..536769c2 100644 --- a/qemu/exec.c +++ b/qemu/exec.c @@ -533,9 +533,14 @@ CPUState *qemu_get_cpu(struct uc_struct *uc, int index) } #if !defined(CONFIG_USER_ONLY) -void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx) +void cpu_address_space_init(CPUState *cpu, int asidx, + const char *prefix, MemoryRegion *mr) { CPUAddressSpace *newas; + AddressSpace *as = g_new0(AddressSpace, 1); + + assert(mr); + address_space_init(cpu->uc, as, mr, prefix); /* Target code should have set num_ases before calling us */ assert(asidx < cpu->num_ases); diff --git a/qemu/include/exec/exec-all.h b/qemu/include/exec/exec-all.h index d511f645..77f6f5d9 100644 --- a/qemu/include/exec/exec-all.h +++ b/qemu/include/exec/exec-all.h @@ -73,8 +73,9 @@ void QEMU_NORETURN cpu_loop_exit_atomic(CPUState *cpu, uintptr_t pc); /** * cpu_address_space_init: * @cpu: CPU to add this address space to - * @as: address space to add * @asidx: integer index of this address space + * @prefix: prefix to be used as name of address space + * @mr: the root memory region of address space * * Add the specified address space to the CPU's cpu_ases list. * The address space added with @asidx 0 is the one used for the @@ -88,7 +89,8 @@ void QEMU_NORETURN cpu_loop_exit_atomic(CPUState *cpu, uintptr_t pc); * * Note that with KVM only one address space is supported. */ -void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx); +void cpu_address_space_init(CPUState *cpu, int asidx, + const char *prefix, MemoryRegion *mr); #endif #if !defined(CONFIG_USER_ONLY) && defined(CONFIG_TCG) diff --git a/qemu/target/arm/cpu.c b/qemu/target/arm/cpu.c index f6da4d60..838b97ca 100644 --- a/qemu/target/arm/cpu.c +++ b/qemu/target/arm/cpu.c @@ -686,25 +686,17 @@ static int arm_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err #ifndef CONFIG_USER_ONLY if (cpu->has_el3 || arm_feature(env, ARM_FEATURE_M_SECURITY)) { - AddressSpace *as; - cs->num_ases = 2; if (!cpu->secure_memory) { cpu->secure_memory = cs->memory; } - as = address_space_init_shareable(uc, - cpu->secure_memory, - "cpu-secure-memory"); - cpu_address_space_init(cs, as, ARMASIdx_S); + cpu_address_space_init(cs, ARMASIdx_S, "cpu-secure-memory", + cpu->secure_memory); } else { cs->num_ases = 1; } - cpu_address_space_init(cs, - address_space_init_shareable(uc, - cs->memory, - "cpu-memory"), - ARMASIdx_NS); + cpu_address_space_init(cs, ARMASIdx_NS, "cpu-memory", cs->memory); #endif init_cpreg_list(cpu); diff --git a/qemu/target/i386/cpu.c b/qemu/target/i386/cpu.c index e30cf4cf..de12249e 100644 --- a/qemu/target/i386/cpu.c +++ b/qemu/target/i386/cpu.c @@ -4108,10 +4108,6 @@ static int x86_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err #ifndef CONFIG_USER_ONLY if (tcg_enabled(uc)) { - AddressSpace *as_normal = address_space_init_shareable(uc, cs->memory, - "cpu-memory"); - AddressSpace *as_smm = g_new(AddressSpace, 1); - cpu->cpu_as_mem = g_new(MemoryRegion, 1); cpu->cpu_as_root = g_new(MemoryRegion, 1); @@ -4126,11 +4122,10 @@ static int x86_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err get_system_memory(uc), 0, ~0ull); memory_region_add_subregion_overlap(cpu->cpu_as_root, 0, cpu->cpu_as_mem, 0); memory_region_set_enabled(cpu->cpu_as_mem, true); - address_space_init(uc, as_smm, cpu->cpu_as_root, "CPU"); cs->num_ases = 2; - cpu_address_space_init(cs, as_normal, 0); - cpu_address_space_init(cs, as_smm, 1); + cpu_address_space_init(cs, 0, "cpu-memory", cs->memory); + cpu_address_space_init(cs, 1, "cpu-smm", cpu->cpu_as_root); } #endif