diff --git a/qemu/aarch64.h b/qemu/aarch64.h index ebb9789d..eae340ed 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_aarch64 #define memory_region_set_global_locking memory_region_set_global_locking_aarch64 #define memory_region_set_readonly memory_region_set_readonly_aarch64 +#define memory_region_set_size memory_region_set_size_aarch64 #define memory_region_set_skip_dump memory_region_set_skip_dump_aarch64 #define memory_region_size memory_region_size_aarch64 #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index 35823c82..3b004e73 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_aarch64eb #define memory_region_set_global_locking memory_region_set_global_locking_aarch64eb #define memory_region_set_readonly memory_region_set_readonly_aarch64eb +#define memory_region_set_size memory_region_set_size_aarch64eb #define memory_region_set_skip_dump memory_region_set_skip_dump_aarch64eb #define memory_region_size memory_region_size_aarch64eb #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index 7e8e35ca..3d358a3c 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_arm #define memory_region_set_global_locking memory_region_set_global_locking_arm #define memory_region_set_readonly memory_region_set_readonly_arm +#define memory_region_set_size memory_region_set_size_arm #define memory_region_set_skip_dump memory_region_set_skip_dump_arm #define memory_region_size memory_region_size_arm #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index 28884079..a47d0579 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_armeb #define memory_region_set_global_locking memory_region_set_global_locking_armeb #define memory_region_set_readonly memory_region_set_readonly_armeb +#define memory_region_set_size memory_region_set_size_armeb #define memory_region_set_skip_dump memory_region_set_skip_dump_armeb #define memory_region_size memory_region_size_armeb #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_armeb diff --git a/qemu/header_gen.py b/qemu/header_gen.py index fc396c1a..8e917619 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -2115,6 +2115,7 @@ symbols = ( 'memory_region_set_enabled', 'memory_region_set_global_locking', 'memory_region_set_readonly', + 'memory_region_set_size', 'memory_region_set_skip_dump', 'memory_region_size', 'memory_region_test_and_clear_dirty', diff --git a/qemu/include/exec/memory.h b/qemu/include/exec/memory.h index 2fb86034..73dfabe1 100644 --- a/qemu/include/exec/memory.h +++ b/qemu/include/exec/memory.h @@ -713,6 +713,16 @@ void memory_region_set_enabled(MemoryRegion *mr, bool enabled); */ void memory_region_set_address(MemoryRegion *mr, hwaddr addr); +/* + * memory_region_set_size: dynamically update the size of a region. + * + * Dynamically updates the size of a region. + * + * @mr: the region to be updated + * @size: used size of the region. + */ +void memory_region_set_size(MemoryRegion *mr, uint64_t size); + /* * memory_region_set_alias_offset: dynamically update a memory alias's offset * diff --git a/qemu/m68k.h b/qemu/m68k.h index 0a5c6ce7..47ab4d52 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_m68k #define memory_region_set_global_locking memory_region_set_global_locking_m68k #define memory_region_set_readonly memory_region_set_readonly_m68k +#define memory_region_set_size memory_region_set_size_m68k #define memory_region_set_skip_dump memory_region_set_skip_dump_m68k #define memory_region_size memory_region_size_m68k #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_m68k diff --git a/qemu/memory.c b/qemu/memory.c index 024f74b0..7fe2db50 100644 --- a/qemu/memory.c +++ b/qemu/memory.c @@ -1475,6 +1475,22 @@ void memory_region_set_enabled(MemoryRegion *mr, bool enabled) memory_region_transaction_commit(mr->uc); } +void memory_region_set_size(MemoryRegion *mr, uint64_t size) +{ + Int128 s = int128_make64(size); + + if (size == UINT64_MAX) { + s = int128_2_64(); + } + if (int128_eq(s, mr->size)) { + return; + } + memory_region_transaction_begin(mr->uc); + mr->size = s; + mr->uc->memory_region_update_pending = true; + memory_region_transaction_commit(mr->uc); +} + static void memory_region_readd_subregion(MemoryRegion *mr) { MemoryRegion *container = mr->container; diff --git a/qemu/mips.h b/qemu/mips.h index 7a28b5f2..63570e07 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_mips #define memory_region_set_global_locking memory_region_set_global_locking_mips #define memory_region_set_readonly memory_region_set_readonly_mips +#define memory_region_set_size memory_region_set_size_mips #define memory_region_set_skip_dump memory_region_set_skip_dump_mips #define memory_region_size memory_region_size_mips #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index ccc32ec5..f0ee34c1 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_mips64 #define memory_region_set_global_locking memory_region_set_global_locking_mips64 #define memory_region_set_readonly memory_region_set_readonly_mips64 +#define memory_region_set_size memory_region_set_size_mips64 #define memory_region_set_skip_dump memory_region_set_skip_dump_mips64 #define memory_region_size memory_region_size_mips64 #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index dc116ad8..c0db6e31 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_mips64el #define memory_region_set_global_locking memory_region_set_global_locking_mips64el #define memory_region_set_readonly memory_region_set_readonly_mips64el +#define memory_region_set_size memory_region_set_size_mips64el #define memory_region_set_skip_dump memory_region_set_skip_dump_mips64el #define memory_region_size memory_region_size_mips64el #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index e03d9767..ea39989f 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_mipsel #define memory_region_set_global_locking memory_region_set_global_locking_mipsel #define memory_region_set_readonly memory_region_set_readonly_mipsel +#define memory_region_set_size memory_region_set_size_mipsel #define memory_region_set_skip_dump memory_region_set_skip_dump_mipsel #define memory_region_size memory_region_size_mipsel #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index ae98adce..ea2c1054 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_powerpc #define memory_region_set_global_locking memory_region_set_global_locking_powerpc #define memory_region_set_readonly memory_region_set_readonly_powerpc +#define memory_region_set_size memory_region_set_size_powerpc #define memory_region_set_skip_dump memory_region_set_skip_dump_powerpc #define memory_region_size memory_region_size_powerpc #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index 05e04750..7774c8a1 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_sparc #define memory_region_set_global_locking memory_region_set_global_locking_sparc #define memory_region_set_readonly memory_region_set_readonly_sparc +#define memory_region_set_size memory_region_set_size_sparc #define memory_region_set_skip_dump memory_region_set_skip_dump_sparc #define memory_region_size memory_region_size_sparc #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index 219fc17a..2ddfde3f 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_sparc64 #define memory_region_set_global_locking memory_region_set_global_locking_sparc64 #define memory_region_set_readonly memory_region_set_readonly_sparc64 +#define memory_region_set_size memory_region_set_size_sparc64 #define memory_region_set_skip_dump memory_region_set_skip_dump_sparc64 #define memory_region_size memory_region_size_sparc64 #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index f19572dc..41723893 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -2109,6 +2109,7 @@ #define memory_region_set_enabled memory_region_set_enabled_x86_64 #define memory_region_set_global_locking memory_region_set_global_locking_x86_64 #define memory_region_set_readonly memory_region_set_readonly_x86_64 +#define memory_region_set_size memory_region_set_size_x86_64 #define memory_region_set_skip_dump memory_region_set_skip_dump_x86_64 #define memory_region_size memory_region_size_x86_64 #define memory_region_test_and_clear_dirty memory_region_test_and_clear_dirty_x86_64