qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC PATCH 0/8] MemoryRegion and FlatView refcounting, repl


From: Paolo Bonzini
Subject: [Qemu-devel] [RFC PATCH 0/8] MemoryRegion and FlatView refcounting, replace hostmem with memory_region_find
Date: Mon, 6 May 2013 16:25:13 +0200

Hi,

this is an alternative approach to refactoring of dataplane's HostMem
code.  Here, I take Ping Fan's idea of RCU-style updating of the
region list and apply it to the AddressSpace's FlatView.  With this
change, dataplane can simply use memory_region_find instead of
hostmem.

This is a somewhat larger change, but I prefer it for two reasons.

1) it splits the task of adding BQL-less memory dispatch in two parts,
   tacking memory_region_find first (which is simpler because locking
   is left to the caller).

2) HostMem duplicates a lot of the FlatView logic, and adding the
   RCU-style update in FlatView benefits everyone.

The missing ingredients here are:

1) remember and unreference the MemoryRegions that are used in
   a vring entry.  In order to implement this, it is probably simpler
   to change vring.c to use virtio.c's VirtQueueElement data structure.
   We want something like that anyway in order to support migration.

2) add an owner field to MemoryRegion, and set it for all MemoryRegions
   for hot-unpluggable devices.  In this series, ref/unref are stubs.

For simplicity I based the patches on my IOMMU rebase.  I placed the
tree at git://github.com/bonzini/qemu.git, branch iommu.

Paolo

Paolo Bonzini (8):
  memory: add ref/unref calls
  exec: check MRU in qemu_ram_addr_from_host
  memory: return MemoryRegion from qemu_ram_addr_from_host
  memory: ref/unref memory across address_space_map/unmap
  memory: access FlatView from a local variable
  memory: use a new FlatView pointer on every topology update
  memory: add reference counting to FlatView
  dataplane: replace hostmem with memory_region_find

 exec.c                                |   63 +++++++++---
 hw/core/loader.c                      |    1 +
 hw/display/exynos4210_fimd.c          |    6 +
 hw/display/framebuffer.c              |   10 +-
 hw/i386/kvm/ioapic.c                  |    2 +
 hw/i386/kvmvapic.c                    |    1 +
 hw/misc/vfio.c                        |    2 +
 hw/virtio/dataplane/Makefile.objs     |    2 +-
 hw/virtio/dataplane/hostmem.c         |  176 ---------------------------------
 hw/virtio/dataplane/vring.c           |   56 +++++++++--
 hw/virtio/vhost.c                     |    2 +
 hw/virtio/virtio-balloon.c            |    1 +
 hw/xen/xen_pt.c                       |    4 +
 include/exec/cpu-common.h             |    2 +-
 include/exec/memory.h                 |    9 ++
 include/hw/virtio/dataplane/hostmem.h |   57 -----------
 include/hw/virtio/dataplane/vring.h   |    3 +-
 kvm-all.c                             |    2 +
 memory.c                              |  142 +++++++++++++++++++++-----
 target-arm/kvm.c                      |    2 +
 target-i386/kvm.c                     |    4 +-
 target-sparc/mmu_helper.c             |    1 +
 xen-all.c                             |    2 +
 23 files changed, 253 insertions(+), 297 deletions(-)
 delete mode 100644 hw/virtio/dataplane/hostmem.c
 delete mode 100644 include/hw/virtio/dataplane/hostmem.h




reply via email to

[Prev in Thread] Current Thread [Next in Thread]