[RFC v3 00/56] Memory API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux