New in this version: - use opaque instead of container_of() in memory callbacks - turns out those container_of()s were hindering reuse - I/O space access via memory API - PCI fully converted - except bridge, which actually benefits most from the conversion - ioeventfd support Caveats: - some devices still grab a global memory region instead of inheriting it from their bus. Seen in the code as #include "exec-memory.h" - the conversion from separate b/w/l functions to a single function with a size argument sometimes yields ugly dispatch functions. In some cases I eliminated them, in others I left it to the device maintainer. I also have an idea now how to kill off the page descriptor - use a page table like x86, but with no offset bits, have a variable tree height and allow any level to be a "large page". This results in most accesses terminating after one or two lookups. MMIO will tend to take more (three to five, depending on tree width), but they will be cached. The subpage logic can be completely eliminated with this. Avi Kivity (56): Hierarchical memory region API memory: implement dirty tracking memory: merge adjacent segments of a single memory region Internal interfaces for memory API memory: abstract address space operations memory: rename MemoryRegion::has_ram_addr to ::terminates memory: late initialization of ram_addr memory: I/O address space support exec.c: initialize memory map ioport: register ranges by byte aligned addresses always pc: grab system_memory pc: convert pc_memory_init() to memory API pc: move global memory map out of pc_init1() and into its callers pci: pass address space to pci bus when created pci: add MemoryRegion based BAR management API sysbus: add MemoryRegion based memory management API usb-ohci: convert to MemoryRegion pci: add API to get a BAR's mapped address vmsvga: don't remember pci BAR address in callback any more vga: convert vga and its derivatives to the memory API cirrus: simplify mmio BAR access functions cirrus: simplify bitblt BAR access functions cirrus: simplify vga window mmio access functions vga: simplify vga window mmio access functions cirrus: simplify linear framebuffer access functions Integrate I/O memory regions into qemu exec.c: fix initialization of system I/O memory region pci: pass I/O address space to new PCI bus pci: allow I/O BARs to be registered with pci_register_bar_region() rtl8139: convert to memory API ac97: convert to memory API e1000: convert to memory API eepro100: convert to memory API es1370: convert to memory API ide: convert to memory API memory: add ioeventfd support ivshmem: convert to memory API virtio-pci: convert to memory API ahci: convert to memory API intel-hda: convert to memory API lsi53c895a: convert to memory API ppc: convert to memory API ne2000: convert to memory API pcnet: convert to memory API i6300esb: convert to memory API isa-mmio: concert to memory API sun4u: convert to memory API ehci: convert to memory API uhci: convert to memory API xen-platform: convert to memory API msix: convert to memory API pci: remove pci_register_bar_simple() pci: convert pci rom to memory API pci: remove pci_register_bar() pci: fold BAR mapping function into its caller pci: rename pci_register_bar_region() to pci_register_bar() Makefile.target | 1 + exec-memory.h | 28 ++ exec.c | 29 ++ hw/ac97.c | 126 +++++-- hw/apb_pci.c | 3 + hw/bonito.c | 5 +- hw/cirrus_vga.c | 460 ++++++++---------------- hw/cuda.c | 6 +- hw/e1000.c | 113 +++---- hw/eepro100.c | 181 ++-------- hw/es1370.c | 62 +++- hw/escc.c | 42 +-- hw/escc.h | 2 +- hw/grackle_pci.c | 9 +- hw/gt64xxx.c | 6 +- hw/heathrow_pic.c | 29 +- hw/ide.h | 2 +- hw/ide/ahci.c | 31 +- hw/ide/ahci.h | 2 +- hw/ide/cmd646.c | 204 +++++++---- hw/ide/ich.c | 3 +- hw/ide/macio.c | 50 ++- hw/ide/pci.c | 25 +- hw/ide/pci.h | 19 +- hw/ide/piix.c | 63 +++- hw/ide/via.c | 64 +++- hw/intel-hda.c | 49 ++- hw/isa.h | 2 + hw/isa_mmio.c | 67 ++-- hw/ivshmem.c | 158 +++----- hw/lance.c | 31 +- hw/lsi53c895a.c | 257 +++---------- hw/mac_dbdma.c | 32 +- hw/mac_dbdma.h | 4 +- hw/mac_nvram.c | 39 +-- hw/macio.c | 73 ++-- hw/msix.c | 64 ++-- hw/msix.h | 6 +- hw/ne2000-isa.c | 14 +- hw/ne2000.c | 77 +++-- hw/ne2000.h | 8 +- hw/openpic.c | 81 ++--- hw/openpic.h | 2 +- hw/pc.c | 62 ++- hw/pc.h | 11 +- hw/pc_piix.c | 24 +- hw/pci.c | 104 +++--- hw/pci.h | 30 +- hw/pci_host.h | 1 + hw/pci_internals.h | 2 + hw/pcnet-pci.c | 98 ++++-- hw/pcnet.h | 4 +- hw/piix_pci.c | 17 +- hw/ppc4xx_pci.c | 6 +- hw/ppc_mac.h | 30 +- hw/ppc_newworld.c | 35 +- hw/ppc_oldworld.c | 28 +- hw/ppc_prep.c | 3 +- hw/ppce500_pci.c | 7 +- hw/prep_pci.c | 9 +- hw/prep_pci.h | 5 +- hw/qxl-render.c | 2 +- hw/qxl.c | 125 +++---- hw/qxl.h | 6 +- hw/rtl8139.c | 170 +++------ hw/sh_pci.c | 6 +- hw/sun4u.c | 53 ++-- hw/sysbus.c | 27 ++- hw/sysbus.h | 3 + hw/unin_pci.c | 18 +- hw/usb-ehci.c | 53 ++-- hw/usb-ohci.c | 42 +-- hw/usb-uhci.c | 56 +++- hw/versatile_pci.c | 2 + hw/vga-isa-mm.c | 61 +++- hw/vga-isa.c | 11 +- hw/vga-pci.c | 27 +-- hw/vga.c | 178 ++++------ hw/vga_int.h | 19 +- hw/virtio-pci.c | 99 +++--- hw/virtio-pci.h | 3 +- hw/vmware_vga.c | 175 +++++---- hw/wdt_i6300esb.c | 59 +++- hw/xen_platform.c | 109 ++++-- ioport.c | 4 +- memory.c | 1050 ++++++++++++++++++++++++++++++++++++++++++++++++++++ memory.h | 224 +++++++++++ 87 files changed, 3403 insertions(+), 2184 deletions(-) create mode 100644 exec-memory.h create mode 100644 memory.c create mode 100644 memory.h -- 1.7.5.3 -- 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