case IOREQ_TYPE_TIMEOFFSET:
break;
case IOREQ_TYPE_INVALIDATE:
- xen_invalidate_map_cache();
+ if (xen_map_cache_enabled()) {
+ xen_invalidate_map_cache();
+ }
break;
case IOREQ_TYPE_PCI_CONFIG:
cpu_ioreq_config(state, req);
static void xen_do_ioreq_register(XenIOState *state,
unsigned int max_cpus,
- const MemoryListener *xen_memory_listener)
+ const MemoryListener *xen_memory_listener,
+ bool mapcache)
{
int i, rc;
state->bufioreq_local_port = rc;
}
/* Init RAM management */
+ if (mapcache) {
#ifdef XEN_COMPAT_PHYSMAP
- xen_map_cache_init(xen_phys_offset_to_gaddr, state);
+ xen_map_cache_init(xen_phys_offset_to_gaddr, state);
#else
- xen_map_cache_init(NULL, state);
+ xen_map_cache_init(NULL, state);
#endif
+ }
qemu_add_vm_change_state_handler(xen_hvm_change_state_handler, state);
void xen_register_ioreq(XenIOState *state, unsigned int max_cpus,
uint8_t handle_bufioreq,
- const MemoryListener *xen_memory_listener)
+ const MemoryListener *xen_memory_listener,
+ bool mapcache)
{
int rc;
state->has_bufioreq = handle_bufioreq != HVM_IOREQSRV_BUFIOREQ_OFF;
rc = xen_create_ioreq_server(xen_domid, handle_bufioreq, &state->ioservid);
if (!rc) {
- xen_do_ioreq_register(state, max_cpus, xen_memory_listener);
+ xen_do_ioreq_register(state, max_cpus, xen_memory_listener, mapcache);
} else {
warn_report("xen: failed to create ioreq server");
}
void xen_hvm_change_state_handler(void *opaque, bool running, RunState rstate);
void xen_register_ioreq(XenIOState *state, unsigned int max_cpus,
uint8_t handle_bufioreq,
- const MemoryListener *xen_memory_listener);
+ const MemoryListener *xen_memory_listener,
+ bool mapcache);
void cpu_ioreq_pio(ioreq_t *req);
#endif /* HW_XEN_HVM_COMMON_H */