On Thu, Aug 23, 2012 at 01:02:28PM +0200, Jan Kiszka wrote: > This is just a repost, now targeting uq/master as agreed. No changes > compared to v2 except that "i82378: Remove bogus MMIO coalescing" was > dropped as it is already in QEMU upstream by now. > > 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 (6): > 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/qxl.c | 1 + > hw/vga-isa-mm.c | 1 + > hw/vga.c | 5 +++ > hw/vmware_vga.c | 1 + > kvm-all.c | 2 - > memory.c | 104 > ++++++++++++++++++++++++++++++++----------------------- > memory.h | 26 ++++++++++++++ > 8 files changed, 102 insertions(+), 45 deletions(-) > > -- > 1.7.3.4
Applied, thanks.