[PATCH v2] util: basic support for VFIO variant drivers
by Laine Stump
Before a PCI device can be assigned to a guest with VFIO, that device
must be bound to the vfio-pci driver rather than to the device's
normal driver. The vfio-pci driver provides APIs that permit QEMU to
perform all the necessary operations to make the device accessible to
the guest.
There has been kernel work recently to support vendor/device-specific
VFIO variant drivers that provide the basic vfio-pci driver functionality
while adding support for device-specific operations (for example these
device-specific drivers are planned to support live migration of
certain devices). All that will be needed to make this functionality
available will be to bind the new vendor-specific driver to the device
(rather than the generic vfio-pci driver, which will continue to work
just without the extra functionality).
But until now libvirt has required that all PCI devices being assigned
to a guest with VFIO specifically have the "vfio-pci" driver bound to
the device. So even if the user manually binds a shiny new
vendor-specific vfio variant driver to the device (and puts
"managed='no'" in the config to prevent libvirt from changing the
binding), libvirt will just fail during startup of the guest (or
during hotplug) because the driver bound to the device isn't exactly
"vfio-pci".
This patch loosens that restriction a bit - rather than requiring that
the device be bound to "vfio-pci", it also checks if the drivername
contains the string "vfio" at all, and in this case allows the
operation to continue. If the driver is in fact a VFIO variant, then
the assignment will succeed, but if it is not a VFIO variant then QEMU
will fail (and report the error back to libvirt).
In the near future (possibly by kernel 6.0) there will be a
formal method of identifying a VFIO variant driver by looking in
sysfs; in the meantime the inexact, but simple, method in this patch
will allow users of the few existing VFIO variant drivers (and
developers of new VFIO variant drivers) to use their new drivers
without needing to remove libvirt from their setup - they can simply
pre-bind the device to the new driver, then use "managed='no'" in
their libvirt config.
NB: this patch does *not* handle automatically determining the proper
vendor-specific driver and binding to it in the case of
"managed='yes'". This will be implemented later when there is a widely
available driver / device combo we can use for testing.
Signed-off-by: Laine Stump <laine(a)redhat.com>
---
V1 here: https://listman.redhat.com/archives/libvir-list/2022-August/233327.html
Change in V2:
V1 used the output of modinfo to look for "vfio_pci" as an alias for a
driver to see if it was a VFIO variant driver.
As a result of discussion of V1, V2 is much simpler - it just assumes
that any driver with "vfio" in the name is a VFIO variant. This is
okay because 1) QEMU will still catch it and libvirt will properly log
the error if the driver isn't actually a VFIO variant, and 2) it's a
temporary situation, just to enable use of VFIO variant drivers with
libvirt until a standard method of detecting this is added to sysfs
(which, according to the discussion of V1, is coming in the near
future).
(NB: I did implement checking of /lib/modules/`uname -r`/modules.alias
as suggested by Erik, but it turned out that this caused the unit
tests to call uname(3) and open the modules.alias file on the test
host - for a proper unit test I would have also needed to mock these
two functions, and it seemed like too much complexity for a temporary
workaround. I've implemented Jason's suggestion here (accept any
driver with "vfio" in the name), which is similar to danpb's
suggestion (accept specifically the two drivers that are already in
the upstream kernel), but will also allow for new drivers that may be
under development.)
src/hypervisor/virhostdev.c | 26 ++++---------
src/util/virpci.c | 76 ++++++++++++++++++++++++++++++++++---
src/util/virpci.h | 3 ++
3 files changed, 82 insertions(+), 23 deletions(-)
diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c
index c0ce867596..15b35fa75e 100644
--- a/src/hypervisor/virhostdev.c
+++ b/src/hypervisor/virhostdev.c
@@ -747,9 +747,8 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr,
mgr->inactivePCIHostdevs) < 0)
goto reattachdevs;
} else {
- g_autofree char *driverPath = NULL;
- g_autofree char *driverName = NULL;
- int stub;
+ g_autofree char *drvName = NULL;
+ virPCIStubDriver drvType;
/* Unmanaged devices should already have been marked as
* inactive: if that's the case, we can simply move on */
@@ -769,18 +768,14 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr,
* information about active / inactive device across
* daemon restarts has been implemented */
- if (virPCIDeviceGetDriverPathAndName(pci,
- &driverPath, &driverName) < 0)
+ if (virPCIDeviceGetDriverNameAndType(pci, &drvName, &drvType) < 0)
goto reattachdevs;
- stub = virPCIStubDriverTypeFromString(driverName);
-
- if (stub > VIR_PCI_STUB_DRIVER_NONE &&
- stub < VIR_PCI_STUB_DRIVER_LAST) {
+ if (drvType > VIR_PCI_STUB_DRIVER_NONE) {
/* The device is bound to a known stub driver: store this
* information and add a copy to the inactive list */
- virPCIDeviceSetStubDriver(pci, stub);
+ virPCIDeviceSetStubDriver(pci, drvType);
VIR_DEBUG("Adding PCI device %s to inactive list",
virPCIDeviceGetName(pci));
@@ -2292,18 +2287,13 @@ virHostdevPrepareOneNVMeDevice(virHostdevManager *hostdev_mgr,
/* Let's check if all PCI devices are NVMe disks. */
for (i = 0; i < virPCIDeviceListCount(pciDevices); i++) {
virPCIDevice *pci = virPCIDeviceListGet(pciDevices, i);
- g_autofree char *drvPath = NULL;
g_autofree char *drvName = NULL;
- int stub = VIR_PCI_STUB_DRIVER_NONE;
+ virPCIStubDriver drvType;
- if (virPCIDeviceGetDriverPathAndName(pci, &drvPath, &drvName) < 0)
+ if (virPCIDeviceGetDriverNameAndType(pci, &drvName, &drvType) < 0)
goto cleanup;
- if (drvName)
- stub = virPCIStubDriverTypeFromString(drvName);
-
- if (stub == VIR_PCI_STUB_DRIVER_VFIO ||
- STREQ_NULLABLE(drvName, "nvme"))
+ if (drvType == VIR_PCI_STUB_DRIVER_VFIO || STREQ_NULLABLE(drvName, "nvme"))
continue;
VIR_WARN("Suspicious NVMe disk assignment. PCI device "
diff --git a/src/util/virpci.c b/src/util/virpci.c
index 7800966963..51ccf4d9fd 100644
--- a/src/util/virpci.c
+++ b/src/util/virpci.c
@@ -277,6 +277,71 @@ virPCIDeviceGetDriverPathAndName(virPCIDevice *dev, char **path, char **name)
}
+/**
+ * virPCIDeviceGetDriverNameAndType:
+ * @dev: virPCIDevice object to examine
+ * @drvName: returns name of driver bound to this device (if any)
+ * @drvType: returns type of driver if it is a known stub driver type
+ *
+ * Find the name of the driver bound to @dev (if any) and the type of
+ * the driver if it is a known/recognized "stub" driver (based on the
+ * driver name).
+ *
+ * There are vfio "variant" drivers that provide all the basic
+ * functionality of the standard vfio-pci driver as well as additional
+ * stuff. There is a plan to add info to sysfs that will allow easily
+ * determining if a driver is a vfio variant driver, but that sysfs
+ * entry isn't yet available. In the meantime as a workaround so that
+ * the few existing vfio variant drivers can be used with libvirt, and
+ * so that driver developers can test their new vfio variant drivers
+ * without needing to bypass libvirt, we also check if the driver name
+ * contains the string "vfio"; if it does, then we consider this drier
+ * as type VFIO. This can lead to false positives, but that isn't a
+ * horrible thing, because the problem will still be caught by QEMU as
+ * soon as libvirt makes the request to attach the device.
+ *
+ * Return 0 on success, -1 on failure. If -1 is returned, then an error
+ * message has been logged.
+ */
+int
+virPCIDeviceGetDriverNameAndType(virPCIDevice *dev,
+ char **drvName,
+ virPCIStubDriver *drvType)
+{
+ g_autofree char *drvPath = NULL;
+ int tmpType;
+
+ if (virPCIDeviceGetDriverPathAndName(dev, &drvPath, drvName) < 0)
+ return -1;
+
+ if (!*drvName) {
+ *drvType = VIR_PCI_STUB_DRIVER_NONE;
+ return 0;
+ }
+
+ tmpType = virPCIStubDriverTypeFromString(*drvName);
+
+ if (tmpType > VIR_PCI_STUB_DRIVER_NONE) {
+ *drvType = tmpType;
+ return 0; /* exact match of a known driver name (or no name) */
+ }
+
+ /* Check if the drivername contains "vfio" and count as a VFIO
+ * driver if so - see above for explanation.
+ */
+
+ if (strstr(*drvName, "vfio")) {
+ VIR_DEBUG("Driver %s is a vfio_pci driver", *drvName);
+ *drvType = VIR_PCI_STUB_DRIVER_VFIO;
+ } else {
+ VIR_DEBUG("Driver %s is NOT a vfio_pci driver", *drvName);
+ *drvType = VIR_PCI_STUB_DRIVER_NONE;
+ }
+
+ return 0;
+}
+
+
static int
virPCIDeviceConfigOpenInternal(virPCIDevice *dev, bool readonly, bool fatal)
{
@@ -1004,8 +1069,8 @@ virPCIDeviceReset(virPCIDevice *dev,
virPCIDeviceList *activeDevs,
virPCIDeviceList *inactiveDevs)
{
- g_autofree char *drvPath = NULL;
g_autofree char *drvName = NULL;
+ virPCIStubDriver drvType;
int ret = -1;
int fd = -1;
int hdrType = -1;
@@ -1032,15 +1097,16 @@ virPCIDeviceReset(virPCIDevice *dev,
* reset it whenever appropriate, so doing it ourselves would just
* be redundant.
*/
- if (virPCIDeviceGetDriverPathAndName(dev, &drvPath, &drvName) < 0)
+ if (virPCIDeviceGetDriverNameAndType(dev, &drvName, &drvType) < 0)
goto cleanup;
- if (virPCIStubDriverTypeFromString(drvName) == VIR_PCI_STUB_DRIVER_VFIO) {
- VIR_DEBUG("Device %s is bound to vfio-pci - skip reset",
- dev->name);
+ if (drvType == VIR_PCI_STUB_DRIVER_VFIO) {
+
+ VIR_DEBUG("Device %s is bound to %s - skip reset", dev->name, drvName);
ret = 0;
goto cleanup;
}
+
VIR_DEBUG("Resetting device %s", dev->name);
if ((fd = virPCIDeviceConfigOpenWrite(dev)) < 0)
diff --git a/src/util/virpci.h b/src/util/virpci.h
index 4d9193f24e..0532b90f90 100644
--- a/src/util/virpci.h
+++ b/src/util/virpci.h
@@ -280,6 +280,9 @@ int virPCIDeviceRebind(virPCIDevice *dev);
int virPCIDeviceGetDriverPathAndName(virPCIDevice *dev,
char **path,
char **name);
+int virPCIDeviceGetDriverNameAndType(virPCIDevice *dev,
+ char **drvName,
+ virPCIStubDriver *drvType);
int virPCIDeviceIsPCIExpress(virPCIDevice *dev);
int virPCIDeviceHasPCIExpressLink(virPCIDevice *dev);
--
2.37.1
1 year, 10 months
[PATCH v1 0/3] Make virtio-mem and virtio-pmem address stable
by Michal Privoznik
*** BLURB HERE ***
Michal Prívozník (3):
conf: Introduce <address/> for virtio-mem and virtio-pmem
qemu: Fill virtio-mem/virtio-pmem .memaddr at runtime
qemu_command: Generate .memaddr for virtio-mem and virtio-pmem
docs/formatdomain.rst | 7 ++++++
src/conf/domain_conf.c | 24 ++++++++++++++++++-
src/conf/domain_conf.h | 2 ++
src/conf/domain_validate.c | 6 +++++
src/conf/schemas/domaincommon.rng | 7 ++++++
src/qemu/qemu_command.c | 1 +
src/qemu/qemu_domain.c | 7 ++++--
src/qemu/qemu_monitor_json.c | 12 ++++++++--
...mory-hotplug-virtio-mem.x86_64-latest.args | 2 +-
.../memory-hotplug-virtio-mem.xml | 1 +
...mory-hotplug-virtio-pmem.x86_64-5.2.0.args | 2 +-
...ory-hotplug-virtio-pmem.x86_64-latest.args | 2 +-
.../memory-hotplug-virtio-pmem.xml | 1 +
13 files changed, 66 insertions(+), 8 deletions(-)
--
2.39.2
1 year, 10 months
[PATCH 0/7] qemu: Don't use deprecated '-no-acpi' and RFC: fix ACPI config for machine types not supporting ACPI
by Peter Krempa
The first part of the series is a straightforward replacement of
'-no-acpi' by '-machine acpi=on/off' based on configuration.
'-no-acpi' was recently deprecated by qemu thus we must adapt.
The second part of this series fixes the use of ACPI (or lack thereof)
for ARM machine types which don't support ACPI. We'll break such
commandline by adding '-no-acpi' due to historical baggage.
The second part is RFC as it's based on a qemu patch I'll be posting
along this series. This posting will also illustrate to qemu devs how
libvirt itends to use the added information.
I'll post the link to the qemu patch once I submit it.
Peter Krempa (7):
qemu: capabilities: Introduce QEMU_CAPS_MACHINE_ACPI
qemu: Use '-machine acpi=on/off' instead of deprecated '-no-acpi'
qemu: capabilities: Refactor XML parsing in virQEMUCapsLoadMachines
RFC BELOW:
qemu: capabilities: Extract whether machine type supports ACPI
qemu: capabilities: Introduce virQEMUCapsMachineSupportsACPI
XXX: tests: qemucapabilitiesdata: Regenerate with support for 'acpi'
in 'query-machines'
qemu: command: Don't format '-machine acpi=off' for machine types not
supporting ACPI
src/qemu/qemu_capabilities.c | 89 ++--
src/qemu/qemu_capabilities.h | 4 +
src/qemu/qemu_capspriv.h | 3 +-
src/qemu/qemu_command.c | 51 ++
src/qemu/qemu_monitor.h | 1 +
src/qemu/qemu_monitor_json.c | 12 +
.../caps_4.2.0.x86_64.xml | 2 +-
.../caps_5.0.0.x86_64.xml | 2 +-
.../caps_5.1.0.x86_64.xml | 2 +-
.../caps_5.2.0.x86_64.xml | 2 +-
.../caps_6.0.0.x86_64.xml | 2 +-
.../caps_6.1.0.x86_64.xml | 2 +-
.../caps_6.2.0.aarch64.xml | 2 +-
.../qemucapabilitiesdata/caps_6.2.0.ppc64.xml | 1 +
.../caps_6.2.0.x86_64.xml | 2 +-
.../caps_7.0.0.aarch64.xml | 2 +-
.../qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 1 +
.../caps_7.0.0.x86_64.xml | 2 +-
.../qemucapabilitiesdata/caps_7.1.0.ppc64.xml | 1 +
.../caps_7.1.0.x86_64.xml | 2 +-
.../caps_7.2.0.x86_64.xml | 2 +-
.../caps_8.0.0.x86_64.replies | 471 ++++++++++++------
.../caps_8.0.0.x86_64.xml | 244 ++++-----
...fault-cpu-kvm-virt-4.2.aarch64-latest.args | 3 +-
...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 3 +-
.../aarch64-features-sve.aarch64-latest.args | 3 +-
.../aarch64-tpm.aarch64-latest.args | 3 +-
.../aarch64-virt-graphics.aarch64-latest.args | 2 +-
.../aarch64-virt-headless.aarch64-latest.args | 2 +-
...h64-virtio-pci-default.aarch64-latest.args | 3 +-
.../audio-alsa-best.x86_64-latest.args | 3 +-
.../audio-alsa-full.x86_64-latest.args | 3 +-
.../audio-alsa-minimal.x86_64-latest.args | 3 +-
.../audio-coreaudio-best.x86_64-latest.args | 3 +-
.../audio-coreaudio-full.x86_64-latest.args | 3 +-
...audio-coreaudio-minimal.x86_64-latest.args | 3 +-
...udio-default-nographics.x86_64-latest.args | 3 +-
.../audio-default-sdl.x86_64-latest.args | 3 +-
.../audio-default-spice.x86_64-latest.args | 3 +-
.../audio-default-vnc.x86_64-latest.args | 3 +-
.../audio-file-best.x86_64-latest.args | 3 +-
.../audio-file-full.x86_64-latest.args | 3 +-
.../audio-file-minimal.x86_64-latest.args | 3 +-
.../audio-jack-full.x86_64-latest.args | 3 +-
.../audio-jack-minimal.x86_64-latest.args | 3 +-
.../audio-many-backends.x86_64-latest.args | 3 +-
.../audio-none-best.x86_64-latest.args | 3 +-
.../audio-none-full.x86_64-latest.args | 3 +-
.../audio-none-minimal.x86_64-latest.args | 3 +-
.../audio-oss-best.x86_64-latest.args | 3 +-
.../audio-oss-full.x86_64-latest.args | 3 +-
.../audio-oss-minimal.x86_64-latest.args | 3 +-
.../audio-pulseaudio-best.x86_64-latest.args | 3 +-
.../audio-pulseaudio-full.x86_64-latest.args | 3 +-
...udio-pulseaudio-minimal.x86_64-latest.args | 3 +-
.../audio-sdl-best.x86_64-latest.args | 3 +-
.../audio-sdl-full.x86_64-latest.args | 3 +-
.../audio-sdl-minimal.x86_64-latest.args | 3 +-
.../audio-spice-best.x86_64-latest.args | 3 +-
.../audio-spice-full.x86_64-latest.args | 3 +-
.../audio-spice-minimal.x86_64-latest.args | 3 +-
.../blkdeviotune-group-num.x86_64-latest.args | 3 +-
...blkdeviotune-max-length.x86_64-latest.args | 3 +-
.../blkdeviotune-max.x86_64-latest.args | 3 +-
.../blkdeviotune.x86_64-latest.args | 3 +-
.../boot-cdrom.x86_64-latest.args | 3 +-
.../boot-complex.x86_64-latest.args | 3 +-
.../boot-floppy-q35.x86_64-latest.args | 3 +-
.../boot-floppy.x86_64-latest.args | 3 +-
...boot-menu-disable-drive.x86_64-latest.args | 3 +-
.../boot-menu-disable.x86_64-latest.args | 3 +-
...enu-enable-with-timeout.x86_64-latest.args | 3 +-
.../boot-menu-enable.x86_64-latest.args | 3 +-
.../boot-multi.x86_64-latest.args | 3 +-
.../boot-network.x86_64-latest.args | 3 +-
.../boot-order.x86_64-latest.args | 3 +-
...l-qemu-vdagent-features.x86_64-latest.args | 3 +-
.../channel-qemu-vdagent.x86_64-latest.args | 3 +-
.../channel-unix-guestfwd.x86_64-latest.args | 3 +-
.../clock-absolute.x86_64-latest.args | 3 +-
.../clock-timer-armvtimer.aarch64-latest.args | 3 +-
.../console-compat-auto.x86_64-latest.args | 3 +-
.../console-compat-chardev.x86_64-latest.args | 3 +-
.../console-compat.x86_64-latest.args | 3 +-
.../console-virtio-unix.x86_64-latest.args | 3 +-
.../controller-usb-order.x86_64-latest.args | 3 +-
.../controller-virtio-scsi.x86_64-latest.args | 3 +-
...-Icelake-Server-pconfig.x86_64-latest.args | 3 +-
.../cpu-eoi-disabled.x86_64-latest.args | 2 +-
.../cpu-eoi-enabled.x86_64-latest.args | 2 +-
.../cpu-host-model.x86_64-4.2.0.args | 3 +-
.../cpu-host-model.x86_64-5.0.0.args | 3 +-
.../cpu-host-model.x86_64-5.1.0.args | 3 +-
.../cpu-host-model.x86_64-5.2.0.args | 3 +-
.../cpu-host-model.x86_64-6.0.0.args | 3 +-
.../cpu-host-model.x86_64-6.1.0.args | 3 +-
.../cpu-host-model.x86_64-latest.args | 3 +-
.../cpu-translation.x86_64-latest.args | 3 +-
.../cputune-cpuset-big-id.x86_64-latest.args | 3 +-
.../crypto-builtin.x86_64-latest.args | 3 +-
...ult-video-type-aarch64.aarch64-latest.args | 3 +-
...default-video-type-ppc64.ppc64-latest.args | 2 +-
.../devices-acpi-index.x86_64-latest.args | 2 +-
.../disk-aio-io_uring.x86_64-latest.args | 3 +-
.../disk-aio.x86_64-latest.args | 3 +-
.../disk-arm-virtio-sd.aarch64-latest.args | 3 +-
...-backing-chains-noindex.x86_64-latest.args | 3 +-
.../disk-blockio.x86_64-latest.args | 3 +-
.../disk-boot-cdrom.x86_64-latest.args | 3 +-
.../disk-boot-disk.x86_64-latest.args | 3 +-
.../disk-cache.x86_64-latest.args | 3 +-
.../disk-cdrom-bus-other.x86_64-latest.args | 3 +-
...m-empty-network-invalid.x86_64-latest.args | 3 +-
.../disk-cdrom-network.x86_64-latest.args | 2 +-
.../disk-cdrom-tray.x86_64-latest.args | 3 +-
.../disk-cdrom.x86_64-latest.args | 3 +-
.../disk-copy_on_read.x86_64-latest.args | 3 +-
.../disk-detect-zeroes.x86_64-latest.args | 3 +-
.../disk-discard.x86_64-latest.args | 3 +-
.../disk-error-policy.x86_64-latest.args | 3 +-
.../disk-floppy-q35.x86_64-latest.args | 3 +-
.../disk-floppy-tray.x86_64-latest.args | 3 +-
.../disk-floppy.x86_64-latest.args | 3 +-
.../disk-fmt-qcow.x86_64-latest.args | 3 +-
.../disk-geometry.x86_64-latest.args | 3 +-
.../disk-ide-split.x86_64-latest.args | 3 +-
.../disk-ide-wwn.x86_64-latest.args | 3 +-
.../disk-ioeventfd.x86_64-latest.args | 3 +-
.../disk-metadata-cache.x86_64-latest.args | 3 +-
.../disk-network-gluster.x86_64-latest.args | 3 +-
.../disk-network-http.x86_64-latest.args | 3 +-
.../disk-network-iscsi.x86_64-latest.args | 3 +-
.../disk-network-nbd.x86_64-latest.args | 3 +-
.../disk-network-nfs.x86_64-latest.args | 3 +-
...-network-rbd-encryption.x86_64-latest.args | 3 +-
...sk-network-rbd-no-colon.x86_64-latest.args | 3 +-
.../disk-network-rbd.x86_64-latest.args | 3 +-
.../disk-network-sheepdog.x86_64-6.0.0.args | 3 +-
...isk-network-source-auth.x86_64-latest.args | 3 +-
...rk-tlsx509-nbd-hostname.x86_64-latest.args | 3 +-
...disk-network-tlsx509-nbd.x86_64-5.2.0.args | 3 +-
...isk-network-tlsx509-nbd.x86_64-latest.args | 3 +-
...isk-network-tlsx509-vxhs.x86_64-5.0.0.args | 3 +-
.../disk-no-boot.x86_64-latest.args | 3 +-
.../disk-nvme.x86_64-latest.args | 3 +-
.../disk-order.x86_64-latest.args | 3 +-
.../disk-readonly-disk.x86_64-latest.args | 3 +-
.../disk-rotation.x86_64-latest.args | 3 +-
.../disk-sata-device.x86_64-latest.args | 3 +-
.../disk-scsi-device-auto.x86_64-latest.args | 3 +-
.../disk-scsi-disk-split.x86_64-latest.args | 3 +-
.../disk-scsi-disk-vpd.x86_64-latest.args | 3 +-
.../disk-scsi-disk-wwn.x86_64-latest.args | 3 +-
...sk-scsi-lun-passthrough.x86_64-latest.args | 3 +-
.../disk-scsi.x86_64-latest.args | 3 +-
.../disk-serial.x86_64-latest.args | 3 +-
.../disk-shared.x86_64-latest.args | 3 +-
.../disk-slices.x86_64-latest.args | 3 +-
.../disk-snapshot.x86_64-latest.args | 3 +-
.../disk-source-fd.x86_64-latest.args | 3 +-
.../disk-source-pool-mode.x86_64-latest.args | 3 +-
.../disk-source-pool.x86_64-latest.args | 3 +-
.../disk-transient.x86_64-latest.args | 3 +-
...sk-usb-device-removable.x86_64-latest.args | 3 +-
.../disk-usb-device.x86_64-latest.args | 3 +-
.../disk-vhostuser-numa.x86_64-4.2.0.args | 3 +-
.../disk-vhostuser-numa.x86_64-latest.args | 3 +-
.../disk-vhostuser.x86_64-latest.args | 3 +-
.../disk-virtio-queues.x86_64-latest.args | 3 +-
...virtio-scsi-reservations.x86_64-5.2.0.args | 3 +-
...irtio-scsi-reservations.x86_64-latest.args | 3 +-
.../disk-virtio.x86_64-latest.args | 3 +-
.../encrypted-disk-usage.x86_64-latest.args | 3 +-
.../encrypted-disk.x86_64-latest.args | 3 +-
.../eoi-disabled.x86_64-latest.args | 2 +-
.../eoi-enabled.x86_64-latest.args | 2 +-
.../event_idx.x86_64-latest.args | 3 +-
...d-memory-numa-topology4.x86_64-latest.args | 3 +-
.../fips-enabled.x86_64-5.1.0.args | 3 +-
.../fips-enabled.x86_64-latest.args | 3 +-
...are-auto-bios-stateless.x86_64-latest.args | 2 +-
.../firmware-auto-bios.x86_64-latest.args | 2 +-
...mware-auto-efi-aarch64.aarch64-latest.args | 2 +-
...-auto-efi-enrolled-keys.x86_64-latest.args | 2 +-
...-auto-efi-loader-secure.x86_64-latest.args | 2 +-
...to-efi-no-enrolled-keys.x86_64-latest.args | 2 +-
...are-auto-efi-no-secboot.x86_64-latest.args | 2 +-
...firmware-auto-efi-nvram.x86_64-latest.args | 2 +-
...rmware-auto-efi-secboot.x86_64-latest.args | 2 +-
...ware-auto-efi-stateless.x86_64-latest.args | 2 +-
.../firmware-auto-efi.x86_64-latest.args | 2 +-
...manual-bios-rw-implicit.x86_64-latest.args | 2 +-
...firmware-manual-bios-rw.x86_64-latest.args | 2 +-
...e-manual-efi-nvram-file.x86_64-latest.args | 2 +-
...efi-nvram-network-iscsi.x86_64-latest.args | 2 +-
...l-efi-nvram-network-nbd.x86_64-latest.args | 2 +-
...nual-efi-nvram-template.x86_64-latest.args | 2 +-
...re-manual-efi-stateless.x86_64-latest.args | 2 +-
.../floppy-drive-fat.x86_64-latest.args | 3 +-
.../qemuxml2argvdata/fs9p.x86_64-latest.args | 3 +-
.../genid-auto.x86_64-latest.args | 2 +-
.../qemuxml2argvdata/genid.x86_64-latest.args | 2 +-
...egl-headless-rendernode.x86_64-latest.args | 3 +-
.../graphics-egl-headless.x86_64-latest.args | 3 +-
...s-spice-agent-file-xfer.x86_64-latest.args | 3 +-
...aphics-spice-agentmouse.x86_64-latest.args | 3 +-
...s-spice-auto-socket-cfg.x86_64-latest.args | 3 +-
...phics-spice-auto-socket.x86_64-latest.args | 3 +-
...phics-spice-compression.x86_64-latest.args | 3 +-
...hics-spice-egl-headless.x86_64-latest.args | 3 +-
...pice-gl-auto-rendernode.x86_64-latest.args | 3 +-
.../graphics-spice-no-args.x86_64-latest.args | 3 +-
.../graphics-spice-qxl-vga.x86_64-latest.args | 3 +-
.../graphics-spice-sasl.x86_64-latest.args | 3 +-
.../graphics-spice-socket.x86_64-latest.args | 3 +-
.../graphics-spice-timeout.x86_64-latest.args | 2 +-
...raphics-spice-usb-redir.x86_64-latest.args | 3 +-
.../graphics-spice.x86_64-latest.args | 3 +-
...ics-vnc-auto-socket-cfg.x86_64-latest.args | 3 +-
...raphics-vnc-auto-socket.x86_64-latest.args | 3 +-
...aphics-vnc-egl-headless.x86_64-latest.args | 3 +-
...hics-vnc-no-listen-attr.x86_64-latest.args | 3 +-
.../graphics-vnc-none.x86_64-latest.args | 3 +-
.../graphics-vnc-policy.x86_64-latest.args | 3 +-
.../graphics-vnc-power.x86_64-latest.args | 3 +-
...remove-generated-socket.x86_64-latest.args | 3 +-
.../graphics-vnc-sasl.x86_64-latest.args | 3 +-
...-vnc-socket-new-cmdline.x86_64-latest.args | 3 +-
.../graphics-vnc-socket.x86_64-latest.args | 3 +-
.../graphics-vnc-tls-secret.x86_64-5.2.0.args | 3 +-
...graphics-vnc-tls-secret.x86_64-latest.args | 3 +-
.../graphics-vnc-tls.x86_64-latest.args | 3 +-
.../graphics-vnc-websocket.x86_64-latest.args | 3 +-
.../graphics-vnc.x86_64-latest.args | 3 +-
...tdev-mdev-display-ramfb.x86_64-latest.args | 3 +-
...play-spice-egl-headless.x86_64-latest.args | 3 +-
...ev-display-spice-opengl.x86_64-latest.args | 3 +-
...isplay-vnc-egl-headless.x86_64-latest.args | 3 +-
...ostdev-mdev-display-vnc.x86_64-latest.args | 3 +-
...tdev-pci-address-device.x86_64-latest.args | 3 +-
.../hostdev-pci-address.x86_64-latest.args | 3 +-
.../hostdev-scsi-lsi.x86_64-latest.args | 3 +-
...dev-scsi-vhost-scsi-pcie.x86_64-4.2.0.args | 3 +-
...ev-scsi-vhost-scsi-pcie.x86_64-latest.args | 3 +-
...ostdev-scsi-virtio-scsi.x86_64-latest.args | 3 +-
...usb-address-device-boot.x86_64-latest.args | 3 +-
...tdev-usb-address-device.x86_64-latest.args | 3 +-
.../hostdev-usb-address.x86_64-latest.args | 3 +-
.../hugepages-default-2M.x86_64-latest.args | 3 +-
...ges-default-system-size.x86_64-latest.args | 3 +-
.../hugepages-default.x86_64-latest.args | 3 +-
.../hugepages-memaccess.x86_64-latest.args | 3 +-
.../hugepages-memaccess2.x86_64-latest.args | 3 +-
.../hugepages-memaccess3.x86_64-latest.args | 3 +-
.../hugepages-nodeset.x86_64-latest.args | 3 +-
...gepages-numa-default-2M.x86_64-latest.args | 3 +-
...pages-numa-default-dimm.x86_64-latest.args | 3 +-
.../hugepages-numa-default.x86_64-latest.args | 3 +-
...pages-numa-nodeset-part.x86_64-latest.args | 3 +-
.../hugepages-numa-nodeset.x86_64-latest.args | 3 +-
.../hugepages-nvdimm.x86_64-latest.args | 3 +-
.../hugepages-shared.x86_64-latest.args | 3 +-
.../hyperv-off.x86_64-latest.args | 2 +-
.../hyperv-panic.x86_64-latest.args | 2 +-
.../hyperv-passthrough.x86_64-6.1.0.args | 2 +-
.../hyperv-passthrough.x86_64-latest.args | 2 +-
.../hyperv-stimer-direct.x86_64-latest.args | 2 +-
.../hyperv.x86_64-latest.args | 2 +-
.../input-linux.x86_64-latest.args | 3 +-
.../intel-iommu-aw-bits.x86_64-latest.args | 3 +-
...ntel-iommu-caching-mode.x86_64-latest.args | 3 +-
...ntel-iommu-device-iotlb.x86_64-latest.args | 3 +-
.../intel-iommu-eim.x86_64-latest.args | 3 +-
.../intel-iommu.x86_64-latest.args | 3 +-
.../iommu-smmuv3.aarch64-latest.args | 3 +-
...othreads-ids-pool-sizes.x86_64-latest.args | 3 +-
...othreads-virtio-scsi-pci.x86_64-5.2.0.args | 3 +-
...threads-virtio-scsi-pci.x86_64-latest.args | 3 +-
.../kvmclock+eoi-disabled.x86_64-latest.args | 2 +-
...nch-security-sev-direct.x86_64-latest.args | 3 +-
...ev-missing-platform-info.x86_64-6.0.0.args | 3 +-
.../launch-security-sev.x86_64-6.0.0.args | 3 +-
.../luks-disks-source-qcow2.x86_64-5.2.0.args | 3 +-
...luks-disks-source-qcow2.x86_64-latest.args | 3 +-
.../luks-disks-source.x86_64-latest.args | 3 +-
.../luks-disks.x86_64-latest.args | 3 +-
.../machine-smm-off.x86_64-latest.args | 3 +-
.../machine-smm-on.x86_64-latest.args | 3 +-
...memory-default-hugepage.x86_64-latest.args | 3 +-
.../memfd-memory-numa.x86_64-latest.args | 3 +-
...emory-hotplug-dimm-addr.x86_64-latest.args | 3 +-
...y-hotplug-nvdimm-access.x86_64-latest.args | 3 +-
...ory-hotplug-nvdimm-align.x86_64-5.2.0.args | 3 +-
...ry-hotplug-nvdimm-align.x86_64-latest.args | 3 +-
...ory-hotplug-nvdimm-label.x86_64-5.2.0.args | 3 +-
...ry-hotplug-nvdimm-label.x86_64-latest.args | 3 +-
...mory-hotplug-nvdimm-pmem.x86_64-5.2.0.args | 3 +-
...ory-hotplug-nvdimm-pmem.x86_64-latest.args | 3 +-
...-hotplug-nvdimm-readonly.x86_64-5.2.0.args | 3 +-
...hotplug-nvdimm-readonly.x86_64-latest.args | 3 +-
.../memory-hotplug-nvdimm.x86_64-latest.args | 3 +-
...mory-hotplug-virtio-mem.x86_64-latest.args | 3 +-
...mory-hotplug-virtio-pmem.x86_64-5.2.0.args | 3 +-
...ory-hotplug-virtio-pmem.x86_64-latest.args | 3 +-
.../misc-no-reboot.x86_64-5.2.0.args | 3 +-
.../misc-no-reboot.x86_64-latest.args | 3 +-
.../mlock-off.x86_64-latest.args | 3 +-
.../mlock-on.x86_64-latest.args | 3 +-
.../name-escape.x86_64-latest.args | 3 +-
.../net-user-passt.x86_64-7.2.0.args | 3 +-
.../net-user-passt.x86_64-latest.args | 3 +-
.../net-user.x86_64-latest.args | 3 +-
.../net-vdpa-multiqueue.x86_64-latest.args | 3 +-
.../net-vdpa.x86_64-latest.args | 3 +-
.../net-vhostuser.x86_64-latest.args | 3 +-
.../net-virtio-rss.x86_64-latest.args | 3 +-
.../numatune-hmat.x86_64-latest.args | 2 +-
...emnode-restrictive-mode.x86_64-latest.args | 3 +-
.../numatune-memnode.x86_64-5.2.0.args | 3 +-
.../numatune-memnode.x86_64-latest.args | 3 +-
.../numatune-system-memory.x86_64-latest.args | 3 +-
.../pages-dimm-discard.x86_64-latest.args | 3 +-
...pages-discard-hugepages.x86_64-latest.args | 3 +-
.../pages-discard.x86_64-latest.args | 3 +-
.../panic-double.x86_64-latest.args | 2 +-
.../panic-no-address.x86_64-latest.args | 3 +-
.../qemuxml2argvdata/panic.x86_64-latest.args | 3 +-
...arallel-parport-chardev.x86_64-latest.args | 3 +-
.../parallel-tcp-chardev.x86_64-latest.args | 3 +-
.../parallel-unix-chardev.x86_64-latest.args | 3 +-
...pi-root-hotplug-disable.x86_64-latest.args | 3 +-
...cpi-root-hotplug-enable.x86_64-latest.args | 3 +-
.../pci-serial-dev-chardev.x86_64-latest.args | 3 +-
...e-expander-bus-aarch64.aarch64-latest.args | 3 +-
...cie-root-port-nohotplug.x86_64-latest.args | 3 +-
...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 2 +-
...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 2 +-
...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 2 +-
...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 2 +-
...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 2 +-
...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 2 +-
.../ppc64-pseries-graphics.ppc64-latest.args | 2 +-
.../ppc64-pseries-headless.ppc64-latest.args | 2 +-
.../ppc64-tpmproxy-single.ppc64-latest.args | 2 +-
.../ppc64-tpmproxy-with-tpm.ppc64-latest.args | 2 +-
.../pseries-basic.ppc64-latest.args | 2 +-
.../pseries-console-virtio.ppc64-latest.args | 2 +-
...eries-cpu-compat-power10.ppc64-latest.args | 2 +-
...series-cpu-compat-power9.ppc64-latest.args | 2 +-
.../pseries-cpu-compat.ppc64-latest.args | 2 +-
.../pseries-cpu-exact.ppc64-latest.args | 2 +-
.../pseries-cpu-le.ppc64-latest.args | 2 +-
.../pseries-features.ppc64-latest.args | 2 +-
.../pseries-hostdevs-1.ppc64-latest.args | 2 +-
.../pseries-hostdevs-2.ppc64-latest.args | 2 +-
.../pseries-hostdevs-3.ppc64-latest.args | 2 +-
.../pseries-many-buses-1.ppc64-latest.args | 2 +-
.../pseries-many-buses-2.ppc64-latest.args | 2 +-
.../pseries-many-devices.ppc64-latest.args | 2 +-
.../pseries-nvram.ppc64-latest.args | 2 +-
.../pseries-panic-missing.ppc64-latest.args | 2 +-
...pseries-panic-no-address.ppc64-latest.args | 2 +-
...ries-phb-default-missing.ppc64-latest.args | 2 +-
.../pseries-phb-numa-node.ppc64-latest.args | 2 +-
.../pseries-phb-simple.ppc64-latest.args | 2 +-
.../pseries-serial-native.ppc64-latest.args | 2 +-
.../pseries-serial-pci.ppc64-latest.args | 2 +-
.../pseries-serial-usb.ppc64-latest.args | 2 +-
.../pseries-usb-default.ppc64-latest.args | 2 +-
.../pseries-usb-kbd.ppc64-latest.args | 2 +-
.../pseries-usb-multi.ppc64-latest.args | 2 +-
...series-vio-user-assigned.ppc64-latest.args | 2 +-
.../pseries-vio.ppc64-latest.args | 2 +-
.../pv-spinlock-disabled.x86_64-latest.args | 2 +-
.../pv-spinlock-enabled.x86_64-latest.args | 2 +-
.../pvpanic-pci-aarch64.aarch64-latest.args | 2 +-
...pci-no-address-aarch64.aarch64-latest.args | 2 +-
.../pvpanic-pci-x86_64.x86_64-latest.args | 3 +-
...q35-default-devices-only.x86_64-4.2.0.args | 3 +-
...35-default-devices-only.x86_64-latest.args | 3 +-
.../q35-multifunction.x86_64-4.2.0.args | 3 +-
.../q35-multifunction.x86_64-latest.args | 3 +-
.../q35-pcie-autoadd.x86_64-4.2.0.args | 3 +-
.../q35-pcie-autoadd.x86_64-latest.args | 3 +-
.../q35-pcie.x86_64-4.2.0.args | 3 +-
.../q35-pcie.x86_64-latest.args | 3 +-
.../q35-virt-manager-basic.x86_64-4.2.0.args | 2 +-
.../q35-virt-manager-basic.x86_64-latest.args | 2 +-
.../qemu-ns.x86_64-latest.args | 3 +-
.../serial-debugcon.x86_64-latest.args | 3 +-
...rial-dev-chardev-iobase.x86_64-latest.args | 3 +-
.../serial-dev-chardev.x86_64-latest.args | 3 +-
.../serial-file-chardev.x86_64-latest.args | 3 +-
.../serial-file-log.x86_64-latest.args | 3 +-
.../serial-many-chardev.x86_64-latest.args | 3 +-
.../serial-pty-chardev.x86_64-latest.args | 3 +-
.../serial-spiceport.x86_64-latest.args | 3 +-
.../serial-tcp-chardev.x86_64-latest.args | 3 +-
...rial-tcp-telnet-chardev.x86_64-latest.args | 3 +-
...p-tlsx509-chardev-notls.x86_64-latest.args | 3 +-
...-tlsx509-chardev-verify.x86_64-latest.args | 3 +-
...ial-tcp-tlsx509-chardev.x86_64-latest.args | 3 +-
...-tlsx509-secret-chardev.x86_64-latest.args | 3 +-
.../serial-udp-chardev.x86_64-latest.args | 3 +-
.../serial-unix-chardev.x86_64-latest.args | 3 +-
.../serial-vc-chardev.x86_64-latest.args | 3 +-
.../sgx-epc.x86_64-7.0.0.args | 3 +-
...rtcard-passthrough-unix.x86_64-latest.args | 3 +-
.../tpm-emulator-spapr.ppc64-latest.args | 2 +-
.../tpm-emulator-tpm2-enc.x86_64-latest.args | 2 +-
...pm-emulator-tpm2-pstate.x86_64-latest.args | 2 +-
.../tpm-emulator-tpm2.x86_64-latest.args | 2 +-
.../tpm-emulator.x86_64-latest.args | 2 +-
.../tpm-external.x86_64-latest.args | 2 +-
.../tpm-passthrough-crb.x86_64-latest.args | 2 +-
.../tpm-passthrough.x86_64-latest.args | 2 +-
.../tseg-explicit-size.x86_64-latest.args | 3 +-
.../usb-redir-unix.x86_64-latest.args | 3 +-
.../user-aliases-usb.x86_64-latest.args | 2 +-
.../user-aliases.x86_64-latest.args | 2 +-
.../user-aliases2.x86_64-latest.args | 3 +-
...vhost-user-fs-fd-memory.x86_64-latest.args | 3 +-
...vhost-user-fs-hugepages.x86_64-latest.args | 2 +-
...host-user-gpu-secondary.x86_64-latest.args | 3 +-
.../vhost-user-vga.x86_64-latest.args | 3 +-
.../vhost-vsock-auto.x86_64-latest.args | 3 +-
.../vhost-vsock.x86_64-latest.args | 3 +-
...eo-bochs-display-device.x86_64-latest.args | 3 +-
...video-qxl-device-vram64.x86_64-latest.args | 3 +-
...o-qxl-sec-device-vram64.x86_64-latest.args | 3 +-
...eo-ramfb-display-device.x86_64-latest.args | 3 +-
...video-virtio-vga-gpu-gl.x86_64-latest.args | 3 +-
.../virtio-9p-createmode.x86_64-latest.args | 3 +-
.../virtio-9p-multidevs.x86_64-latest.args | 3 +-
.../virtio-iommu-aarch64.aarch64-latest.args | 2 +-
.../virtio-iommu-x86_64.x86_64-latest.args | 2 +-
.../virtio-lun.x86_64-latest.args | 3 +-
...virtio-non-transitional.x86_64-latest.args | 3 +-
...-options-controller-ats.x86_64-latest.args | 3 +-
...ptions-controller-iommu.x86_64-latest.args | 3 +-
...tions-controller-packed.x86_64-latest.args | 3 +-
...virtio-options-disk-ats.x86_64-latest.args | 3 +-
...rtio-options-disk-iommu.x86_64-latest.args | 3 +-
...tio-options-disk-packed.x86_64-latest.args | 3 +-
.../virtio-options-fs-ats.x86_64-latest.args | 3 +-
...virtio-options-fs-iommu.x86_64-latest.args | 3 +-
...irtio-options-fs-packed.x86_64-latest.args | 3 +-
...irtio-options-input-ats.x86_64-latest.args | 3 +-
...tio-options-input-iommu.x86_64-latest.args | 3 +-
...io-options-input-packed.x86_64-latest.args | 3 +-
...-options-memballoon-ats.x86_64-latest.args | 3 +-
...loon-freepage-reporting.x86_64-latest.args | 3 +-
...ptions-memballoon-iommu.x86_64-latest.args | 3 +-
...tions-memballoon-packed.x86_64-latest.args | 3 +-
.../virtio-options-net-ats.x86_64-latest.args | 3 +-
...irtio-options-net-iommu.x86_64-latest.args | 3 +-
...rtio-options-net-packed.x86_64-latest.args | 3 +-
.../virtio-options-rng-ats.x86_64-latest.args | 3 +-
...irtio-options-rng-iommu.x86_64-latest.args | 3 +-
...rtio-options-rng-packed.x86_64-latest.args | 3 +-
...irtio-options-video-ats.x86_64-latest.args | 3 +-
...tio-options-video-iommu.x86_64-latest.args | 3 +-
...io-options-video-packed.x86_64-latest.args | 3 +-
.../virtio-options.x86_64-latest.args | 3 +-
.../virtio-rng-builtin.x86_64-5.2.0.args | 3 +-
.../virtio-rng-builtin.x86_64-latest.args | 3 +-
.../virtio-rng-egd-unix.x86_64-5.2.0.args | 3 +-
.../virtio-rng-egd-unix.x86_64-latest.args | 3 +-
.../virtio-transitional.x86_64-latest.args | 3 +-
.../watchdog-device.x86_64-latest.args | 3 +-
.../watchdog-dump.x86_64-latest.args | 3 +-
.../watchdog-injectnmi.x86_64-latest.args | 3 +-
.../watchdog-q35-multiple.x86_64-latest.args | 3 +-
.../watchdog.x86_64-latest.args | 3 +-
.../x86-kvm-32-on-64.x86_64-latest.args | 3 +-
...-default-cpu-kvm-pc-4.2.x86_64-latest.args | 2 +-
...default-cpu-kvm-q35-4.2.x86_64-latest.args | 2 +-
...efault-cpu-tcg-features.x86_64-latest.args | 2 +-
...-default-cpu-tcg-pc-4.2.x86_64-latest.args | 2 +-
...default-cpu-tcg-q35-4.2.x86_64-latest.args | 2 +-
.../x86_64-pc-graphics.x86_64-latest.args | 2 +-
.../x86_64-pc-headless.x86_64-latest.args | 2 +-
.../x86_64-q35-graphics.x86_64-latest.args | 2 +-
.../x86_64-q35-headless.x86_64-latest.args | 2 +-
tests/testutilsqemu.c | 9 +-
485 files changed, 1044 insertions(+), 1145 deletions(-)
--
2.39.2
1 year, 10 months
[PATCH] hostdev:Introduce vDPA device to hostdev subsystem as a new subtype
by libai
The following is the xml of vdpa device:
<devices>
<hostdev mode='subsystem' type='vdpa'>
<source dev='/dev/vhost-vdpa-0'/>
</hostdev>
</devices>
And the command line passed to QEMU is as follows:
-device {"driver":"vhost-vdpa-device-pci","vhostdev":"/dev/vhost-vdpa-0"}
This solution is selected according to the previous discussion
on the solution of supporting the vDPA device.
For details, see the following:
https://listman.redhat.com/archives/libvir-list/2023-March/239018.html
Signed-off-by: libai <libai12(a)huawei.com>
---
src/conf/domain_audit.c | 4 +++
src/conf/domain_conf.c | 47 +++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 6 +++++
src/conf/domain_validate.c | 1 +
src/conf/virconftypes.h | 2 ++
src/qemu/qemu_command.c | 19 +++++++++++++
src/qemu/qemu_command.h | 3 +++
src/qemu/qemu_domain.c | 6 +++++
src/qemu/qemu_hotplug.c | 1 +
src/qemu/qemu_migration.c | 2 ++
src/qemu/qemu_validate.c | 2 ++
src/security/security_dac.c | 2 ++
src/security/security_selinux.c | 2 ++
13 files changed, 97 insertions(+)
diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index ae875188bd..6906ce7ade 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -344,6 +344,7 @@ virDomainAuditHostdev(virDomainObj *vm, virDomainHostdevDef *hostdev,
virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIVHost *hostsrc = &hostdev->source.subsys.u.scsi_host;
virDomainHostdevSubsysMediatedDev *mdevsrc = &hostdev->source.subsys.u.mdev;
+ virDomainHostdevSubsysVDPA *vdpasrc = &hostdev->source.subsys.u.vdpa;
virUUIDFormat(vm->def->uuid, uuidstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -383,6 +384,9 @@ virDomainAuditHostdev(virDomainObj *vm, virDomainHostdevDef *hostdev,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
address = g_strdup(mdevsrc->uuidstr);
break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ address = g_strdup(vdpasrc->devpath);
+ break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
default:
VIR_WARN("Unexpected hostdev type while encoding audit message: %d",
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b03a3ff011..e8f6d1457b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1047,6 +1047,7 @@ VIR_ENUM_IMPL(virDomainHostdevSubsys,
"scsi",
"scsi_host",
"mdev",
+ "vdpa",
);
VIR_ENUM_IMPL(virDomainHostdevSubsysPCIBackend,
@@ -2641,6 +2642,9 @@ virDomainHostdevDefClear(virDomainHostdevDef *def)
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
g_clear_pointer(&def->source.subsys.u.pci.origstates, virBitmapFree);
break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ VIR_FREE(def->source.subsys.u.vdpa.devpath);
+ break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
@@ -6160,6 +6164,22 @@ virDomainHostdevSubsysMediatedDevDefParseXML(virDomainHostdevDef *def,
return 0;
}
+static int
+virDomainHostdevSubsysVDPADefParseXML(xmlNodePtr sourcenode,
+ virDomainHostdevDef *def)
+{
+ g_autofree char *devpath = NULL;
+ virDomainHostdevSubsysVDPA *vdpa = &def->source.subsys.u.vdpa;
+
+ if(!(devpath = virXMLPropString(sourcenode, "dev"))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Missing 'dev' attribute for element <source>"));
+ return -1;
+ }
+ vdpa->devpath = g_steal_pointer(&devpath);
+ return 0;
+}
+
static int
virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
xmlXPathContextPtr ctxt,
@@ -6317,6 +6337,11 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
if (virDomainHostdevSubsysMediatedDevDefParseXML(def, ctxt) < 0)
return -1;
break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ if (virDomainHostdevSubsysVDPADefParseXML(sourcenode, def) < 0) {
+ return -1;
+ }
+ break;
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -12979,6 +13004,7 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xmlopt,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
break;
}
@@ -14101,6 +14127,13 @@ virDomainHostdevMatchSubsys(virDomainHostdevDef *a,
return 0;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
return virDomainHostdevMatchSubsysMediatedDev(a, b);
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ if (STREQ(a->source.subsys.u.vdpa.devpath,
+ b->source.subsys.u.vdpa.devpath)) {
+ return 1;
+ } else {
+ return 0;
+ }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
return 0;
}
@@ -23290,6 +23323,16 @@ virDomainHostdevDefFormatSubsysMdev(virBuffer *buf,
virXMLFormatElement(buf, "source", NULL, &sourceChildBuf);
}
+static void
+virDomainHostdevDefFormatSubsysVDPA(virBuffer *buf,
+ virDomainHostdevDef *def)
+{
+ g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
+ virDomainHostdevSubsysVDPA *vdpasrc = &def->source.subsys.u.vdpa;
+ virBufferAsprintf(&sourceAttrBuf, " dev='%s'", vdpasrc->devpath);
+ virXMLFormatElement(buf, "source", &sourceAttrBuf, NULL);
+}
+
static int
virDomainHostdevDefFormatSubsys(virBuffer *buf,
@@ -23317,6 +23360,10 @@ virDomainHostdevDefFormatSubsys(virBuffer *buf,
virDomainHostdevDefFormatSubsysMdev(buf, def);
return 0;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ virDomainHostdevDefFormatSubsysVDPA(buf, def);
+ return 0;
+
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
default:
virReportEnumRangeError(virDomainHostdevSubsysType, def->source.subsys.type);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 511067a050..ade8b0edec 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -197,6 +197,7 @@ typedef enum {
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI,
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST,
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV,
+ VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA,
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST
} virDomainHostdevSubsysType;
@@ -289,6 +290,10 @@ struct _virDomainHostdevSubsysMediatedDev {
virTristateSwitch ramfb;
};
+struct _virDomainHostdevSubsysVDPA {
+ char *devpath; /* vDPA device path */
+};
+
typedef enum {
VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_NONE,
VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST,
@@ -323,6 +328,7 @@ struct _virDomainHostdevSubsys {
virDomainHostdevSubsysSCSI scsi;
virDomainHostdevSubsysSCSIVHost scsi_host;
virDomainHostdevSubsysMediatedDev mdev;
+ virDomainHostdevSubsysVDPA vdpa;
} u;
};
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index e04b85fee4..4af84c4f0c 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -2214,6 +2214,7 @@ virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev)
}
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
break;
}
diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h
index e07f967814..1756c54e7a 100644
--- a/src/conf/virconftypes.h
+++ b/src/conf/virconftypes.h
@@ -120,6 +120,8 @@ typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMediatedDev;
+typedef struct _virDomainHostdevSubsysVDPA virDomainHostdevSubsysVDPA;
+
typedef struct _virDomainHostdevSubsysPCI virDomainHostdevSubsysPCI;
typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 4ca93bf3dc..121214f4d5 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4958,6 +4958,18 @@ qemuBuildHostdevMediatedDevProps(const virDomainDef *def,
return g_steal_pointer(&props);
}
+virJSONValue *
+qemuBuildHostdevVDPADevProps(virDomainHostdevDef *dev)
+{
+ g_autoptr(virJSONValue) props = NULL;
+ virDomainHostdevSubsysVDPA *vdpasrc = &dev->source.subsys.u.vdpa;
+ if (virJSONValueObjectAdd(&props,
+ "s:driver", "vhost-vdpa-device-pci",
+ "s:vhostdev", vdpasrc->devpath,
+ NULL) < 0)
+ return NULL;
+ return g_steal_pointer(&props);
+}
qemuBlockStorageSourceAttachData *
qemuBuildHostdevSCSIDetachPrepare(virDomainHostdevDef *hostdev,
@@ -5154,6 +5166,13 @@ qemuBuildHostdevCommandLine(virCommand *cmd,
return -1;
break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ if (!(devprops = qemuBuildHostdevVDPADevProps(hostdev)))
+ return -1;
+ if (qemuBuildDeviceCommandlineFromJSON(cmd, devprops, def, qemuCaps) < 0)
+ return -1;
+ break;
+
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index 5fdb138030..dff18350b5 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -198,6 +198,9 @@ virJSONValue *
qemuBuildHostdevMediatedDevProps(const virDomainDef *def,
virDomainHostdevDef *dev);
+virJSONValue *
+qemuBuildHostdevVDPADevProps(virDomainHostdevDef *dev);
+
virJSONValue *
qemuBuildRedirdevDevProps(const virDomainDef *def,
virDomainRedirdevDef *dev);
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 63b13b6875..0cd485a459 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -10533,6 +10533,8 @@ qemuDomainGetHostdevPath(virDomainHostdevDef *dev,
virDomainHostdevSubsysSCSI *scsisrc = &dev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIVHost *hostsrc = &dev->source.subsys.u.scsi_host;
virDomainHostdevSubsysMediatedDev *mdevsrc = &dev->source.subsys.u.mdev;
+ virDomainHostdevSubsysVDPA *vdpasrc = &dev->source.subsys.u.vdpa;
+
g_autoptr(virUSBDevice) usb = NULL;
g_autoptr(virSCSIDevice) scsi = NULL;
g_autoptr(virSCSIVHostDevice) host = NULL;
@@ -10603,6 +10605,10 @@ qemuDomainGetHostdevPath(virDomainHostdevDef *dev,
if (!(tmpPath = virMediatedDeviceGetIOMMUGroupDev(mdevsrc->uuidstr)))
return -1;
+ perm = VIR_CGROUP_DEVICE_RW;
+ break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ tmpPath = g_strdup(vdpasrc->devpath);
perm = VIR_CGROUP_DEVICE_RW;
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 5072798cb7..7d89899223 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -4546,6 +4546,7 @@ qemuDomainRemoveHostDevice(virQEMUDriver *driver,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
qemuDomainRemoveMediatedDevice(driver, vm, hostdev);
break;
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
break;
}
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index ed41a03851..9220ef1ab1 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1295,6 +1295,8 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
+ /* The vDPA devices don't support migration for now */
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("cannot migrate a domain with <hostdev mode='subsystem' type='%1$s'>"),
virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type));
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index b8d5e9bd74..ea3d4e1a39 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -2566,6 +2566,8 @@ qemuValidateDomainDeviceDefHostdev(const virDomainHostdevDef *hostdev,
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
return qemuValidateDomainMdevDef(hostdev, def, qemuCaps);
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
+ break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
default:
virReportEnumRangeError(virDomainHostdevSubsysType,
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
index c7dc145621..24f3de5d15 100644
--- a/src/security/security_dac.c
+++ b/src/security/security_dac.c
@@ -1313,6 +1313,7 @@ virSecurityDACSetHostdevLabel(virSecurityManager *mgr,
break;
}
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
ret = 0;
break;
@@ -1469,6 +1470,7 @@ virSecurityDACRestoreHostdevLabel(virSecurityManager *mgr,
break;
}
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
ret = 0;
break;
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
index e3e6a6115f..5cb6612fbc 100644
--- a/src/security/security_selinux.c
+++ b/src/security/security_selinux.c
@@ -2265,6 +2265,7 @@ virSecuritySELinuxSetHostdevSubsysLabel(virSecurityManager *mgr,
break;
}
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
ret = 0;
break;
@@ -2493,6 +2494,7 @@ virSecuritySELinuxRestoreHostdevSubsysLabel(virSecurityManager *mgr,
break;
}
+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_VDPA:
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
ret = 0;
break;
--
2.33.0
1 year, 10 months
[PATCH 0/4] conf, qemu: add loader type='none'
by Daniel Henrique Barboza
Hi,
Fedora Rawhide for RISC-V requires '-bios none' to properly boot
because its kernel is overwriting the default OpenSBI binary QEMU uses,
causing the following error:
$ sudo ./run tools/virsh start --console riscv-fedora
error: Failed to start domain 'riscv-fedora'
error: internal error: process exited while connecting to monitor: 2023-03-20T17:31:02.650862Z qemu-system-riscv64: Some ROM regions are overlapping
These ROM regions might have been loaded by direct user request or by default.
They could be BIOS/firmware images, a guest kernel, initrd or some other file loaded into guest memory.
Check whether you intended to load all this guest code, and whether it has been built to load to the correct addresses.
Other archs, such as PPC64 pseries, also requires "-bios none" if the
user wants QEMU to not load any default firmware.
At this moment libvirt doesn't support this option in the official API,
meaning we need to go to the <qemu:commandline> route to allow the
domain to boot, tainting it. And with a chance of weird interactions
with firmware autoselect.
These patches add official XML support for '-bios none' for QEMU domains
using a XML as follows:
<os>
<loader type='none'/>
(...)
</os>
The pre-conditions of this format are (1) no loader->path and (2) only
manual autoselect. Everything else is already covered by libvirt as
corner cases of existing firmware features.
Daniel Henrique Barboza (4):
conf: add loader type 'none'
qemu: handle bios 'none' case in qemuFirmwareFillDomain()
qemu, tests: add -bios none command line
docs: Document loader 'none' attribute
docs/formatdomain.rst | 7 +++++
src/conf/domain_conf.c | 5 +--
src/conf/domain_validate.c | 2 +-
src/conf/schemas/domaincommon.rng | 1 +
src/qemu/qemu_command.c | 6 ++++
src/qemu/qemu_firmware.c | 10 ++++++
.../firmware-bios-none.riscv64-latest.args | 31 +++++++++++++++++++
tests/qemuxml2argvdata/firmware-bios-none.xml | 18 +++++++++++
tests/qemuxml2argvtest.c | 2 ++
9 files changed, 79 insertions(+), 3 deletions(-)
create mode 100644 tests/qemuxml2argvdata/firmware-bios-none.riscv64-latest.args
create mode 100644 tests/qemuxml2argvdata/firmware-bios-none.xml
--
2.39.2
1 year, 10 months
[PATCH V3 0/3] migration: add qemu parallel migration options
by Jiang Jiacheng
Add compress method zlib and zstd for parallel migration and new
migration options to set qemu's parameter related with parallel
migration(multifd-compression, multifd-zlib-level and multifd-zstd-level).
These parameters has been supported by QEMU since 5.0.
v3 of:
https://listman.redhat.com/archives/libvir-list/2023-February/237604.html
diff to v2:
* merge the processing of new method into 'qemuMigrationParamsSetCompression'
* improve descriptions for the new options.
Jiang Jiacheng (3):
Add public API for parallel compression method
virsh: Add migrate options to set parallel compress level
qemu: support set parallel migration compression method
docs/manpages/virsh.rst | 29 ++++++++----
include/libvirt/libvirt-domain.h | 30 ++++++++++--
src/qemu/qemu_migration.h | 2 +
src/qemu/qemu_migration_params.c | 80 +++++++++++++++++++++++++++++++-
src/qemu/qemu_migration_params.h | 3 ++
tools/virsh-domain.c | 26 +++++++++++
6 files changed, 156 insertions(+), 14 deletions(-)
--
2.33.0
1 year, 11 months
[PATCH 0/1] fix risc-v QEMU domains in non-RISC-V hosts
by Daniel Henrique Barboza
Hi,
For some reason didn't notice this was broken until recently. We're
missing an API in the RISC-V CPU driver to allow QEMU TCG risc-v domains
to run in non-native hosts.
Daniel Henrique Barboza (1):
cpu_riscv64.c: add update() implementation
src/cpu/cpu_riscv64.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
--
2.40.0
1 year, 11 months
[PATCH v3 00/10] Deprecate/rename singlestep command line option, monitor interfaces
by Peter Maydell
The command line option '-singlestep' and its HMP equivalent
the 'singlestep' command are very confusingly named, because
they have nothing to do with single-stepping the guest (either
via the gdb stub or by emulation of guest CPU architectural
debug facilities). What they actually do is put TCG into a
mode where it puts only one guest instruction into each
translation block. This is useful for some circumstances
such as when you want the -d debug logging to be easier to
interpret, or if you have a finicky guest binary that wants
to see interrupts delivered at something other than the end
of a basic block.
The confusing name is made worse by the fact that our
documentation for these is so minimal as to be useless
for telling users what they really do.
This series:
* changes the command line interface: for user-mode
emulators, the new option is '-one-insn-per-tb',
and for system mode emulators it is a TCG accel
property '-accel tcg,one-insn-per-tb=on'
* updates all the places which currently directly touch
the 'singlestep' global variable to instead get the
current accelerator and query/set the QOM property
(except the one internal to TCG itself in curr_cflags())
* documents that the old -singlestep option is deprecated
* adds a new HMP command 'one-insn-per-tb', and deprecates
the old 'singlestep' command. (Strictly we don't need to
deprecate HMP commands, but I'd already written the code
for v1 of this series and it's a minor user convenience.)
* moves the 'is one-insn-per-tb on?' info from 'info status'
to 'info jit'
* deprecates the 'singlestep' member of the QMP StatusInfo
type, with no replacement. (We have a sketch of a design
of how we might provide this in QMP if we need to, but
I'm pretty sure nobody using QMP is actually using the
info in the 'singlestep' field, especially since it's
always been wrongly documented and there's no write
interface, only a read one.)
Changes v2->v3:
* curr_cflags() is a hot path, so use a global variable
so it doesn't have to fetch the current accelerator object.
(NB: I haven't done the tcg_global_cflags thing suggested
in review of v2; justification in the below-the-fold part
of the patch 3 commit message notes.)
* put the new line in test-hmp.c in its proper alphabetical
order place in patch 8
* in patch 10 don't provide a replacement field in the
QMP StatusInfo type, just deprecate the old one
* I finally tested that bsd-user compiles, and fixed the
missing-close-bracket error in that patch :-)
Patches still needing review: 3, 7, 10
thanks
-- PMM
Peter Maydell (10):
make one-insn-per-tb an accel option
softmmu: Don't use 'singlestep' global in QMP and HMP commands
accel/tcg: Use one_insn_per_tb global instead of old singlestep global
linux-user: Add '-one-insn-per-tb' option equivalent to '-singlestep'
bsd-user: Add '-one-insn-per-tb' option equivalent to '-singlestep'
Document that -singlestep command line option is deprecated
accel/tcg: Report one-insn-per-tb in 'info jit', not 'info status'
hmp: Add 'one-insn-per-tb' command equivalent to 'singlestep'
qapi/run-state.json: Fix missing newline at end of file
hmp: Deprecate 'singlestep' member of StatusInfo
docs/about/deprecated.rst | 39 +++++++++++++++++++++++++++++++++++++
docs/user/main.rst | 14 +++++++++++--
qapi/run-state.json | 16 +++++++++++----
accel/tcg/internal.h | 2 ++
include/exec/cpu-common.h | 2 --
include/monitor/hmp.h | 2 +-
accel/tcg/cpu-exec.c | 2 +-
accel/tcg/monitor.c | 14 +++++++++++++
accel/tcg/tcg-all.c | 23 ++++++++++++++++++++++
bsd-user/main.c | 14 ++++++++-----
linux-user/main.c | 18 +++++++++++------
softmmu/globals.c | 1 -
softmmu/runstate-hmp-cmds.c | 25 ++++++++++++++++++------
softmmu/runstate.c | 10 +++++++++-
softmmu/vl.c | 17 ++++++++++++++--
tests/qtest/test-hmp.c | 1 +
hmp-commands.hx | 25 ++++++++++++++++++++----
qemu-options.hx | 12 ++++++++++--
tcg/tci/README | 2 +-
19 files changed, 201 insertions(+), 38 deletions(-)
--
2.34.1
1 year, 11 months