Skip to content

MemoryDevice: introduce and use ResourceHandler

David Hildenbrand qemu-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest8 patches 10 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8memory-device: always compile support for memory devices for SOFTMMUhw/Makefile.objs hw/mem/Makefile.objs stubs/Makefile.objs +1 more+2 -160 replies
2/8qdev: introduce ResourceHandler as a first-stage hotplug handlerhw/core/Makefile.objs hw/core/qdev.c hw/core/resource-handler.c +2 more+153 -11 reply
3/8machine: provide default resource handlerhw/core/machine.c+33 -00 replies
4/8memory-device: new functions to handle resource assignmentinclude/hw/mem/memory-device.h+6 -00 replies
5/8pc-dimm: implement new memory device functionshw/mem/pc-dimm.c include/hw/mem/memory-device.h+24 -20 replies
6/8machine: introduce enforce_memory_device_align() and add it for pchw/i386/pc.c include/hw/boards.h+23 -00 replies
7/8memory-device: factor out pre-assign into default resource handlerhw/core/machine.c hw/mem/memory-device.c include/hw/mem/memory-device.h+52 -390 replies
8/8memory-device: factor out (un)assign into default resource handlerhw/core/machine.c hw/i386/pc.c hw/mem/memory-device.c +5 more+73 -650 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [Qemu-devel] [PATCH v1 0/8] MemoryDevice: introduce and use ResourceHandler

Hotplug handlers usually have the following tasks:
1. Allocate some resources for a new device
2. Make the new device visible for the guest
3. Notify the guest about the new device

Hotplug handlers have right now one limitation: They handle their own context and only care about resources they manage.

We can have devices that need certain other resources that are e.g. system resources managed by the machine. We need a clean way to assign these resources (without violating layers as brought up by Igor).

One example is virtio-mem/virtio-pmem. Both device types need to be assigned some region in guest physical address space. This device memory belongs to the machine and is managed by it. However, virito devices are hotplugged using the hotplug handler their proxy device implements. So we could trigger e.g. a PCI hotplug handler for virtio-pci or a CSS/CCW hotplug handler for virtio-ccw. But definetly not the machine.

So let's generalize the task of "assigning" resources and use it directly for memory devices. We now have a clean way to support any kind of memory device - independent of the underlying device type. Right now, only one resource handler per device can be supported (in addition to the existing hotplug handler).

You can find more details in patch nr 2.

This work is based on the already queued patch series
"[PATCH v4 00/11] pc-dimm: factor out MemoryDevice"

David Hildenbrand (8):
memory-device: always compile support for memory devices for SOFTMMU
qdev: introduce ResourceHandler as a first-stage hotplug handler
machine: provide default resource handler
memory-device: new functions to handle resource assignment
pc-dimm: implement new memory device functions
machine: introduce enforce_memory_device_align() and add it for pc
memory-device: factor out pre-assign into default resource handler
memory-device: factor out (un)assign into default resource handler

 hw/Makefile.objs               |   2 +-
 hw/core/Makefile.objs          |   1 +
 hw/core/machine.c              |  70 +++++++++++++++++++++++
 hw/core/qdev.c                 |  41 +++++++++++++-
 hw/core/resource-handler.c     |  57 +++++++++++++++++++
 hw/i386/pc.c                   |  31 ++++++-----
 hw/mem/Makefile.objs           |   2 +-
 hw/mem/memory-device.c         | 122 +++++++++++++++++++++++++----------------
 hw/mem/pc-dimm.c               |  53 ++++++++----------
 hw/mem/trace-events            |   4 +-
 hw/ppc/spapr.c                 |   5 +-
 include/hw/boards.h            |  17 ++++++
 include/hw/mem/memory-device.h |  17 ++++--
 include/hw/mem/pc-dimm.h       |   3 +-
 include/hw/resource-handler.h  |  46 ++++++++++++++++
 stubs/Makefile.objs            |   1 -
 stubs/qmp_memory_device.c      |  13 -----
 17 files changed, 364 insertions(+), 121 deletions(-)
 create mode 100644 hw/core/resource-handler.c
 create mode 100644 include/hw/resource-handler.h
 delete mode 100644 stubs/qmp_memory_device.c
Signature · 1 line
2.14.3