:p
atchew
Login
From: hongleiwang <honglei.wang@smartx.com> QEMU has supported nvme disk emulation for a long time, see: https://qemu-project.gitlab.io/qemu/system/devices/nvme.html. The following patches introduce nvme and nvme-ns disk bus type: A disk with nvme as bus is represented as nvme disk that contains only one nvme namespace. In XML, it can be used like this: <devices> ... <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/tmp/data.img'/> <target dev='nvmea' bus='nvme'/> <serial>nvme-serial-value</serial> </disk> ... </devices> A disk with nvme-ns as bus is represented as an nvme namespace and needs to be attached to an nvme controller. In XML, it can be used like this: <devices> ... <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/tmp/data.img'/> <target dev='nvmensa' bus='nvme-ns'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='nvme' index='0'> <serial>nvme-controller-serial-value</serial> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> ... </devices> ray (5): qemu: Add support for NVMe disk bus type qemu: Add support for NVMe namespace disk bus type qemu_capabilities: Add support for NVMe disk capabilities docs: Add NVMe and NVMe namespace disk bus types to documentation tests: Add test case for NVMe device configuration docs/formatdomain.rst | 5 ++- src/conf/domain_conf.c | 42 +++++++++++++++++++ src/conf/domain_conf.h | 8 ++++ src/conf/domain_postparse.c | 4 ++ src/conf/domain_validate.c | 5 ++- src/conf/schemas/domaincommon.rng | 12 +++++- src/conf/virconftypes.h | 2 + src/hyperv/hyperv_driver.c | 4 ++ src/qemu/qemu_alias.c | 2 + src/qemu/qemu_capabilities.c | 10 +++++ src/qemu/qemu_capabilities.h | 2 + src/qemu/qemu_command.c | 31 ++++++++++++++ src/qemu/qemu_domain_address.c | 30 +++++++++++-- src/qemu/qemu_domain_address.h | 4 ++ src/qemu/qemu_hotplug.c | 14 +++++++ src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 40 ++++++++++++++++++ src/test/test_driver.c | 4 ++ src/util/virutil.c | 2 +- src/vbox/vbox_common.c | 3 ++ src/vmx/vmx.c | 2 + tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_10.0.0.s390x.xml | 2 + tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 2 + .../domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml | 2 + tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_5.2.0.aarch64.xml | 2 + tests/domaincapsdata/qemu_5.2.0.ppc64.xml | 2 + tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml | 2 + tests/domaincapsdata/qemu_6.0.0.aarch64.xml | 2 + tests/domaincapsdata/qemu_6.0.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.1.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml | 2 + tests/domaincapsdata/qemu_6.2.0.aarch64.xml | 2 + tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 2 + tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 2 + .../domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml | 2 + tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml | 2 + tests/domaincapsdata/qemu_7.0.0.aarch64.xml | 2 + tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 2 + tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 2 + tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml | 2 + tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml | 2 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_7.2.0.ppc.xml | 2 + tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 2 + .../domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 2 + .../qemu_8.2.0-tcg-virt.loongarch64.xml | 2 + tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml | 2 + .../domaincapsdata/qemu_8.2.0-virt.loongarch64.xml | 2 + tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 2 + tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 2 + tests/domaincapsdata/qemu_8.2.0.s390x.xml | 2 + tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 2 + .../domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml | 2 + tests/domaincapsdata/qemu_9.1.0.s390x.xml | 2 + tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 2 + tests/domaincapsdata/qemu_9.2.0.s390x.xml | 2 + tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 2 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml | 2 + tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 2 + tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml | 2 + tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml | 2 + tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml | 2 + tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 + tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 2 + .../caps_7.0.0_aarch64+hvf.xml | 2 + tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml | 2 + tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 + tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 + tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 + .../qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 2 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 2 + tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 2 + tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 2 + .../caps_8.2.0_loongarch64.xml | 2 + tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 2 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 2 + tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 2 + tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 2 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 2 + .../disk-nvme-device.x86_64-latest.args | 38 +++++++++++++++++ .../disk-nvme-device.x86_64-latest.xml | 49 ++++++++++++++++++++++ tests/qemuxmlconfdata/disk-nvme-device.xml | 46 ++++++++++++++++++++ tests/qemuxmlconftest.c | 1 + 133 files changed, 569 insertions(+), 8 deletions(-) create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.xml -- 2.11.0
From: ray <honglei.wang@smartx.com> This patch adds support for the NVMe disk bus type across multiple components: - Extend virDomainDiskBus enum to include VIR_DOMAIN_DISK_BUS_NVME - Update driver-specific functions to handle NVMe disks - Modify disk name parsing to recognize 'nvme' prefix - Ensure NVMe disks require a serial number and PCI address Signed-off-by: ray <honglei.wang@smartx.com> --- src/conf/domain_conf.c | 3 +++ src/conf/domain_conf.h | 1 + src/conf/domain_postparse.c | 2 ++ src/conf/domain_validate.c | 4 +++- src/hyperv/hyperv_driver.c | 2 ++ src/qemu/qemu_alias.c | 1 + src/qemu/qemu_command.c | 5 +++++ src/qemu/qemu_domain_address.c | 25 ++++++++++++++++++++++--- src/qemu/qemu_domain_address.h | 4 ++++ src/qemu/qemu_hotplug.c | 6 ++++++ src/qemu/qemu_validate.c | 16 ++++++++++++++++ src/test/test_driver.c | 2 ++ src/util/virutil.c | 2 +- src/vbox/vbox_common.c | 1 + src/vmx/vmx.c | 1 + 15 files changed, 70 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virDomainDiskBus, "uml", "sata", "sd", + "nvme", ); VIR_ENUM_IMPL(virDomainDiskCache, @@ -XXX,XX +XXX,XX @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED, case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: /* Other disk bus's aren't controller based */ @@ -XXX,XX +XXX,XX @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: *busIdx = 0; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -XXX,XX +XXX,XX @@ typedef enum { VIR_DOMAIN_DISK_BUS_UML, VIR_DOMAIN_DISK_BUS_SATA, VIR_DOMAIN_DISK_BUS_SD, + VIR_DOMAIN_DISK_BUS_NVME, VIR_DOMAIN_DISK_BUS_LAST } virDomainDiskBus; diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -XXX,XX +XXX,XX @@ virDomainDiskDefPostParse(virDomainDiskDef *disk, disk->bus = VIR_DOMAIN_DISK_BUS_XEN; else if (STRPREFIX(disk->dst, "ubd")) disk->bus = VIR_DOMAIN_DISK_BUS_UML; + else if (STRPREFIX(disk->dst, "nvme")) + disk->bus = VIR_DOMAIN_DISK_BUS_NVME; } } diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -XXX,XX +XXX,XX @@ virDomainDiskAddressDiskBusCompatibility(virDomainDiskBus bus, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: return true; } @@ -XXX,XX +XXX,XX @@ virDomainDiskDefValidate(const virDomainDef *def, !STRPREFIX(disk->dst, "sd") && !STRPREFIX(disk->dst, "vd") && !STRPREFIX(disk->dst, "xvd") && - !STRPREFIX(disk->dst, "ubd")) { + !STRPREFIX(disk->dst, "ubd") && + !STRPREFIX(disk->dst, "nvme")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid harddisk device name: %1$s"), disk->dst); return -1; diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -XXX,XX +XXX,XX @@ hypervDomainAttachStorage(virDomainPtr domain, virDomainDef *def, const char *ho case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported controller type")); @@ -XXX,XX +XXX,XX @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, const char *xml, unsigned int case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid disk bus in definition")); diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -XXX,XX +XXX,XX @@ qemuAssignDeviceDiskAlias(virDomainDef *def, case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME: diskPriv->qomName = g_strdup(disk->info.alias); break; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -XXX,XX +XXX,XX @@ qemuBuildDiskDeviceProps(const virDomainDef *def, driver = "floppy"; break; + case VIR_DOMAIN_DISK_BUS_NVME: + driver = "nvme"; + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, } return 0; + case VIR_DOMAIN_DISK_BUS_NVME: + return pciFlags; + case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_SCSI: @@ -XXX,XX +XXX,XX @@ qemuDomainAssignDevicePCISlots(virDomainDef *def, } } - /* Disks (VirtIO only for now) */ + /* Disks (VirtIO and NVMe only for now) */ for (i = 0; i < def->ndisks; i++) { - /* Only VirtIO disks use PCI addrs */ - if (def->disks[i]->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) + /* Only VirtIO adn NVMe disks use PCI addrs */ + if (def->disks[i]->bus != VIR_DOMAIN_DISK_BUS_VIRTIO && def->disks[i]->bus != VIR_DOMAIN_DISK_BUS_NVME) continue; /* don't touch s390 devices */ @@ -XXX,XX +XXX,XX @@ qemuDomainEnsureVirtioAddress(bool *releaseAddr, virDomainCCWAddressSetFree(ccwaddrs); return ret; } + +int +qemuDomainEnsureNvmeAddress(bool *releaseAddr, + virDomainObj *vm, + virDomainDeviceDef *dev) +{ + int ret = 0; + + if (qemuDomainEnsurePCIAddress(vm, dev) < 0) { + ret = -1; + } else { + *releaseAddr = true; + } + + return ret; +} diff --git a/src/qemu/qemu_domain_address.h b/src/qemu/qemu_domain_address.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.h +++ b/src/qemu/qemu_domain_address.h @@ -XXX,XX +XXX,XX @@ void qemuDomainReleaseMemoryDeviceSlot(virDomainObj *vm, int qemuDomainEnsureVirtioAddress(bool *releaseAddr, virDomainObj *vm, virDomainDeviceDef *dev); + +int qemuDomainEnsureNvmeAddress(bool *releaseAddr, + virDomainObj *vm, + virDomainDeviceDef *dev); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver, } break; + case VIR_DOMAIN_DISK_BUS_NVME: + if (qemuDomainEnsureNvmeAddress(&releaseVirtio, vm, dev) < 0) + goto cleanup; + break; + case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_FDC: case VIR_DOMAIN_DISK_BUS_XEN: @@ -XXX,XX +XXX,XX @@ qemuDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME: break; case VIR_DOMAIN_DISK_BUS_IDE: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOThreads not available for bus %1$s target %2$s"), @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("disk device='lun' is not supported for bus='%1$s'"), virDomainDiskBusTypeToString(disk->bus)); @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, break; + case VIR_DOMAIN_DISK_BUS_NVME: + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected address type for nvme disk")); + return -1; + } + if (!disk->serial) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("serial property must be specified for nvme disk")); + return -1; + } + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME: break; case VIR_DOMAIN_DISK_BUS_IDE: diff --git a/src/test/test_driver.c b/src/test/test_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -XXX,XX +XXX,XX @@ testDomainAttachDeviceDiskLiveInternal(testDriver *driver G_GNUC_UNUSED, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -XXX,XX +XXX,XX @@ testDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME: break; case VIR_DOMAIN_DISK_BUS_IDE: diff --git a/src/util/virutil.c b/src/util/virutil.c index XXXXXXX..XXXXXXX 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -XXX,XX +XXX,XX @@ int virDiskNameParse(const char *name, int *disk, int *partition) const char *ptr = NULL; char *rem; int idx = 0; - static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd"}; + static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd", "nvme"}; size_t i; size_t n_digits; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index XXXXXXX..XXXXXXX 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -XXX,XX +XXX,XX @@ vboxAttachDrives(virDomainDef *def, struct _vboxDriver *data, IMachine *machine) case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index XXXXXXX..XXXXXXX 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -XXX,XX +XXX,XX @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type '%2$s'"), virDomainDiskBusTypeToString(def->bus), -- 2.11.0
From: ray <honglei.wang@smartx.com> This patch extends the previous NVMe disk bus support by introducing a new nvme-ns bus type. The nvme-ns bus disk needs to be attached to nvme controller. A controller can contain multiple nvme-ns disk devices. Key changes include: - Add VIR_DOMAIN_DISK_BUS_NVME_NS to disk bus - Add VIR_DOMAIN_CONTROLLER_TYPE_NVME to controller type - Update driver-specific functions to handle nvme-ns disks - Modify disk name parsing to recognize 'nvmens' prefix - Add support for NVMe namespace-specific addressing and controller handling - Implement NVMe controller serial number parsing and formatting Signed-off-by: ray <honglei.wang@smartx.com> --- src/conf/domain_conf.c | 39 +++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 7 +++++++ src/conf/domain_postparse.c | 2 ++ src/conf/domain_validate.c | 1 + src/conf/virconftypes.h | 2 ++ src/hyperv/hyperv_driver.c | 2 ++ src/qemu/qemu_alias.c | 1 + src/qemu/qemu_command.c | 26 ++++++++++++++++++++++++++ src/qemu/qemu_domain_address.c | 5 +++++ src/qemu/qemu_hotplug.c | 8 ++++++++ src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 12 ++++++++++++ src/test/test_driver.c | 2 ++ src/util/virutil.c | 2 +- src/vbox/vbox_common.c | 2 ++ src/vmx/vmx.c | 1 + 16 files changed, 112 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virDomainDiskBus, "sata", "sd", "nvme", + "nvme-ns", ); VIR_ENUM_IMPL(virDomainDiskCache, @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virDomainController, "pci", "xenbus", "isa", + "nvme", ); VIR_ENUM_IMPL(virDomainControllerModelPCI, @@ -XXX,XX +XXX,XX @@ virDomainControllerDefNew(virDomainControllerType type) case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } @@ -XXX,XX +XXX,XX @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED, def->info.addr.drive.unit = idx % 2; break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + /* For NVME-NS, each nvme controller has a maximum of 256 nvme-ns */ + def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE; + def->info.addr.drive.controller = idx / 256; + def->info.addr.drive.bus = 0; + def->info.addr.drive.unit = idx % 256; + break; + case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: @@ -XXX,XX +XXX,XX @@ virDomainControllerModelTypeFromString(const virDomainControllerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return -1; } @@ -XXX,XX +XXX,XX @@ virDomainControllerModelTypeToString(virDomainControllerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return NULL; } @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, int ntargetNodes = 0; g_autofree xmlNodePtr *modelNodes = NULL; int nmodelNodes = 0; + g_autofree xmlNodePtr *serialNodes = NULL; + int nserialNodes = 0; int numaNode = -1; int ports; VIR_XPATH_NODE_AUTORESTORE(ctxt) @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, if (virXMLPropInt(node, "ports", 10, VIR_XML_PROP_NONNEGATIVE, &ports, -1) < 0) return NULL; + if ((nserialNodes = virXPathNodeSet("./serial", ctxt, &serialNodes)) > 1) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Multiple <serial> elements in controller definition not allowed")); + return NULL; + } + + if (nserialNodes == 1) { + if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_NVME) { + def->opts.nvmeopts.serial = virXMLNodeContentString(serialNodes[0]); + } + } + switch (def->type) { case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: { if (virXMLPropInt(node, "vectors", 10, VIR_XML_PROP_NONNEGATIVE, @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: default: break; @@ -XXX,XX +XXX,XX @@ virDomainDiskControllerMatch(int controller_type, int disk_bus) disk_bus == VIR_DOMAIN_DISK_BUS_SATA) return true; + if (controller_type == VIR_DOMAIN_CONTROLLER_TYPE_NVME && + disk_bus == VIR_DOMAIN_DISK_BUS_NVME_NS) + return true; + return false; } @@ -XXX,XX +XXX,XX @@ virDomainControllerDefFormat(virBuffer *buf, } break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (def->opts.nvmeopts.serial != NULL) { + virBufferAsprintf(&childBuf, "<serial>%s</serial>\n", def->opts.nvmeopts.serial); + } + break; + case VIR_DOMAIN_CONTROLLER_TYPE_PCI: if (virDomainControllerDefFormatPCI(&childBuf, def, flags) < 0) return -1; @@ -XXX,XX +XXX,XX @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: *busIdx = 0; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -XXX,XX +XXX,XX @@ typedef enum { VIR_DOMAIN_DISK_BUS_SATA, VIR_DOMAIN_DISK_BUS_SD, VIR_DOMAIN_DISK_BUS_NVME, + VIR_DOMAIN_DISK_BUS_NVME_NS, VIR_DOMAIN_DISK_BUS_LAST } virDomainDiskBus; @@ -XXX,XX +XXX,XX @@ typedef enum { VIR_DOMAIN_CONTROLLER_TYPE_PCI, VIR_DOMAIN_CONTROLLER_TYPE_XENBUS, VIR_DOMAIN_CONTROLLER_TYPE_ISA, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, VIR_DOMAIN_CONTROLLER_TYPE_LAST } virDomainControllerType; @@ -XXX,XX +XXX,XX @@ struct _virDomainXenbusControllerOpts { int maxEventChannels; /* -1 == undef */ }; +struct _virDomainNVMeControllerOpts { + char *serial; +}; + /* Stores the virtual disk controller configuration */ struct _virDomainControllerDef { virDomainControllerType type; @@ -XXX,XX +XXX,XX @@ struct _virDomainControllerDef { virDomainPCIControllerOpts pciopts; virDomainUSBControllerOpts usbopts; virDomainXenbusControllerOpts xenbusopts; + virDomainNVMeControllerOpts nvmeopts; } opts; virDomainDeviceInfo info; virDomainVirtioOptions *virtio; diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -XXX,XX +XXX,XX @@ virDomainDiskDefPostParse(virDomainDiskDef *disk, disk->bus = VIR_DOMAIN_DISK_BUS_XEN; else if (STRPREFIX(disk->dst, "ubd")) disk->bus = VIR_DOMAIN_DISK_BUS_UML; + else if (STRPREFIX(disk->dst, "nvmens")) + disk->bus = VIR_DOMAIN_DISK_BUS_NVME_NS; else if (STRPREFIX(disk->dst, "nvme")) disk->bus = VIR_DOMAIN_DISK_BUS_NVME; } diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -XXX,XX +XXX,XX @@ virDomainDiskAddressDiskBusCompatibility(virDomainDiskBus bus, case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: return true; } diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index XXXXXXX..XXXXXXX 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -XXX,XX +XXX,XX @@ typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallback typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpts; +typedef struct _virDomainNVMeControllerOpts virDomainNVMeControllerOpts; + typedef enum { VIR_DOMAIN_DISK_IO_DEFAULT = 0, VIR_DOMAIN_DISK_IO_NATIVE, diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -XXX,XX +XXX,XX @@ hypervDomainAttachStorage(virDomainPtr domain, virDomainDef *def, const char *ho case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported controller type")); @@ -XXX,XX +XXX,XX @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, const char *xml, unsigned int case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid disk bus in definition")); diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -XXX,XX +XXX,XX @@ qemuAssignDeviceDiskAlias(virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SCSI: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: diskPriv->qomName = g_strdup(disk->info.alias); break; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props, } break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (!(controllerAlias = virDomainControllerAliasFind(domainDef, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, + info->addr.drive.controller))) + return -1; + + if (virJSONValueObjectAdd(&props, + "s:bus", controllerAlias, + NULL) < 0) + return -1; + break; case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: @@ -XXX,XX +XXX,XX @@ qemuBuildDiskDeviceProps(const virDomainDef *def, driver = "nvme"; break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + driver = "nvme-ns"; + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: @@ -XXX,XX +XXX,XX @@ qemuBuildControllerDevProps(const virDomainDef *domainDef, break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (virJSONValueObjectAdd(&props, + "s:driver", "nvme", + "s:id", def->info.alias, + "s:serial", def->opts.nvmeopts.serial, + NULL) < 0) + return -1; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -XXX,XX +XXX,XX @@ qemuBuildControllersCommandLine(virCommand *cmd, VIR_DOMAIN_CONTROLLER_TYPE_IDE, VIR_DOMAIN_CONTROLLER_TYPE_SATA, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, }; for (i = 0; i < G_N_ELEMENTS(contOrder); i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, } break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + return pciFlags; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: return 0; @@ -XXX,XX +XXX,XX @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver, /* Note that SD card hotplug support should be added only once * they support '-device' (don't require -drive only). * See also: qemuDiskBusIsSD */ + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -XXX,XX +XXX,XX @@ qemuDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); return -1; @@ -XXX,XX +XXX,XX @@ qemuDomainDiskControllerIsBusy(virDomainObj *vm, continue; break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (disk->bus != VIR_DOMAIN_DISK_BUS_NVME_NS) + continue; + break; + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: /* xenbus is not supported by the qemu driver */ continue; @@ -XXX,XX +XXX,XX @@ qemuDomainControllerIsBusy(virDomainObj *vm, case VIR_DOMAIN_CONTROLLER_TYPE_USB: case VIR_DOMAIN_CONTROLLER_TYPE_PCI: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: /* detach of the controller types above is not yet supported */ return false; diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOThreads not available for bus %1$s target %2$s"), @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("disk device='lun' is not supported for bus='%1$s'"), virDomainDiskBusTypeToString(disk->bus)); @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, } break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected address type for nvme-ns disk")); + return -1; + } + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_SCSI: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: break; case VIR_DOMAIN_DISK_BUS_IDE: @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefController(const virDomainControllerDef *controller, case VIR_DOMAIN_CONTROLLER_TYPE_USB: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -XXX,XX +XXX,XX @@ testDomainAttachDeviceDiskLiveInternal(testDriver *driver G_GNUC_UNUSED, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -XXX,XX +XXX,XX @@ testDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); return -1; diff --git a/src/util/virutil.c b/src/util/virutil.c index XXXXXXX..XXXXXXX 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -XXX,XX +XXX,XX @@ int virDiskNameParse(const char *name, int *disk, int *partition) const char *ptr = NULL; char *rem; int idx = 0; - static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd", "nvme"}; + static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd", "nvmens", "nvme"}; size_t i; size_t n_digits; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index XXXXXXX..XXXXXXX 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -XXX,XX +XXX,XX @@ vboxSetStorageController(virDomainControllerDef *controller, case VIR_DOMAIN_CONTROLLER_TYPE_PCI: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("The vbox driver does not support %1$s controller type"), @@ -XXX,XX +XXX,XX @@ vboxAttachDrives(virDomainDef *def, struct _vboxDriver *data, IMachine *machine) case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index XXXXXXX..XXXXXXX 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -XXX,XX +XXX,XX @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NVME: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type '%2$s'"), virDomainDiskBusTypeToString(def->bus), -- 2.11.0
From: ray <honglei.wang@smartx.com> This patch extends QEMU capabilities support for nvme and nvme-ns disks. Signed-off-by: ray <honglei.wang@smartx.com> --- src/qemu/qemu_capabilities.c | 10 ++++++++++ src/qemu/qemu_capabilities.h | 2 ++ src/qemu/qemu_validate.c | 12 ++++++++++++ tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_10.0.0.s390x.xml | 2 ++ tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0.ppc64.xml | 2 ++ tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_6.0.0.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_6.0.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.1.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 2 ++ tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 2 ++ tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 2 ++ tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0.ppc.xml | 2 ++ tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0.s390x.xml | 2 ++ tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0.s390x.xml | 2 ++ tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 2 ++ tests/domaincapsdata/qemu_9.2.0.s390x.xml | 2 ++ tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 2 ++ 111 files changed, 240 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virQEMUCaps, "machine.virt.aia", /* QEMU_CAPS_MACHINE_VIRT_AIA */ "virtio-mem-ccw", /* QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW */ "blockdev-set-active", /* QEMU_CAPS_BLOCKDEV_SET_ACTIVE */ + "nvme", /* QEMU_CAPS_DEVICE_NVME */ + "nvme-ns", /* QEMU_CAPS_DEVICE_NVME_NS */ ); @@ -XXX,XX +XXX,XX @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "sev-snp-guest", QEMU_CAPS_SEV_SNP_GUEST }, { "acpi-erst", QEMU_CAPS_DEVICE_ACPI_ERST }, { "virtio-mem-ccw", QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW }, + { "nvme", QEMU_CAPS_DEVICE_NVME }, + { "nvme-ns", QEMU_CAPS_DEVICE_NVME_NS }, }; @@ -XXX,XX +XXX,XX @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCaps *qemuCaps, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_SATA); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME)) + VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_NVME); + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) + VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_NVME_NS); + /* disk->model values */ VIR_DOMAIN_CAPS_ENUM_SET(disk->model, VIR_DOMAIN_DISK_MODEL_VIRTIO); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL)) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -XXX,XX +XXX,XX @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_MACHINE_VIRT_AIA, /* -machine virt,aia=(none|aplic|aplic-imsic), RISC-V only */ QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW, /* -device virtio-mem-ccw */ QEMU_CAPS_BLOCKDEV_SET_ACTIVE, /* blockdev-set-active QMP command supported */ + QEMU_CAPS_DEVICE_NVME, /* -device nvme */ + QEMU_CAPS_DEVICE_NVME_NS, /* -device nvme-ns */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, break; case VIR_DOMAIN_DISK_BUS_NVME: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support '-device nvme'")); + return -1; + } + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for nvme disk")); @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, break; case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support '-device nvme-ns'")); + return -1; + } + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for nvme-ns disk")); diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0.s390x.xml b/tests/domaincapsdata/qemu_10.0.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0.s390x.xml +++ b/tests/domaincapsdata/qemu_10.0.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml b/tests/domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-tcg-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml b/tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_5.2.0-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0.aarch64.xml b/tests/domaincapsdata/qemu_5.2.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.2.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0.ppc64.xml b/tests/domaincapsdata/qemu_5.2.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_5.2.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_6.0.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.0.0.aarch64.xml b/tests/domaincapsdata/qemu_6.0.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_6.0.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.0.0.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.1.0.x86_64.xml b/tests/domaincapsdata/qemu_6.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0.aarch64.xml b/tests/domaincapsdata/qemu_6.2.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml b/tests/domaincapsdata/qemu_6.2.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml b/tests/domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.0.0-hvf.aarch64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0.aarch64.xml b/tests/domaincapsdata/qemu_7.0.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml b/tests/domaincapsdata/qemu_7.0.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml b/tests/domaincapsdata/qemu_7.1.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml b/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0.ppc.xml b/tests/domaincapsdata/qemu_7.2.0.ppc.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0.ppc.xml +++ b/tests/domaincapsdata/qemu_7.2.0.ppc.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml b/tests/domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-tcg-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml b/tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml b/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml b/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml b/tests/domaincapsdata/qemu_8.2.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml b/tests/domaincapsdata/qemu_8.2.0.armv7l.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml +++ b/tests/domaincapsdata/qemu_8.2.0.armv7l.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.s390x.xml b/tests/domaincapsdata/qemu_8.2.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_8.2.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml b/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml b/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0.s390x.xml b/tests/domaincapsdata/qemu_9.1.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.1.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0.s390x.xml b/tests/domaincapsdata/qemu_9.2.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.2.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='query-cpu-model-expansion.deprecated-props'/> <flag name='migrate-incoming.exit-on-error'/> <flag name='virtio-mem-ccw'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9002050</version> <microcodeVersion>39100285</microcodeVersion> <package>v9.2.0-1203-gd6430c17d7</package> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> <flag name='blockdev-set-active'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9002050</version> <microcodeVersion>43100285</microcodeVersion> <package>v9.2.0-1636-gffaf7f0376</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='machine.virt.ras'/> <flag name='netdev.user'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>5002000</version> <microcodeVersion>61700243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-crypto'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>5002000</version> <microcodeVersion>42900243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-crypto'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>5002000</version> <microcodeVersion>0</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-crypto'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='machine.virt.ras'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6000000</version> <microcodeVersion>61700242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='machine.virt.ras'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6001050</version> <microcodeVersion>61700244</microcodeVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6002000</version> <microcodeVersion>42900244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6002000</version> <microcodeVersion>43100244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7000000</version> <microcodeVersion>42900243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7000000</version> <microcodeVersion>43100243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7001000</version> <microcodeVersion>42900244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7001000</version> <microcodeVersion>43100244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-7.2.0-6.fc37</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> <flag name='machine.virt.aia'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>7002050</version> <microcodeVersion>0</microcodeVersion> <package>v7.2.0-333-g222059a0fc</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8000000</version> <microcodeVersion>43100244</microcodeVersion> <package>v8.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8001000</version> <microcodeVersion>43100245</microcodeVersion> <package>v8.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>61700246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-8.2.0-7.fc39</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>106300246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-sound'/> <flag name='netdev.user'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>39100246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>43100246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9000000</version> <microcodeVersion>43100245</microcodeVersion> <package>v9.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml @@ -XXX,XX +XXX,XX @@ <flag name='snapshot-internal-qmp'/> <flag name='migrate-incoming.exit-on-error'/> <flag name='machine.virt.aia'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>0</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='snapshot-internal-qmp'/> <flag name='query-cpu-model-expansion.deprecated-props'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>39100246</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='machine-i8042-opt'/> <flag name='snapshot-internal-qmp'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='query-cpu-model-expansion.deprecated-props'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9001050</version> <microcodeVersion>39100247</microcodeVersion> <package>v9.1.0-1348-g11b8920ed2</package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme'/> + <flag name='nvme-ns'/> <version>9002000</version> <microcodeVersion>43100247</microcodeVersion> <package>v9.2.0</package> -- 2.11.0
From: ray <honglei.wang@smartx.com> Update documentation to include nvme and nvme-ns disk bus types: - Add "nvme" and "nvme-ns" to the list of supported disk bus types - Extend the allowed disk target device patterns to include nvme and nvmens prefixes Signed-off-by: ray <honglei.wang@smartx.com> --- docs/formatdomain.rst | 5 +++-- src/conf/schemas/domaincommon.rng | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index XXXXXXX..XXXXXXX 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -XXX,XX +XXX,XX @@ paravirtualized driver is specified via the ``disk`` element. name in the guest OS. Treat it as a device ordering hint. The optional ``bus`` attribute specifies the type of disk device to emulate; possible values are driver specific, with typical values being "ide", "scsi", - "virtio", "xen", "usb", "sata", or "sd" :since:`"sd" since 1.1.2`. If + "virtio", "xen", "usb", "sata", "sd" :since:`"sd" since 1.1.2`, "nvme" or + "nvme-ns":since:`"nvme" and "nvme-ns" since 11.1.0`. If omitted, the bus type is inferred from the style of the device name (e.g. a device named 'sda' will typically be exported using a SCSI bus). The optional attribute ``tray`` indicates the tray status of the removable disks (i.e. @@ -XXX,XX +XXX,XX @@ device hotplug is expected. ... Each controller has a mandatory attribute ``type``, which must be one of 'ide', -'fdc', 'scsi', 'sata', 'usb', 'ccid', 'virtio-serial' or 'pci', and a mandatory +'fdc', 'scsi', 'sata', 'usb', 'ccid', 'virtio-serial', 'pci' or "nvme", and a mandatory attribute ``index`` which is the decimal integer describing in which order the bus controller is encountered (for use in ``controller`` attributes of ``<address>`` elements). :since:`Since 1.3.5` the index is optional; if not diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index XXXXXXX..XXXXXXX 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -XXX,XX +XXX,XX @@ <define name="diskTargetDev"> <data type="string"> - <param name="pattern">(ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]+</param> + <param name="pattern">(ioemu:)?(fd|hd|sd|vd|xvd|ubd|nvmens|nvme)[a-zA-Z0-9_]+</param> </data> </define> @@ -XXX,XX +XXX,XX @@ <value>uml</value> <!-- NOT USED ANYMORE --> <value>sata</value> <value>sd</value> + <value>nvme</value> + <value>nvme-ns</value> </choice> </attribute> </optional> @@ -XXX,XX +XXX,XX @@ </attribute> </optional> </group> + <group> + <attribute name="type"> + <value>nvme</value> + </attribute> + <element name="serial"> + <ref name="diskSerial"/> + </element> + </group> </choice> <optional> <element name="driver"> -- 2.11.0
From: ray <honglei.wang@smartx.com> This completes the test coverage for the recently added NVMe disk bus support. Signed-off-by: ray <honglei.wang@smartx.com> --- .../disk-nvme-device.x86_64-latest.args | 38 +++++++++++++++++ .../disk-nvme-device.x86_64-latest.xml | 49 ++++++++++++++++++++++ tests/qemuxmlconfdata/disk-nvme-device.xml | 46 ++++++++++++++++++++ tests/qemuxmlconftest.c | 1 + 4 files changed, 134 insertions(+) create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/disk-nvme-device.xml diff --git a/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.args b/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.0","addr":"0x3"}' \ +-device '{"driver":"nvme","id":"nvme0","serial":"nvme-controller-abcdef","bus":"pci.0","addr":"0x5"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data-1.img","node-name":"libvirt-2-storage","read-only":false}' \ +-device '{"driver":"nvme","bus":"pci.0","addr":"0x2","drive":"libvirt-2-storage","id":"nvme-disk0","bootindex":1,"serial":"nvme-abcdef"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data-2.img","node-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"nvme-ns","bus":"nvme0","drive":"libvirt-1-storage","id":"nvme-ns0-0-0"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.xml b/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-device.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='raw'/> + <source file='/tmp/data-1.img'/> + <target dev='nvmea' bus='nvme'/> + <serial>nvme-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='raw'/> + <source file='/tmp/data-2.img'/> + <target dev='nvmensa' bus='nvme-ns'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </controller> + <controller type='nvme' index='0'> + <serial>nvme-controller-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/disk-nvme-device.xml b/tests/qemuxmlconfdata/disk-nvme-device.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-device.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <source file='/tmp/data-1.img'/> + <target dev='nvmea' bus='nvme'/> + <serial>nvme-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <source file='/tmp/data-2.img'/> + <target dev='nvmensa' bus='nvme-ns'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </controller> + <controller type='nvme' index='0'> + <serial>nvme-controller-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST("disk-network-ssh"); DO_TEST_CAPS_LATEST("disk-no-boot"); DO_TEST_CAPS_LATEST("disk-nvme"); + DO_TEST_CAPS_LATEST("disk-nvme-device"); DO_TEST_CAPS_LATEST("disk-vhostuser-numa"); DO_TEST_CAPS_LATEST("disk-vhostuser"); DO_TEST_CAPS_ARCH_LATEST_FULL("disk-vhostvdpa", "x86_64", -- 2.11.0
From: hongleiwang <honglei.wang@smartx.com> QEMU has supported nvme disk emulation for a long time, see: https://qemu-project.gitlab.io/qemu/system/devices/nvme.html. The following patches introduce nvme-ns disk bus type: A disk with nvme-ns as bus is represented as an nvme namespace and needs to be attached to an nvme controller. In XML, it can be used like this: <devices> ... <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/tmp/data.img'/> <target dev='nvmensa' bus='nvme-ns'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <controller type='nvme' index='0'> <serial>nvme-controller-serial-value</serial> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> ... </devices> Signed-off-by: ray <honglei.wang@smartx.com> --- Compared to patch v1, this version removes the nvme bus type implementation and keeps only the nvme controller + nvme-ns bus approach. ray (5): qemu: Add support for NVMe namespace disk bus type qemu_capabilities: Add support for nvme-ns bus capabilities schema: Add nvme controller and nvme-ns bus defination tests: Add test case for nvme-ns device configuration NEWS: Document qemu nvme disk emulation feature NEWS.rst | 17 +++++++++ src/conf/domain_conf.c | 39 ++++++++++++++++++++ src/conf/domain_conf.h | 7 ++++ src/conf/domain_postparse.c | 2 ++ src/conf/domain_validate.c | 4 ++- src/conf/schemas/domaincommon.rng | 11 +++++- src/conf/virconftypes.h | 2 ++ src/hyperv/hyperv_driver.c | 2 ++ src/qemu/qemu_alias.c | 1 + src/qemu/qemu_capabilities.c | 5 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 26 ++++++++++++++ src/qemu/qemu_domain_address.c | 5 +++ src/qemu/qemu_hotplug.c | 14 ++++++-- src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 18 ++++++++++ src/test/test_driver.c | 2 ++ src/util/virutil.c | 2 +- src/vbox/vbox_common.c | 2 ++ src/vmx/vmx.c | 1 + .../qemu_10.0.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 1 + .../qemu_10.0.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_10.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + .../domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_5.1.0.sparc.xml | 1 + tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0.ppc.xml | 1 + tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 1 + .../qemu_8.2.0-tcg-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml | 1 + .../domaincapsdata/qemu_8.2.0-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 1 + tests/domaincapsdata/qemu_8.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 1 + .../domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml | 1 + .../qemu_9.2.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 1 + .../qemu_9.2.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 1 + .../caps_10.0.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 + .../qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 + .../caps_8.2.0_loongarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 + .../caps_9.2.0_aarch64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 + .../caps_9.2.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 + .../disk-nvme-ns-device.x86_64-latest.args | 36 +++++++++++++++++++ .../disk-nvme-ns-device.x86_64-latest.xml | 42 ++++++++++++++++++++++ tests/qemuxmlconfdata/disk-nvme-ns-device.xml | 41 +++++++++++++++++++++ tests/qemuxmlconftest.c | 1 + 117 files changed, 370 insertions(+), 5 deletions(-) create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.xml -- 2.11.0
From: ray <honglei.wang@smartx.com> This patch extends the disk bus support by introducing a new nvme-ns bus type. The nvme-ns bus disk needs to be attached to nvme controller. A controller can contain multiple nvme-ns disk devices. Signed-off-by: ray <honglei.wang@smartx.com> --- src/conf/domain_conf.c | 39 +++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 7 +++++++ src/conf/domain_postparse.c | 2 ++ src/conf/domain_validate.c | 4 +++- src/conf/virconftypes.h | 2 ++ src/hyperv/hyperv_driver.c | 2 ++ src/qemu/qemu_alias.c | 1 + src/qemu/qemu_command.c | 26 ++++++++++++++++++++++++++ src/qemu/qemu_domain_address.c | 5 +++++ src/qemu/qemu_hotplug.c | 14 ++++++++++++-- src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 12 ++++++++++++ src/test/test_driver.c | 2 ++ src/util/virutil.c | 2 +- src/vbox/vbox_common.c | 2 ++ src/vmx/vmx.c | 1 + 16 files changed, 118 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virDomainDiskBus, "uml", "sata", "sd", + "nvme-ns", ); VIR_ENUM_IMPL(virDomainDiskCache, @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virDomainController, "pci", "xenbus", "isa", + "nvme", ); VIR_ENUM_IMPL(virDomainControllerModelPCI, @@ -XXX,XX +XXX,XX @@ virDomainControllerDefNew(virDomainControllerType type) case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } @@ -XXX,XX +XXX,XX @@ virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED, def->info.addr.drive.unit = idx % 2; break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + /* For NVME-NS, each nvme controller has a maximum of 256 nvme-ns */ + def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE; + def->info.addr.drive.controller = idx / 256; + def->info.addr.drive.bus = 0; + def->info.addr.drive.unit = idx % 256; + break; + case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_XEN: @@ -XXX,XX +XXX,XX @@ virDomainControllerModelTypeFromString(const virDomainControllerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return -1; } @@ -XXX,XX +XXX,XX @@ virDomainControllerModelTypeToString(virDomainControllerDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: return NULL; } @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, int ntargetNodes = 0; g_autofree xmlNodePtr *modelNodes = NULL; int nmodelNodes = 0; + g_autofree xmlNodePtr *serialNodes = NULL; + int nserialNodes = 0; int numaNode = -1; int ports; VIR_XPATH_NODE_AUTORESTORE(ctxt) @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, if (virXMLPropInt(node, "ports", 10, VIR_XML_PROP_NONNEGATIVE, &ports, -1) < 0) return NULL; + if ((nserialNodes = virXPathNodeSet("./serial", ctxt, &serialNodes)) > 1) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Multiple <serial> elements in controller definition not allowed")); + return NULL; + } + + if (nserialNodes == 1) { + if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_NVME) { + def->opts.nvmeopts.serial = virXMLNodeContentString(serialNodes[0]); + } + } + switch (def->type) { case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: { if (virXMLPropInt(node, "vectors", 10, VIR_XML_PROP_NONNEGATIVE, @@ -XXX,XX +XXX,XX @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, case VIR_DOMAIN_CONTROLLER_TYPE_SATA: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: default: break; @@ -XXX,XX +XXX,XX @@ virDomainDiskControllerMatch(int controller_type, int disk_bus) disk_bus == VIR_DOMAIN_DISK_BUS_SATA) return true; + if (controller_type == VIR_DOMAIN_CONTROLLER_TYPE_NVME && + disk_bus == VIR_DOMAIN_DISK_BUS_NVME_NS) + return true; + return false; } @@ -XXX,XX +XXX,XX @@ virDomainControllerDefFormat(virBuffer *buf, } break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (def->opts.nvmeopts.serial != NULL) { + virBufferAsprintf(&childBuf, "<serial>%s</serial>\n", def->opts.nvmeopts.serial); + } + break; + case VIR_DOMAIN_CONTROLLER_TYPE_PCI: if (virDomainControllerDefFormatPCI(&childBuf, def, flags) < 0) return -1; @@ -XXX,XX +XXX,XX @@ virDiskNameToBusDeviceIndex(virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: *busIdx = 0; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -XXX,XX +XXX,XX @@ typedef enum { VIR_DOMAIN_DISK_BUS_UML, VIR_DOMAIN_DISK_BUS_SATA, VIR_DOMAIN_DISK_BUS_SD, + VIR_DOMAIN_DISK_BUS_NVME_NS, VIR_DOMAIN_DISK_BUS_LAST } virDomainDiskBus; @@ -XXX,XX +XXX,XX @@ typedef enum { VIR_DOMAIN_CONTROLLER_TYPE_PCI, VIR_DOMAIN_CONTROLLER_TYPE_XENBUS, VIR_DOMAIN_CONTROLLER_TYPE_ISA, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, VIR_DOMAIN_CONTROLLER_TYPE_LAST } virDomainControllerType; @@ -XXX,XX +XXX,XX @@ struct _virDomainXenbusControllerOpts { int maxEventChannels; /* -1 == undef */ }; +struct _virDomainNVMeControllerOpts { + char *serial; +}; + /* Stores the virtual disk controller configuration */ struct _virDomainControllerDef { virDomainControllerType type; @@ -XXX,XX +XXX,XX @@ struct _virDomainControllerDef { virDomainPCIControllerOpts pciopts; virDomainUSBControllerOpts usbopts; virDomainXenbusControllerOpts xenbusopts; + virDomainNVMeControllerOpts nvmeopts; } opts; virDomainDeviceInfo info; virDomainVirtioOptions *virtio; diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -XXX,XX +XXX,XX @@ virDomainDiskDefPostParse(virDomainDiskDef *disk, disk->bus = VIR_DOMAIN_DISK_BUS_XEN; else if (STRPREFIX(disk->dst, "ubd")) disk->bus = VIR_DOMAIN_DISK_BUS_UML; + else if (STRPREFIX(disk->dst, "nvmens")) + disk->bus = VIR_DOMAIN_DISK_BUS_NVME_NS; } } diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -XXX,XX +XXX,XX @@ virDomainDiskAddressDiskBusCompatibility(virDomainDiskBus bus, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: return true; } @@ -XXX,XX +XXX,XX @@ virDomainDiskDefValidate(const virDomainDef *def, !STRPREFIX(disk->dst, "sd") && !STRPREFIX(disk->dst, "vd") && !STRPREFIX(disk->dst, "xvd") && - !STRPREFIX(disk->dst, "ubd")) { + !STRPREFIX(disk->dst, "ubd") && + !STRPREFIX(disk->dst, "nvmens")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid harddisk device name: %1$s"), disk->dst); return -1; diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index XXXXXXX..XXXXXXX 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -XXX,XX +XXX,XX @@ typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallback typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpts; +typedef struct _virDomainNVMeControllerOpts virDomainNVMeControllerOpts; + typedef enum { VIR_DOMAIN_DISK_IO_DEFAULT = 0, VIR_DOMAIN_DISK_IO_NATIVE, diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -XXX,XX +XXX,XX @@ hypervDomainAttachStorage(virDomainPtr domain, virDomainDef *def, const char *ho case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported controller type")); @@ -XXX,XX +XXX,XX @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, const char *xml, unsigned int case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: default: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid disk bus in definition")); diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -XXX,XX +XXX,XX @@ qemuAssignDeviceDiskAlias(virDomainDef *def, case VIR_DOMAIN_DISK_BUS_IDE: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME_NS: diskPriv->qomName = g_strdup(disk->info.alias); break; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -XXX,XX +XXX,XX @@ qemuBuildDeviceAddresDriveProps(virJSONValue *props, } break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (!(controllerAlias = virDomainControllerAliasFind(domainDef, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, + info->addr.drive.controller))) + return -1; + + if (virJSONValueObjectAdd(&props, + "s:bus", controllerAlias, + NULL) < 0) + return -1; + break; case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_USB: @@ -XXX,XX +XXX,XX @@ qemuBuildDiskDeviceProps(const virDomainDef *def, driver = "floppy"; break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + driver = "nvme-ns"; + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: @@ -XXX,XX +XXX,XX @@ qemuBuildControllerDevProps(const virDomainDef *domainDef, break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (virJSONValueObjectAdd(&props, + "s:driver", "nvme", + "s:id", def->info.alias, + "s:serial", def->opts.nvmeopts.serial, + NULL) < 0) + return -1; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -XXX,XX +XXX,XX @@ qemuBuildControllersCommandLine(virCommand *cmd, VIR_DOMAIN_CONTROLLER_TYPE_IDE, VIR_DOMAIN_CONTROLLER_TYPE_SATA, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, }; for (i = 0; i < G_N_ELEMENTS(contOrder); i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, } break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + return pciFlags; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -XXX,XX +XXX,XX @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: return 0; @@ -XXX,XX +XXX,XX @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDef *def, case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -XXX,XX +XXX,XX @@ qemuDomainAttachControllerDevice(virDomainObj *vm, bool releaseaddr = false; if (controller->type != VIR_DOMAIN_CONTROLLER_TYPE_SCSI && \ - controller->type != VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) { + controller->type != VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL && \ + controller->type != VIR_DOMAIN_CONTROLLER_TYPE_NVME) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("'%1$s' controller cannot be hot plugged."), virDomainControllerTypeToString(controller->type)); @@ -XXX,XX +XXX,XX @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver, /* Note that SD card hotplug support should be added only once * they support '-device' (don't require -drive only). * See also: qemuDiskBusIsSD */ + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -XXX,XX +XXX,XX @@ qemuDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); return -1; @@ -XXX,XX +XXX,XX @@ qemuDomainDiskControllerIsBusy(virDomainObj *vm, continue; break; + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (disk->bus != VIR_DOMAIN_DISK_BUS_NVME_NS) + continue; + break; + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: /* xenbus is not supported by the qemu driver */ continue; @@ -XXX,XX +XXX,XX @@ qemuDomainControllerIsBusy(virDomainObj *vm, case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SATA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: return qemuDomainDiskControllerIsBusy(vm, detach); case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: @@ -XXX,XX +XXX,XX @@ qemuDomainDetachPrepController(virDomainObj *vm, int idx; virDomainControllerDef *controller = NULL; - if (match->type != VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { + if (match->type != VIR_DOMAIN_CONTROLLER_TYPE_SCSI && + match->type != VIR_DOMAIN_CONTROLLER_TYPE_NVME) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("'%1$s' controller cannot be hot unplugged."), virDomainControllerTypeToString(match->type)); diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -XXX,XX +XXX,XX @@ qemuDomainControllerDefPostParse(virDomainControllerDef *cont, case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("IOThreads not available for bus %1$s target %2$s"), @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("disk device='lun' is not supported for bus='%1$s'"), virDomainDiskBusTypeToString(disk->bus)); @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, break; + case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected address type for nvme-ns disk")); + return -1; + } + break; + case VIR_DOMAIN_DISK_BUS_XEN: case VIR_DOMAIN_DISK_BUS_SD: case VIR_DOMAIN_DISK_BUS_NONE: @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk, case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_SCSI: + case VIR_DOMAIN_DISK_BUS_NVME_NS: break; case VIR_DOMAIN_DISK_BUS_IDE: @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefController(const virDomainControllerDef *controller, case VIR_DOMAIN_CONTROLLER_TYPE_USB: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index XXXXXXX..XXXXXXX 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -XXX,XX +XXX,XX @@ testDomainAttachDeviceDiskLiveInternal(testDriver *driver G_GNUC_UNUSED, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -XXX,XX +XXX,XX @@ testDomainDetachPrepDisk(virDomainObj *vm, case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SATA: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); return -1; diff --git a/src/util/virutil.c b/src/util/virutil.c index XXXXXXX..XXXXXXX 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -XXX,XX +XXX,XX @@ int virDiskNameParse(const char *name, int *disk, int *partition) const char *ptr = NULL; char *rem; int idx = 0; - static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd"}; + static char const* const drive_prefix[] = {"fd", "hd", "vd", "sd", "xvd", "ubd", "nvmens"}; size_t i; size_t n_digits; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index XXXXXXX..XXXXXXX 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -XXX,XX +XXX,XX @@ vboxSetStorageController(virDomainControllerDef *controller, case VIR_DOMAIN_CONTROLLER_TYPE_PCI: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_ISA: + case VIR_DOMAIN_CONTROLLER_TYPE_NVME: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("The vbox driver does not support %1$s controller type"), @@ -XXX,XX +XXX,XX @@ vboxAttachDrives(virDomainDef *def, struct _vboxDriver *data, IMachine *machine) case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: case VIR_DOMAIN_DISK_BUS_NONE: case VIR_DOMAIN_DISK_BUS_LAST: vboxReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index XXXXXXX..XXXXXXX 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -XXX,XX +XXX,XX @@ virVMXGenerateDiskTarget(virDomainDiskDef *def, case VIR_DOMAIN_DISK_BUS_USB: case VIR_DOMAIN_DISK_BUS_UML: case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_NVME_NS: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported bus type '%1$s' for device type '%2$s'"), virDomainDiskBusTypeToString(def->bus), -- 2.11.0
From: ray <honglei.wang@smartx.com> Signed-off-by: ray <honglei.wang@smartx.com> --- src/qemu/qemu_capabilities.c | 5 +++++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_validate.c | 6 ++++++ tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_10.0.0.s390x.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_5.1.0.sparc.xml | 1 + tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml | 1 + tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_7.2.0.ppc.xml | 1 + tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 1 + tests/domaincapsdata/qemu_8.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml | 1 + tests/domaincapsdata/qemu_9.1.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml | 1 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 1 + tests/domaincapsdata/qemu_9.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml | 1 + tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml | 1 + tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 + 96 files changed, 105 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -XXX,XX +XXX,XX @@ VIR_ENUM_IMPL(virQEMUCaps, /* 475 */ "virtio-scsi.iothread-mapping", /* QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING */ + "nvme-ns", /* QEMU_CAPS_DEVICE_NVME_NS */ ); @@ -XXX,XX +XXX,XX @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "sev-snp-guest", QEMU_CAPS_SEV_SNP_GUEST }, { "acpi-erst", QEMU_CAPS_DEVICE_ACPI_ERST }, { "virtio-mem-ccw", QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW }, + { "nvme-ns", QEMU_CAPS_DEVICE_NVME_NS }, }; @@ -XXX,XX +XXX,XX @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCaps *qemuCaps, if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_SATA); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) + VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_NVME_NS); + /* disk->model values */ VIR_DOMAIN_CAPS_ENUM_SET(disk->model, VIR_DOMAIN_DISK_MODEL_VIRTIO); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL)) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -XXX,XX +XXX,XX @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 475 */ QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING, /* virtio-scsi supports per-virtqueue iothread mapping */ + QEMU_CAPS_DEVICE_NVME_NS, /* -device nvme-ns */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -XXX,XX +XXX,XX @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, break; case VIR_DOMAIN_DISK_BUS_NVME_NS: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME_NS)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("This QEMU doesn't support '-device nvme-ns'")); + return -1; + } + if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for nvme-ns disk")); diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0.s390x.xml b/tests/domaincapsdata/qemu_10.0.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0.s390x.xml +++ b/tests/domaincapsdata/qemu_10.0.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_10.0.0.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_10.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_10.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-tcg-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml b/tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_5.0.0-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_5.1.0.sparc.xml b/tests/domaincapsdata/qemu_5.1.0.sparc.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_5.1.0.sparc.xml +++ b/tests/domaincapsdata/qemu_5.1.0.sparc.xml @@ -XXX,XX +XXX,XX @@ <value>fdc</value> <value>scsi</value> <value>virtio</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml b/tests/domaincapsdata/qemu_6.2.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml b/tests/domaincapsdata/qemu_6.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_6.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_6.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml b/tests/domaincapsdata/qemu_7.0.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml b/tests/domaincapsdata/qemu_7.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml b/tests/domaincapsdata/qemu_7.1.0.ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.ppc64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml b/tests/domaincapsdata/qemu_7.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml b/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-hvf.x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0.ppc.xml b/tests/domaincapsdata/qemu_7.2.0.ppc.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0.ppc.xml +++ b/tests/domaincapsdata/qemu_7.2.0.ppc.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml b/tests/domaincapsdata/qemu_7.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_7.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_7.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml b/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg-virt.loongarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml b/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0-virt.loongarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml b/tests/domaincapsdata/qemu_8.2.0.aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.aarch64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml b/tests/domaincapsdata/qemu_8.2.0.armv7l.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.armv7l.xml +++ b/tests/domaincapsdata/qemu_8.2.0.armv7l.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.s390x.xml b/tests/domaincapsdata/qemu_8.2.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_8.2.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_8.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_8.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.0.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.0.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml b/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml b/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml +++ b/tests/domaincapsdata/qemu_9.1.0-virt.riscv64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0.s390x.xml b/tests/domaincapsdata/qemu_9.1.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.1.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.1.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.1.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml b/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml +++ b/tests/domaincapsdata/qemu_9.2.0-hvf.aarch64+hvf.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-q35.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0-tcg.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0.s390x.xml b/tests/domaincapsdata/qemu_9.2.0.s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_9.2.0.s390x.xml @@ -XXX,XX +XXX,XX @@ <value>scsi</value> <value>virtio</value> <value>usb</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml +++ b/tests/domaincapsdata/qemu_9.2.0.x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/domaincapsdata/qemu_9.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_9.2.0.x86_64.xml @@ -XXX,XX +XXX,XX @@ <value>virtio</value> <value>usb</value> <value>sata</value> + <value>nvme-ns</value> </enum> <enum name='model'> <value>virtio</value> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='migrate-incoming.exit-on-error'/> <flag name='virtio-mem-ccw'/> <flag name='shim'/> + <flag name='nvme-ns'/> <version>9002050</version> <microcodeVersion>39100285</microcodeVersion> <package>v9.2.0-1203-gd6430c17d7</package> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <flag name='blockdev-set-active'/> <flag name='shim'/> <flag name='virtio-scsi.iothread-mapping'/> + <flag name='nvme-ns'/> <version>10000000</version> <microcodeVersion>43100285</microcodeVersion> <package>v10.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='blockdev-set-active'/> <flag name='shim'/> <flag name='virtio-scsi.iothread-mapping'/> + <flag name='nvme-ns'/> <version>10000000</version> <microcodeVersion>43100285</microcodeVersion> <package>v10.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='display-reload'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='nvme-ns'/> <version>6002000</version> <microcodeVersion>42900244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='display-reload'/> <flag name='usb-mtp'/> <flag name='netdev.user'/> + <flag name='nvme-ns'/> <version>6002000</version> <microcodeVersion>43100244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>7000000</version> <microcodeVersion>42900243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='acpi-erst'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>7000000</version> <microcodeVersion>43100243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>7001000</version> <microcodeVersion>42900244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>7001000</version> <microcodeVersion>43100244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-7.2.0-6.fc37</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>8000000</version> <microcodeVersion>43100244</microcodeVersion> <package>v8.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>8001000</version> <microcodeVersion>43100245</microcodeVersion> <package>v8.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-sound'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>61700246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_armv7l.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-sound'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-8.2.0-7.fc39</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_loongarch64.xml @@ -XXX,XX +XXX,XX @@ <flag name='virtio-sound'/> <flag name='netdev.user'/> <flag name='acpi-erst'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>106300246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='usb-mtp'/> <flag name='virtio-sound'/> <flag name='netdev.user'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>39100246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>8002000</version> <microcodeVersion>43100246</microcodeVersion> <package>v8.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> + <flag name='nvme-ns'/> <version>9000000</version> <microcodeVersion>43100245</microcodeVersion> <package>v9.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml @@ -XXX,XX +XXX,XX @@ <flag name='acpi-erst'/> <flag name='migrate-incoming.exit-on-error'/> <flag name='machine.virt.aia'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>0</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev.user'/> <flag name='query-cpu-model-expansion.deprecated-props'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>39100246</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='intel-iommu.dma-translation'/> <flag name='machine-i8042-opt'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9001000</version> <microcodeVersion>43100246</microcodeVersion> <package>v9.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_aarch64+hvf.xml @@ -XXX,XX +XXX,XX @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9002002</version> <microcodeVersion>61700247</microcodeVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_s390x.xml @@ -XXX,XX +XXX,XX @@ <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='query-cpu-model-expansion.deprecated-props'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9002000</version> <microcodeVersion>39100247</microcodeVersion> <package>v9.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64+amdsev.xml @@ -XXX,XX +XXX,XX @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9002000</version> <microcodeVersion>43100247</microcodeVersion> <package>v9.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml index XXXXXXX..XXXXXXX 100644 --- a/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml @@ -XXX,XX +XXX,XX @@ <flag name='chardev-reconnect-miliseconds'/> <flag name='netdev-stream-reconnect-miliseconds'/> <flag name='migrate-incoming.exit-on-error'/> + <flag name='nvme-ns'/> <version>9002000</version> <microcodeVersion>43100247</microcodeVersion> <package>v9.2.0</package> -- 2.11.0
From: ray <honglei.wang@smartx.com> Signed-off-by: ray <honglei.wang@smartx.com> --- src/conf/schemas/domaincommon.rng | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index XXXXXXX..XXXXXXX 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -XXX,XX +XXX,XX @@ <define name="diskTargetDev"> <data type="string"> - <param name="pattern">(ioemu:)?(fd|hd|sd|vd|xvd|ubd)[a-zA-Z0-9_]+</param> + <param name="pattern">(ioemu:)?(fd|hd|sd|vd|xvd|ubd|nvmens)[a-zA-Z0-9_]+</param> </data> </define> @@ -XXX,XX +XXX,XX @@ <value>uml</value> <!-- NOT USED ANYMORE --> <value>sata</value> <value>sd</value> + <value>nvme-ns</value> </choice> </attribute> </optional> @@ -XXX,XX +XXX,XX @@ </attribute> </optional> </group> + <group> + <attribute name="type"> + <value>nvme</value> + </attribute> + <element name="serial"> + <ref name="diskSerial"/> + </element> + </group> </choice> <optional> <element name="driver"> -- 2.11.0
From: ray <honglei.wang@smartx.com> Signed-off-by: ray <honglei.wang@smartx.com> --- .../disk-nvme-ns-device.x86_64-latest.args | 36 +++++++++++++++++++ .../disk-nvme-ns-device.x86_64-latest.xml | 42 ++++++++++++++++++++++ tests/qemuxmlconfdata/disk-nvme-ns-device.xml | 41 +++++++++++++++++++++ tests/qemuxmlconftest.c | 1 + 4 files changed, 120 insertions(+) create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.xml diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args @@ -XXX,XX +XXX,XX @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.0","addr":"0x3"}' \ +-device '{"driver":"nvme","id":"nvme0","serial":"nvme-controller-abcdef","bus":"pci.0","addr":"0x5"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data-1.img","node-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"nvme-ns","bus":"nvme0","drive":"libvirt-1-storage","id":"nvme-ns0-0-0","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <driver name='qemu' type='raw'/> + <source file='/tmp/data-1.img'/> + <target dev='nvmensa' bus='nvme-ns'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </controller> + <controller type='nvme' index='0'> + <serial>nvme-controller-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.xml b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml new file mode 100644 index XXXXXXX..XXXXXXX --- /dev/null +++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml @@ -XXX,XX +XXX,XX @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='file' device='disk'> + <source file='/tmp/data-1.img'/> + <target dev='nvmensa' bus='nvme-ns'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </controller> + <controller type='nvme' index='0'> + <serial>nvme-controller-abcdef</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index XXXXXXX..XXXXXXX 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -XXX,XX +XXX,XX @@ mymain(void) DO_TEST_CAPS_LATEST("disk-network-ssh"); DO_TEST_CAPS_LATEST("disk-no-boot"); DO_TEST_CAPS_LATEST("disk-nvme"); + DO_TEST_CAPS_LATEST("disk-nvme-ns-device"); DO_TEST_CAPS_LATEST("disk-vhostuser-numa"); DO_TEST_CAPS_LATEST("disk-vhostuser"); DO_TEST_CAPS_ARCH_LATEST_FULL("disk-vhostvdpa", "x86_64", -- 2.11.0
From: ray <honglei.wang@smartx.com> Signed-off-by: ray <honglei.wang@smartx.com> --- NEWS.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index XXXXXXX..XXXXXXX 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -XXX,XX +XXX,XX @@ v11.3.0 (unreleased) At the moment it doesn't provide any new features compared to ``<interface type='bridge'>``, but allows a more flexible configuration. + * qemu: Support emulated NVMe disks with other storage backends + + Domain XMLs can now include emulated NVMe disks backed by other storage + backends such as file. + They are configured with:: + + <disk type='file' device='disk'> + <driver name='qemu' type='raw'/> + <source file='/tmp/data.img'/> + <target dev='nvmensa' bus='nvme-ns'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='nvme' index='0'> + <serial>nvme-controller-serial-value</serial> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + * **Improvements** * **Bug fixes** -- 2.11.0