system: move gpa2hva() to system memory unit
The function is now used by SEV code path. Move it to physmem.c rather than hmp-cmds.c. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260828-qemu-no-hmp-v5-7-9227de146347@redhat.com>
Marc-André Lureau committed
Aug 28, 2026 at 16:04 UTC
0619bab6cf7cd98cb783757ea777dec59a95ff68
4 files changed
+33
-33
include/monitor/monitor.h
-2
@@ -53,8 +53,6 @@ int monitor_get_cpu_index(Monitor *mon);
53
int monitor_puts_locked(Monitor *mon, const char *str);
54
void monitor_flush_locked(Monitor *mon);
55
56
-void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp);
57
-
56
void monitor_read_command(MonitorHMP *hmp, int show_prompt);
57
int monitor_read_password(MonitorHMP *hmp, ReadLineFunc *readline_func,
58
void *opaque);
include/system/memory.h
+2
@@ -2860,4 +2860,6 @@ bool ram_block_discard_is_required(void);
2860
void ram_block_add_cpr_blocker(RAMBlock *rb, Error **errp);
2861
void ram_block_del_cpr_blocker(RAMBlock *rb);
2862
2863
+void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp);
2864
+
2865
#endif
monitor/hmp-cmds.c
-31
@@ -712,37 +712,6 @@ void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict)
712
memory_dump(mon, count, format, size, addr, true);
713
}
714
715
-void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp)
716
-{
717
- Int128 gpa_region_size;
718
- MemoryRegionSection mrs = memory_region_find(get_system_memory(),
719
- addr, size);
720
-
721
- if (!mrs.mr) {
722
- error_setg(errp,
723
- "No memory is mapped at address 0x%" HWADDR_PRIx, addr);
724
- return NULL;
725
- }
726
-
727
- if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) {
728
- error_setg(errp,
729
- "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr);
730
- memory_region_unref(mrs.mr);
731
- return NULL;
732
- }
733
-
734
- gpa_region_size = int128_make64(size);
735
- if (int128_lt(mrs.size, gpa_region_size)) {
736
- error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx
737
- " exceeded.", addr);
738
- memory_region_unref(mrs.mr);
739
- return NULL;
740
- }
741
-
742
- *p_mr = mrs.mr;
743
- return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region);
744
-}
745
-
715
void hmp_gpa2hva(Monitor *mon, const QDict *qdict)
716
{
717
hwaddr addr = qdict_get_int(qdict, "addr");
system/physmem.c
+31
@@ -4534,3 +4534,34 @@ void ram_block_del_cpr_blocker(RAMBlock *rb)
4534
{
4535
migrate_del_blocker(&rb->cpr_blocker);
4536
}
4537
+
4538
+void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp)
4539
+{
4540
+ Int128 gpa_region_size;
4541
+ MemoryRegionSection mrs = memory_region_find(get_system_memory(),
4542
+ addr, size);
4543
+
4544
+ if (!mrs.mr) {
4545
+ error_setg(errp,
4546
+ "No memory is mapped at address 0x%" HWADDR_PRIx, addr);
4547
+ return NULL;
4548
+ }
4549
+
4550
+ if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) {
4551
+ error_setg(errp,
4552
+ "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr);
4553
+ memory_region_unref(mrs.mr);
4554
+ return NULL;
4555
+ }
4556
+
4557
+ gpa_region_size = int128_make64(size);
4558
+ if (int128_lt(mrs.size, gpa_region_size)) {
4559
+ error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx
4560
+ " exceeded.", addr);
4561
+ memory_region_unref(mrs.mr);
4562
+ return NULL;
4563
+ }
4564
+
4565
+ *p_mr = mrs.mr;
4566
+ return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region);
4567
+}