This patchset contains the core of the memory API, with one device (usb-ohci) coverted for reference. The API is currently implemented on top of the old ram_addr_t/cpu_register_physical_memory() API, but the plan is to make it standalone later.
The goals of the API are: - correctness: by modelling the memory hierarchy, things like the 440FX PAM registers and movable, overlapping PCI BARs can be modelled accurately. - efficiency: by maintaining an object tree describing guest memory, we can eventually get rid of the page descriptor array - security: by having more information available declaratively, we reduce coding errors that may be exploited by malicious guests Also available from git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git refs/tags/memory-region-batch-1-v2 Changes from v1: - switched to gtk-doc - more copyright blurbs - simplified flatview_simplify() - use assert() instead of abort() for invariant checks (but keep abort() for runtime errors) - commit log fixups Avi Kivity (23): Add memory API documentation 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 memory: add backward compatibility for old portio registration memory: add backward compatibility for old mmio registration memory: add ioeventfd support memory: separate building the final memory map into two steps memory: transaction API 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 Makefile.target | 1 + docs/memory.txt | 172 ++++++++ exec-memory.h | 39 ++ exec.c | 19 + hw/apb_pci.c | 2 + hw/bonito.c | 4 +- hw/grackle_pci.c | 5 +- hw/gt64xxx.c | 4 +- hw/pc.c | 62 ++- hw/pc.h | 9 +- hw/pc_piix.c | 20 +- hw/pci.c | 63 +++- hw/pci.h | 15 +- hw/pci_host.h | 1 + hw/pci_internals.h | 1 + hw/piix_pci.c | 13 +- hw/ppc4xx_pci.c | 5 +- hw/ppc_mac.h | 9 +- hw/ppc_newworld.c | 5 +- hw/ppc_oldworld.c | 3 +- hw/ppc_prep.c | 3 +- hw/ppce500_pci.c | 6 +- hw/prep_pci.c | 5 +- hw/prep_pci.h | 3 +- hw/sh_pci.c | 4 +- hw/sysbus.c | 27 ++- hw/sysbus.h | 3 + hw/unin_pci.c | 10 +- hw/usb-ohci.c | 42 +-- hw/versatile_pci.c | 2 + ioport.c | 4 +- memory.c | 1141 ++++++++++++++++++++++++++++++++++++++++++++++++++++ memory.h | 469 +++++++++++++++++++++ 33 files changed, 2072 insertions(+), 99 deletions(-) create mode 100644 docs/memory.txt create mode 100644 exec-memory.h create mode 100644 memory.c create mode 100644 memory.h -- 1.7.5.3