From 1dfba71bef354c29f607abbc72065caf4519cf14 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Sat, 17 Feb 2018 23:21:19 -0500 Subject: [PATCH] exec.c: Add cpu_get_address_space() Add a function to return the AddressSpace for a CPU based on its numerical index. (Callers outside exec.c don't have access to the CPUAddressSpace struct so can't just fish it out of the CPUState struct directly.) Backports commit 651a5bc03705102de519ebf079a40ecc1da991db from qemu --- qemu/aarch64.h | 1 + qemu/aarch64eb.h | 1 + qemu/arm.h | 1 + qemu/armeb.h | 1 + qemu/exec.c | 6 ++++++ qemu/header_gen.py | 1 + qemu/include/exec/exec-all.h | 9 +++++++++ qemu/m68k.h | 1 + qemu/mips.h | 1 + qemu/mips64.h | 1 + qemu/mips64el.h | 1 + qemu/mipsel.h | 1 + qemu/powerpc.h | 1 + qemu/sparc.h | 1 + qemu/sparc64.h | 1 + qemu/x86_64.h | 1 + 16 files changed, 29 insertions(+) diff --git a/qemu/aarch64.h b/qemu/aarch64.h index ee59f99d..bc7bda24 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_aarch64 #define cpu_address_space_init cpu_address_space_init_aarch64 #define cpu_exec_init_all cpu_exec_init_all_aarch64 +#define cpu_get_address_space cpu_get_address_space_aarch64 #define vm_start vm_start_aarch64 #define resume_all_vcpus resume_all_vcpus_aarch64 #define a15_l2ctlr_read a15_l2ctlr_read_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index 0033ca2e..1693d98c 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_aarch64eb #define cpu_address_space_init cpu_address_space_init_aarch64eb #define cpu_exec_init_all cpu_exec_init_all_aarch64eb +#define cpu_get_address_space cpu_get_address_space_aarch64eb #define vm_start vm_start_aarch64eb #define resume_all_vcpus resume_all_vcpus_aarch64eb #define a15_l2ctlr_read a15_l2ctlr_read_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index f67c393d..1948188d 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_arm #define cpu_address_space_init cpu_address_space_init_arm #define cpu_exec_init_all cpu_exec_init_all_arm +#define cpu_get_address_space cpu_get_address_space_arm #define vm_start vm_start_arm #define resume_all_vcpus resume_all_vcpus_arm #define a15_l2ctlr_read a15_l2ctlr_read_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index 06171dd4..4c6f3026 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_armeb #define cpu_address_space_init cpu_address_space_init_armeb #define cpu_exec_init_all cpu_exec_init_all_armeb +#define cpu_get_address_space cpu_get_address_space_armeb #define vm_start vm_start_armeb #define resume_all_vcpus resume_all_vcpus_armeb #define a15_l2ctlr_read a15_l2ctlr_read_armeb diff --git a/qemu/exec.c b/qemu/exec.c index 48f4f1df..4d9e1992 100644 --- a/qemu/exec.c +++ b/qemu/exec.c @@ -412,6 +412,12 @@ void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx) memory_listener_register(as->uc, &newas->tcg_as_listener, as); } } + +AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx) +{ + /* Return the AddressSpace corresponding to the specified index */ + return cpu->cpu_ases[asidx].as; +} #endif void cpu_exec_init(CPUState *cpu, void *opaque) diff --git a/qemu/header_gen.py b/qemu/header_gen.py index ea45cecd..8267baef 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -55,6 +55,7 @@ symbols = ( 'memory_register_types', 'cpu_address_space_init', 'cpu_exec_init_all', + 'cpu_get_address_space', 'vm_start', 'resume_all_vcpus', 'a15_l2ctlr_read', diff --git a/qemu/include/exec/exec-all.h b/qemu/include/exec/exec-all.h index c795b877..7148da04 100644 --- a/qemu/include/exec/exec-all.h +++ b/qemu/include/exec/exec-all.h @@ -101,6 +101,15 @@ void QEMU_NORETURN cpu_loop_exit_restore(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); +/** + * cpu_get_address_space: + * @cpu: CPU to get address space from + * @asidx: index identifying which address space to get + * + * Return the requested address space of this CPU. @asidx + * specifies which address space to read. + */ +AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx); /* cputlb.c */ /** * tlb_flush_page: diff --git a/qemu/m68k.h b/qemu/m68k.h index e20aad29..0cd208ef 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_m68k #define cpu_address_space_init cpu_address_space_init_m68k #define cpu_exec_init_all cpu_exec_init_all_m68k +#define cpu_get_address_space cpu_get_address_space_m68k #define vm_start vm_start_m68k #define resume_all_vcpus resume_all_vcpus_m68k #define a15_l2ctlr_read a15_l2ctlr_read_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 2e851ca2..81d1dd2f 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_mips #define cpu_address_space_init cpu_address_space_init_mips #define cpu_exec_init_all cpu_exec_init_all_mips +#define cpu_get_address_space cpu_get_address_space_mips #define vm_start vm_start_mips #define resume_all_vcpus resume_all_vcpus_mips #define a15_l2ctlr_read a15_l2ctlr_read_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 814f54d7..e93a1c06 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_mips64 #define cpu_address_space_init cpu_address_space_init_mips64 #define cpu_exec_init_all cpu_exec_init_all_mips64 +#define cpu_get_address_space cpu_get_address_space_mips64 #define vm_start vm_start_mips64 #define resume_all_vcpus resume_all_vcpus_mips64 #define a15_l2ctlr_read a15_l2ctlr_read_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 2b239d1f..45a117e2 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_mips64el #define cpu_address_space_init cpu_address_space_init_mips64el #define cpu_exec_init_all cpu_exec_init_all_mips64el +#define cpu_get_address_space cpu_get_address_space_mips64el #define vm_start vm_start_mips64el #define resume_all_vcpus resume_all_vcpus_mips64el #define a15_l2ctlr_read a15_l2ctlr_read_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index d7ffadd8..2d8dd39f 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_mipsel #define cpu_address_space_init cpu_address_space_init_mipsel #define cpu_exec_init_all cpu_exec_init_all_mipsel +#define cpu_get_address_space cpu_get_address_space_mipsel #define vm_start vm_start_mipsel #define resume_all_vcpus resume_all_vcpus_mipsel #define a15_l2ctlr_read a15_l2ctlr_read_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 132c5b32..7cdcb05e 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_powerpc #define cpu_address_space_init cpu_address_space_init_powerpc #define cpu_exec_init_all cpu_exec_init_all_powerpc +#define cpu_get_address_space cpu_get_address_space_powerpc #define vm_start vm_start_powerpc #define resume_all_vcpus resume_all_vcpus_powerpc #define a15_l2ctlr_read a15_l2ctlr_read_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index 0f737cec..fb76eced 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_sparc #define cpu_address_space_init cpu_address_space_init_sparc #define cpu_exec_init_all cpu_exec_init_all_sparc +#define cpu_get_address_space cpu_get_address_space_sparc #define vm_start vm_start_sparc #define resume_all_vcpus resume_all_vcpus_sparc #define a15_l2ctlr_read a15_l2ctlr_read_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index b3117e2d..ae0536ef 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_sparc64 #define cpu_address_space_init cpu_address_space_init_sparc64 #define cpu_exec_init_all cpu_exec_init_all_sparc64 +#define cpu_get_address_space cpu_get_address_space_sparc64 #define vm_start vm_start_sparc64 #define resume_all_vcpus resume_all_vcpus_sparc64 #define a15_l2ctlr_read a15_l2ctlr_read_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 298d8bfe..6f9c1d63 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -49,6 +49,7 @@ #define memory_register_types memory_register_types_x86_64 #define cpu_address_space_init cpu_address_space_init_x86_64 #define cpu_exec_init_all cpu_exec_init_all_x86_64 +#define cpu_get_address_space cpu_get_address_space_x86_64 #define vm_start vm_start_x86_64 #define resume_all_vcpus resume_all_vcpus_x86_64 #define a15_l2ctlr_read a15_l2ctlr_read_x86_64