@samitouri / QOSamiQemu / commits / 0619bab6cf

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 +}