mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
virpci: Introduce and use virPCIDeviceAddressGetIOMMUGroupDev
Sometimes, we have a PCI address and not fully allocated virPCIDevice and yet we still want to know its /dev/vfio/N path. Introduce virPCIDeviceAddressGetIOMMUGroupDev() function exactly for that. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
parent
cfce298042
commit
081a12aba9
@ -2709,6 +2709,7 @@ virPCIDeviceAddressAsString;
|
||||
virPCIDeviceAddressEqual;
|
||||
virPCIDeviceAddressFree;
|
||||
virPCIDeviceAddressGetIOMMUGroupAddresses;
|
||||
virPCIDeviceAddressGetIOMMUGroupDev;
|
||||
virPCIDeviceAddressGetIOMMUGroupNum;
|
||||
virPCIDeviceAddressGetSysfsFile;
|
||||
virPCIDeviceAddressIOMMUGroupIterate;
|
||||
|
@ -13845,12 +13845,10 @@ qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
||||
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
|
||||
virDomainHostdevSubsysSCSIVHostPtr hostsrc = &dev->source.subsys.u.scsi_host;
|
||||
virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev;
|
||||
g_autoptr(virPCIDevice) pci = NULL;
|
||||
g_autoptr(virUSBDevice) usb = NULL;
|
||||
g_autoptr(virSCSIDevice) scsi = NULL;
|
||||
g_autoptr(virSCSIVHostDevice) host = NULL;
|
||||
g_autofree char *tmpPath = NULL;
|
||||
g_autofree int *tmpPerms = NULL;
|
||||
int perm = 0;
|
||||
|
||||
switch ((virDomainHostdevMode) dev->mode) {
|
||||
@ -13858,14 +13856,7 @@ qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
||||
switch ((virDomainHostdevSubsysType)dev->source.subsys.type) {
|
||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
|
||||
if (pcisrc->backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
|
||||
pci = virPCIDeviceNew(pcisrc->addr.domain,
|
||||
pcisrc->addr.bus,
|
||||
pcisrc->addr.slot,
|
||||
pcisrc->addr.function);
|
||||
if (!pci)
|
||||
return -1;
|
||||
|
||||
if (!(tmpPath = virPCIDeviceGetIOMMUGroupDev(pci)))
|
||||
if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&pcisrc->addr)))
|
||||
return -1;
|
||||
|
||||
perm = VIR_CGROUP_DEVICE_RW;
|
||||
|
@ -1942,6 +1942,21 @@ virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddressPtr addr)
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
virPCIDeviceAddressGetIOMMUGroupDev(const virPCIDeviceAddress *devAddr)
|
||||
{
|
||||
g_autoptr(virPCIDevice) pci = NULL;
|
||||
|
||||
if (!(pci = virPCIDeviceNew(devAddr->domain,
|
||||
devAddr->bus,
|
||||
devAddr->slot,
|
||||
devAddr->function)))
|
||||
return NULL;
|
||||
|
||||
return virPCIDeviceGetIOMMUGroupDev(pci);
|
||||
}
|
||||
|
||||
|
||||
/* virPCIDeviceGetIOMMUGroupDev - return the name of the device used
|
||||
* to control this PCI device's group (e.g. "/dev/vfio/15")
|
||||
*/
|
||||
|
@ -195,6 +195,7 @@ int virPCIDeviceAddressGetIOMMUGroupAddresses(virPCIDeviceAddressPtr devAddr,
|
||||
virPCIDeviceAddressPtr **iommuGroupDevices,
|
||||
size_t *nIommuGroupDevices);
|
||||
int virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddressPtr addr);
|
||||
char *virPCIDeviceAddressGetIOMMUGroupDev(const virPCIDeviceAddress *devAddr);
|
||||
char *virPCIDeviceGetIOMMUGroupDev(virPCIDevicePtr dev);
|
||||
|
||||
int virPCIDeviceIsAssignable(virPCIDevicePtr dev,
|
||||
|
Loading…
Reference in New Issue
Block a user