On 8/21/23 21:32, Laine Stump wrote: > In the past, the only allowable values for the "driver" field of > virNodeDeviceDetachFlags() were "kvm" or "vfio" for the QEMU driver, > and "xen" for the libxl driver. Then "kvm" was deprecated and removed, > so the driver name became essentially irrelevant (because it is always > called via a particular hypervisor driver, and so the "xen" or "vfio" > can be (and almost always is) implied. > > With the advent of VFIO variant drivers, the ability to explicitly > specify a driver name once again becomes useful - it can be used to > name the exact VFIO driver that we want bound to the device in place > of vfio-pci, so this patch allows those other names to be passed down > the call chain, where the code in virpci.c can make use of them. > > The names "vfio", "kvm", and "xen" retain their special meaning, though: > > 1) because there may be some application or configuration that still > calls virNodeDeviceDetachFlags() with driverName="vfio", this > single value is substituted with the synonym of NULL, which means > "bind the default driver for this device and hypervisor". This > will currently result in the vfio-pci driver being bound to the > device. > > 2) in the case of the libxl driver, "xen" means to use the standard > driver used in the case of Xen ("pciback"). > > 3) "kvm" as a driver name always results in an error, as legacy KVM > device assignment was removed from the kernel around 10 years ago. > > Signed-off-by: Laine Stump <laine@xxxxxxxxxx> > --- > src/hypervisor/domain_driver.c | 9 ++++----- > src/hypervisor/domain_driver.h | 2 ++ > src/libxl/libxl_driver.c | 3 ++- > src/qemu/qemu_driver.c | 33 +++++++++++++++++++-------------- > 4 files changed, 27 insertions(+), 20 deletions(-) > > diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c > index a70f75f3ae..429784292a 100644 > --- a/src/hypervisor/domain_driver.c > +++ b/src/hypervisor/domain_driver.c > @@ -462,6 +462,7 @@ virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev, > int > virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, > virHostdevManager *hostdevMgr, > + virPCIStubDriver driverType, > const char *driverName) > { > g_autoptr(virPCIDevice) pci = NULL; > @@ -471,7 +472,7 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, > g_autoptr(virConnect) nodeconn = NULL; > g_autoptr(virNodeDevice) nodedev = NULL; > > - if (!driverName) > + if (driverType == VIR_PCI_STUB_DRIVER_NONE) > return -1; Even though, we are very unlikely to hit this check, the rest of the function reports an error on error paths. Please virReportError() here too. Michal