From 60975685cef5245e505897226c54e4e1a56fe4cc Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Sat, 17 Feb 2018 17:58:36 -0500 Subject: [PATCH] qemu_ram_block_by_name Add a function to find a RAMBlock by name; use it in two of the places that already open code that loop; we've got another use later in postcopy. Backports commit e3dd74934f2d2c8c67083995928ff68e8c1d0030 from qemu --- qemu/aarch64.h | 1 + qemu/aarch64eb.h | 1 + qemu/arm.h | 1 + qemu/armeb.h | 1 + qemu/exec.c | 21 +++++++++++++++++++++ qemu/header_gen.py | 1 + qemu/include/exec/cpu-common.h | 1 + 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, 36 insertions(+) diff --git a/qemu/aarch64.h b/qemu/aarch64.h index 94868eaa..bffb9ed2 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_aarch64 #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_aarch64 #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_aarch64 +#define qemu_ram_block_by_name qemu_ram_block_by_name_aarch64 #define qemu_ram_block_from_host qemu_ram_block_from_host_aarch64 #define qemu_ram_foreach_block qemu_ram_foreach_block_aarch64 #define qemu_ram_free qemu_ram_free_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index fb99f006..a853de48 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_aarch64eb #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_aarch64eb #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_aarch64eb +#define qemu_ram_block_by_name qemu_ram_block_by_name_aarch64eb #define qemu_ram_block_from_host qemu_ram_block_from_host_aarch64eb #define qemu_ram_foreach_block qemu_ram_foreach_block_aarch64eb #define qemu_ram_free qemu_ram_free_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index b8432a7b..470efc9f 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_arm #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_arm #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_arm +#define qemu_ram_block_by_name qemu_ram_block_by_name_arm #define qemu_ram_block_from_host qemu_ram_block_from_host_arm #define qemu_ram_foreach_block qemu_ram_foreach_block_arm #define qemu_ram_free qemu_ram_free_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index b16493fd..e014aa20 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_armeb #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_armeb #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_armeb +#define qemu_ram_block_by_name qemu_ram_block_by_name_armeb #define qemu_ram_block_from_host qemu_ram_block_from_host_armeb #define qemu_ram_foreach_block qemu_ram_foreach_block_armeb #define qemu_ram_free qemu_ram_free_armeb diff --git a/qemu/exec.c b/qemu/exec.c index 13233b2d..9bb07ded 100644 --- a/qemu/exec.c +++ b/qemu/exec.c @@ -1357,6 +1357,27 @@ found: return block; } +/* + * Finds the named RAMBlock + * + * name: The name of RAMBlock to find + * + * Returns: RAMBlock (or NULL if not found) + */ +RAMBlock *qemu_ram_block_by_name(struct uc_struct* uc, const char *name) +{ + RAMBlock *block; + + // Unicorn: Changed from QLIST_FOREACH_RCU to QTAILQ_FOREACH + QTAILQ_FOREACH(block, &uc->ram_list.blocks, next) { + if (!strcmp(name, block->idstr)) { + return block; + } + } + + return NULL; +} + /* Some of the softmmu routines need to translate from a host pointer (typically a TLB entry) back to a ram offset. */ MemoryRegion *qemu_ram_addr_from_host(struct uc_struct* uc, void *ptr, ram_addr_t *ram_addr) diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 32fbd021..f1a22848 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -2442,6 +2442,7 @@ symbols = ( 'qemu_ram_alloc', 'qemu_ram_alloc_from_ptr', 'qemu_ram_alloc_resizeable', + 'qemu_ram_block_by_name', 'qemu_ram_block_from_host', 'qemu_ram_foreach_block', 'qemu_ram_free', diff --git a/qemu/include/exec/cpu-common.h b/qemu/include/exec/cpu-common.h index af0051a0..4a066246 100644 --- a/qemu/include/exec/cpu-common.h +++ b/qemu/include/exec/cpu-common.h @@ -49,6 +49,7 @@ typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr); void qemu_ram_remap(struct uc_struct *uc, ram_addr_t addr, ram_addr_t length); /* This should not be used by devices. */ MemoryRegion *qemu_ram_addr_from_host(struct uc_struct* uc, void *ptr, ram_addr_t *ram_addr); +RAMBlock *qemu_ram_block_by_name(struct uc_struct* uc, const char *name); RAMBlock *qemu_ram_block_from_host(struct uc_struct* uc, void *ptr, bool round_offset, ram_addr_t *ram_addr, ram_addr_t *offset); void qemu_ram_set_idstr(struct uc_struct *uc, ram_addr_t addr, const char *name, DeviceState *dev); diff --git a/qemu/m68k.h b/qemu/m68k.h index 9b2f334f..9ba6054a 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_m68k #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_m68k #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_m68k +#define qemu_ram_block_by_name qemu_ram_block_by_name_m68k #define qemu_ram_block_from_host qemu_ram_block_from_host_m68k #define qemu_ram_foreach_block qemu_ram_foreach_block_m68k #define qemu_ram_free qemu_ram_free_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 7729efaa..c6856cd2 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_mips #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_mips #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_mips +#define qemu_ram_block_by_name qemu_ram_block_by_name_mips #define qemu_ram_block_from_host qemu_ram_block_from_host_mips #define qemu_ram_foreach_block qemu_ram_foreach_block_mips #define qemu_ram_free qemu_ram_free_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index e5bac112..6dd313c8 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_mips64 #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_mips64 #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_mips64 +#define qemu_ram_block_by_name qemu_ram_block_by_name_mips64 #define qemu_ram_block_from_host qemu_ram_block_from_host_mips64 #define qemu_ram_foreach_block qemu_ram_foreach_block_mips64 #define qemu_ram_free qemu_ram_free_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 554937c4..380bbc36 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_mips64el #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_mips64el #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_mips64el +#define qemu_ram_block_by_name qemu_ram_block_by_name_mips64el #define qemu_ram_block_from_host qemu_ram_block_from_host_mips64el #define qemu_ram_foreach_block qemu_ram_foreach_block_mips64el #define qemu_ram_free qemu_ram_free_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 8eed6fa4..d885353f 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_mipsel #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_mipsel #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_mipsel +#define qemu_ram_block_by_name qemu_ram_block_by_name_mipsel #define qemu_ram_block_from_host qemu_ram_block_from_host_mipsel #define qemu_ram_foreach_block qemu_ram_foreach_block_mipsel #define qemu_ram_free qemu_ram_free_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index c3cea22c..b508372a 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_powerpc #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_powerpc #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_powerpc +#define qemu_ram_block_by_name qemu_ram_block_by_name_powerpc #define qemu_ram_block_from_host qemu_ram_block_from_host_powerpc #define qemu_ram_foreach_block qemu_ram_foreach_block_powerpc #define qemu_ram_free qemu_ram_free_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index 1677b1a4..ce48c247 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_sparc #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_sparc #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_sparc +#define qemu_ram_block_by_name qemu_ram_block_by_name_sparc #define qemu_ram_block_from_host qemu_ram_block_from_host_sparc #define qemu_ram_foreach_block qemu_ram_foreach_block_sparc #define qemu_ram_free qemu_ram_free_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index d8af9602..e04ea43e 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_sparc64 #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_sparc64 #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_sparc64 +#define qemu_ram_block_by_name qemu_ram_block_by_name_sparc64 #define qemu_ram_block_from_host qemu_ram_block_from_host_sparc64 #define qemu_ram_foreach_block qemu_ram_foreach_block_sparc64 #define qemu_ram_free qemu_ram_free_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index be478157..2d41b7dc 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -2436,6 +2436,7 @@ #define qemu_ram_alloc qemu_ram_alloc_x86_64 #define qemu_ram_alloc_from_ptr qemu_ram_alloc_from_ptr_x86_64 #define qemu_ram_alloc_resizeable qemu_ram_alloc_resizeable_x86_64 +#define qemu_ram_block_by_name qemu_ram_block_by_name_x86_64 #define qemu_ram_block_from_host qemu_ram_block_from_host_x86_64 #define qemu_ram_foreach_block qemu_ram_foreach_block_x86_64 #define qemu_ram_free qemu_ram_free_x86_64