[PATCH 0/2] Fix bug in qemuDomainPrepareHostdevPCI and reword errors

Peter Krempa (2): qemuDomainPrepareHostdevPCI: Fix return values after conversion from bool to int qemuDomainPrepareHostdevPCI: Simplify error messages src/qemu/qemu_domain.c | 43 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 26 deletions(-) -- 2.49.0

From: Peter Krempa <pkrempa@redhat.com> Historically when the code was in 'qemuHostdevPreparePCIDevicesCheckSupport' the function returned bools. Later it was refactored and moved to 'qemuDomainPrepareHostdevPCI' the return values were not changed. Thus the function now returned '-1', 'false', and 'true'. Callers checked for '-1' only so the few cases forbidding legacy device passthrough were no longer causing fatal errors. Fixes: 3b87709c768480e085556e06bd8d08f62270d42d Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 52da234343..73869fcfac 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9945,28 +9945,28 @@ qemuDomainPrepareHostdevPCI(virDomainHostdevDef *hostdev, if (!supportsPassthroughVFIO) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("host doesn't support VFIO PCI passthrough")); - return false; + return -1; } break; case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_KVM: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("host doesn't support legacy PCI passthrough")); - return false; + return -1; case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_XEN: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("QEMU does not support device assignment mode '%1$s'"), virDeviceHostdevPCIDriverNameTypeToString(*driverName)); - return false; + return -1; default: case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_LAST: virReportEnumRangeError(virDeviceHostdevPCIDriverName, *driverName); - break; + return -1; } - return true; + return 0; } -- 2.49.0

From: Peter Krempa <pkrempa@redhat.com> Rework the error reporting. Unify on one message about device assignment modes not supported by the qemu driver and move and reword the messages for VFIO device assignment. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 73869fcfac..5603feaa05 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9920,40 +9920,19 @@ static int qemuDomainPrepareHostdevPCI(virDomainHostdevDef *hostdev, virQEMUCaps *qemuCaps) { - bool supportsPassthroughVFIO = virHostdevHostSupportsPassthroughVFIO(); virDeviceHostdevPCIDriverName *driverName = &hostdev->source.subsys.u.pci.driver.name; /* assign defaults for hostdev passthrough */ switch (*driverName) { case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_DEFAULT: - if (supportsPassthroughVFIO) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) { - *driverName = VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO; - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("VFIO PCI device assignment is not supported by this version of QEMU")); - return -1; - } - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("host doesn't support passthrough of host PCI devices")); - return -1; - } + /* Since nowadays only VFIO is supported default to it */ + *driverName = VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO; break; case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO: - if (!supportsPassthroughVFIO) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("host doesn't support VFIO PCI passthrough")); - return -1; - } break; case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_KVM: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("host doesn't support legacy PCI passthrough")); - return -1; - case VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_XEN: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("QEMU does not support device assignment mode '%1$s'"), @@ -9966,6 +9945,18 @@ qemuDomainPrepareHostdevPCI(virDomainHostdevDef *hostdev, return -1; } + if (!virHostdevHostSupportsPassthroughVFIO()) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("VFIO PCI device assignment is not supported by the host")); + return -1; + } + + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("VFIO PCI device assignment is not supported by this QEMU binary")); + return -1; + } + return 0; } -- 2.49.0

On 5/12/25 15:30, Peter Krempa via Devel wrote:
Peter Krempa (2): qemuDomainPrepareHostdevPCI: Fix return values after conversion from bool to int qemuDomainPrepareHostdevPCI: Simplify error messages
src/qemu/qemu_domain.c | 43 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 26 deletions(-)
Ooops. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Michal Prívozník
-
Peter Krempa