Both, virtio-mem and virtio-pmem devices follow traditional QEMU naming convention: their suffix determines what bus they live on. For instance, virtio-mem-pci, virtio-mem-ccw, virtio-pmem-pci. We already have a function that constructs device name following this convention: qemuBuildVirtioDevGetConfigDev(). While there's no virtio-pmem-ccw device yet, the function can still be used. Another advantage of using the function is - it'll be easier in future when we want to configure various virtio aspects of memory devices (like ats, iommu_platform, etc.). Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/qemu/qemu_command.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1f28de6194..f10d0ffce5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -959,6 +959,23 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device, break; } + case VIR_DOMAIN_DEVICE_MEMORY: + switch (device->data.memory->model) { + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: + *baseName = "virtio-pmem"; + break; + case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: + *baseName = "virtio-mem"; + break; + case VIR_DOMAIN_MEMORY_MODEL_DIMM: + case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: + case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC: + case VIR_DOMAIN_MEMORY_MODEL_NONE: + case VIR_DOMAIN_MEMORY_MODEL_LAST: + break; + } + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_GRAPHICS: @@ -971,7 +988,6 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device, case VIR_DOMAIN_DEVICE_SHMEM: case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_MEMORY: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_PSTORE: @@ -3479,12 +3495,16 @@ qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg, break; case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM: - device = "virtio-pmem-pci"; + /* Deliberately not setting @device. */ + if (!(props = qemuBuildVirtioDevProps(VIR_DOMAIN_DEVICE_MEMORY, mem, priv->qemuCaps))) + return NULL; address = mem->target.virtio_pmem.address; break; case VIR_DOMAIN_MEMORY_MODEL_VIRTIO_MEM: - device = "virtio-mem-pci"; + /* Deliberately not setting @device. */ + if (!(props = qemuBuildVirtioDevProps(VIR_DOMAIN_DEVICE_MEMORY, mem, priv->qemuCaps))) + return NULL; if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_PREALLOC) && qemuBuildMemoryGetPagesize(cfg, def, mem, NULL, NULL, NULL, &prealloc) < 0) @@ -3506,7 +3526,7 @@ qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg, } if (virJSONValueObjectAdd(&props, - "s:driver", device, + "S:driver", device, "k:node", mem->targetNode, "P:label-size", labelsize * 1024, "P:block-size", blocksize * 1024, -- 2.45.2