Changes in v2: - added memory_region_clear_flush_coalesced - call memory_region_clear_flush_coalesced from memory_region_clear_coalescing - wrap all region manipulations via memory_region_transaction_begin/ commit internally - flush coalesced MMIO only on memory_region_transaction_begin Original description: We currently flush the coalesced MMIO buffer on every vmexit to userspace. KVM only provides a single buffer per VM, so a central lock is required to read from it. This is a contention point given a large enough VCPU set. Moreover, we need to hold the BQL while replaying the queued requests, probably for a long time until there is more fine grained locking available. Good reasons to overcome the unconditional flush. The series achieves this by flushing only on selected memory region accesses, either generically via the memory access dispatcher or directly on certain VGA PIO accesses that are not yet fully converted. Another reason to flush are remappings or other relevant region state changes. Jan Kiszka (7): i82378: Remove bogus MMIO coalescing memory: Flush coalesced MMIO on selected region access memory: Use transaction_begin/commit also for single-step operations memory: Fold memory_region_update_topology into memory_region_transaction_commit memory: Flush coalesced MMIO on mapping and state changes VGA: Flush coalesced MMIO on related MMIO/PIO accesses kvm: Stop flushing coalesced MMIO on vmexit hw/cirrus_vga.c | 7 ++++ hw/i82378.c | 1 - hw/qxl.c | 1 + hw/vga-isa-mm.c | 1 + hw/vga.c | 5 +++ hw/vmware_vga.c | 1 + kvm-all.c | 2 - memory.c | 101 +++++++++++++++++++++++++++++++----------------------- memory.h | 24 +++++++++++++ 9 files changed, 97 insertions(+), 46 deletions(-) -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html