Unmanaged devices, as the name suggests, are not detached
automatically from the host by libvirt before being attached to a
guest: it's the user's responsability to detach them manually
beforehand. If that preliminary step has not been performed, the
attach operation can't complete successfully.
Instead of relying on the lower layers to error out with cryptic
messages such as
error: Failed to attach device from /tmp/hostdev.xml
error: Path '/dev/vfio/12' is not accessible: No such file or directory
prevent the situation altogether and provide the user with a more
useful error message.
---
src/util/virhostdev.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
index 03c3445..d1529c5 100644
--- a/src/util/virhostdev.c
+++ b/src/util/virhostdev.c
@@ -576,6 +576,13 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
mgr->inactivePCIHostdevs) < 0)
goto reattachdevs;
} else {
+ if (!virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("Unmanaged PCI device %s must be manually "
+ "detached from the host"),
+ virPCIDeviceGetName(pci));
+ goto reattachdevs;
+ }
VIR_DEBUG("Not detaching unmanaged PCI device %s",
virPCIDeviceGetName(pci));
}
--
2.5.0