mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-24 05:25:18 +00:00
qemu: Don't detach devices if passthrough doesn't work
https://bugzilla.redhat.com/show_bug.cgi?id=1046919 If none (KVM, VFIO) of the supported PCI passthrough methods is known to work on a host, it's better to fail right away with a nice error message rather than letting attachment fail with a more cryptic message such as Failed to bind PCI device '0000:07:05.0' to vfio-pci: No such device Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
d8ab981bdd
commit
df8022721e
@ -11155,6 +11155,8 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
int ret = -1;
|
||||
virNodeDeviceDefPtr def = NULL;
|
||||
char *xml = NULL;
|
||||
bool legacy = qemuHostdevHostSupportsPassthroughLegacy();
|
||||
bool vfio = qemuHostdevHostSupportsPassthroughVFIO();
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
@ -11177,22 +11179,34 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
goto cleanup;
|
||||
|
||||
if (!driverName) {
|
||||
/* prefer vfio */
|
||||
if (qemuHostdevHostSupportsPassthroughVFIO())
|
||||
if (vfio) {
|
||||
driverName = "vfio";
|
||||
else if (qemuHostdevHostSupportsPassthroughLegacy())
|
||||
} else if (legacy) {
|
||||
driverName = "kvm";
|
||||
}
|
||||
|
||||
if (!driverName) {
|
||||
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
_("neither VFIO nor kvm device assignment is "
|
||||
} else {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("neither VFIO nor KVM device assignment is "
|
||||
"currently supported on this system"));
|
||||
goto cleanup;
|
||||
} else if (STREQ(driverName, "vfio")) {
|
||||
}
|
||||
}
|
||||
|
||||
if (STREQ(driverName, "vfio")) {
|
||||
if (!vfio) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
_("VFIO device assignment is currently not "
|
||||
"supported on this system"));
|
||||
goto cleanup;
|
||||
}
|
||||
if (virPCIDeviceSetStubDriver(pci, "vfio-pci") < 0)
|
||||
goto cleanup;
|
||||
} else if (STREQ(driverName, "kvm")) {
|
||||
if (!legacy) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
_("KVM device assignment is currently not "
|
||||
"supported on this system"));
|
||||
goto cleanup;
|
||||
}
|
||||
if (virPCIDeviceSetStubDriver(pci, "pci-stub") < 0)
|
||||
goto cleanup;
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user