@samitouri / QOSamiQemu / commits / ad0c53fb5b

hw/xen-hvm: Add a mapcache arg to xen_register_ioreq()

Add a mapcache argument to xen_register_ioreq() allowing the caller to optionally disable the mapcache. All callers still call it with mapcache = true so there's no functional change yet. Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

Edgar E. Iglesias committed Jul 23, 2025 at 12:06 UTC ad0c53fb5bab27f7344de9c8f90004e283d0ab69
4 files changed +17 -9
hw/i386/xen/xen-hvm.c
+1 -1
@@ -622,7 +622,7 @@ void xen_hvm_init_pc(PCMachineState *pcms, MemoryRegion **ram_memory)
622
623 xen_register_ioreq(state, max_cpus,
624 HVM_IOREQSRV_BUFIOREQ_ATOMIC,
625 - &xen_memory_listener);
625 + &xen_memory_listener, true);
626
627 xen_is_stubdomain = xen_check_stubdomain(state->xenstore);
628
hw/xen/xen-hvm-common.c
+12 -6
@@ -473,7 +473,9 @@ static void handle_ioreq(XenIOState *state, ioreq_t *req)
473 case IOREQ_TYPE_TIMEOFFSET:
474 break;
475 case IOREQ_TYPE_INVALIDATE:
476 - xen_invalidate_map_cache();
476 + if (xen_map_cache_enabled()) {
477 + xen_invalidate_map_cache();
478 + }
479 break;
480 case IOREQ_TYPE_PCI_CONFIG:
481 cpu_ioreq_config(state, req);
@@ -823,7 +825,8 @@ void xen_shutdown_fatal_error(const char *fmt, ...)
825
826 static void xen_do_ioreq_register(XenIOState *state,
827 unsigned int max_cpus,
826 - const MemoryListener *xen_memory_listener)
828 + const MemoryListener *xen_memory_listener,
829 + bool mapcache)
830 {
831 int i, rc;
832
@@ -874,11 +877,13 @@ static void xen_do_ioreq_register(XenIOState *state,
877 state->bufioreq_local_port = rc;
878 }
879 /* Init RAM management */
880 + if (mapcache) {
881 #ifdef XEN_COMPAT_PHYSMAP
878 - xen_map_cache_init(xen_phys_offset_to_gaddr, state);
882 + xen_map_cache_init(xen_phys_offset_to_gaddr, state);
883 #else
880 - xen_map_cache_init(NULL, state);
884 + xen_map_cache_init(NULL, state);
885 #endif
886 + }
887
888 qemu_add_vm_change_state_handler(xen_hvm_change_state_handler, state);
889
@@ -901,7 +906,8 @@ err:
906
907 void xen_register_ioreq(XenIOState *state, unsigned int max_cpus,
908 uint8_t handle_bufioreq,
904 - const MemoryListener *xen_memory_listener)
909 + const MemoryListener *xen_memory_listener,
910 + bool mapcache)
911 {
912 int rc;
913
@@ -922,7 +928,7 @@ void xen_register_ioreq(XenIOState *state, unsigned int max_cpus,
928 state->has_bufioreq = handle_bufioreq != HVM_IOREQSRV_BUFIOREQ_OFF;
929 rc = xen_create_ioreq_server(xen_domid, handle_bufioreq, &state->ioservid);
930 if (!rc) {
925 - xen_do_ioreq_register(state, max_cpus, xen_memory_listener);
931 + xen_do_ioreq_register(state, max_cpus, xen_memory_listener, mapcache);
932 } else {
933 warn_report("xen: failed to create ioreq server");
934 }
hw/xen/xen-pvh-common.c
+2 -1
@@ -202,7 +202,8 @@ static void xen_pvh_init(MachineState *ms)
202 xen_pvh_init_ram(s, sysmem);
203 xen_register_ioreq(&s->ioreq, ms->smp.max_cpus,
204 xpc->handle_bufioreq,
205 - &xen_memory_listener);
205 + &xen_memory_listener,
206 + true);
207
208 if (s->cfg.virtio_mmio_num) {
209 xen_create_virtio_mmio_devices(s);
include/hw/xen/xen-hvm-common.h
+2 -1
@@ -91,7 +91,8 @@ void xen_device_unrealize(DeviceListener *listener, DeviceState *dev);
91 void xen_hvm_change_state_handler(void *opaque, bool running, RunState rstate);
92 void xen_register_ioreq(XenIOState *state, unsigned int max_cpus,
93 uint8_t handle_bufioreq,
94 - const MemoryListener *xen_memory_listener);
94 + const MemoryListener *xen_memory_listener,
95 + bool mapcache);
96
97 void cpu_ioreq_pio(ioreq_t *req);
98 #endif /* HW_XEN_HVM_COMMON_H */