mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
exec.c: Don't set cpu->as until cpu_address_space_init
Rather than setting cpu->as unconditionally in cpu_exec_init (and then having target-i386 override this later), don't set it until the first call to cpu_address_space_init. This requires us to initialise the address space for both TCG and KVM (KVM doesn't need the AS listener but it does require cpu->as to be set). For target CPUs which don't set up any address spaces (currently everything except i386), add the default address_space_memory in qemu_init_vcpu(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Acked-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
This commit is contained in:
parent
4a94fc9bf2
commit
56943e8cc1
4 changed files with 39 additions and 9 deletions
16
exec.c
16
exec.c
|
@ -536,8 +536,13 @@ CPUState *qemu_get_cpu(int index)
|
|||
}
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
void tcg_cpu_address_space_init(CPUState *cpu, AddressSpace *as)
|
||||
void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx)
|
||||
{
|
||||
if (asidx == 0) {
|
||||
/* address space 0 gets the convenience alias */
|
||||
cpu->as = as;
|
||||
}
|
||||
|
||||
/* We only support one address space per cpu at the moment. */
|
||||
assert(cpu->as == as);
|
||||
|
||||
|
@ -549,8 +554,10 @@ void tcg_cpu_address_space_init(CPUState *cpu, AddressSpace *as)
|
|||
cpu->cpu_ases = g_new0(CPUAddressSpace, 1);
|
||||
cpu->cpu_ases[0].cpu = cpu;
|
||||
cpu->cpu_ases[0].as = as;
|
||||
cpu->cpu_ases[0].tcg_as_listener.commit = tcg_commit;
|
||||
memory_listener_register(&cpu->cpu_ases[0].tcg_as_listener, as);
|
||||
if (tcg_enabled()) {
|
||||
cpu->cpu_ases[0].tcg_as_listener.commit = tcg_commit;
|
||||
memory_listener_register(&cpu->cpu_ases[0].tcg_as_listener, as);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -605,8 +612,9 @@ void cpu_exec_init(CPUState *cpu, Error **errp)
|
|||
int cpu_index;
|
||||
Error *local_err = NULL;
|
||||
|
||||
cpu->as = NULL;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
cpu->as = &address_space_memory;
|
||||
cpu->thread_id = qemu_get_thread_id();
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue