> Shared memory is fully coherent. You can use the ordinary x86 bus lock > operations for concurrent read-modify-write access, and the memory barrier > instructions to prevent reordering. Just like ordinary shared memory. Okay, I think I was confused by the 'dirty' code. Is that just to do with migration? > (copied) means Cam was copied (cc'ed) on the email, not the name of the > driver. It hasn't been merged but copies (of the driver, not Cam) are > floating around on the Internet. Thanks, I'll ask him for a pointer. > The relevant parts of cirrus_vga.c are: > > static void cirrus_pci_lfb_map(PCIDevice *d, int region_num, > uint32_t addr, uint32_t size, int type) > { > > ... > > /* XXX: add byte swapping apertures */ > cpu_register_physical_memory(addr, s->vga.vram_size, > s->cirrus_linear_io_addr); > > This function is called whenever the guest updates the BAR. So guest accesses to the LFB PCI_BAR trigger the cirrus_linear functions, which set dirty on writes and allow 'side effect' handling for reads if required? In my case there should be no side effects, so it could be quite simple. I wonder about the cost of the callbacks on each access though, am I still missing something? Thank you for your patience, I really appreciate the assistance and look forward to using kvm more widely. Stephen. -- 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