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 */