From 324b576c0c16e52d068debac8dea50bbb104f24a Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 13 Aug 2019 17:10:50 +0200 Subject: [PATCH] virpcimock: Create symlink in /sys/kernel/iommu_groups/N/devices dir So far, we don't need to create anything under /sys/kernel/iommu_groups/N/devices directory (which is symlinked from /sys/bus/pci/devices/DDDD:BB:DD.F/iommu_group directory) because virhostdevtest still tests the old KVM assignment and thus has no notion of IOMMU groups. This will change in near future though. And in order to discover devices belonging to the same IOMMU group we need to do what kernel does - create symlinks to devices. Signed-off-by: Michal Privoznik Tested-by: Daniel Henrique Barboza Reviewed-by: Daniel Henrique Barboza --- tests/virpcimock.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/tests/virpcimock.c b/tests/virpcimock.c index 80ef4809ab..09a6c648af 100644 --- a/tests/virpcimock.c +++ b/tests/virpcimock.c @@ -401,6 +401,30 @@ pci_device_get_path(const struct pciDevice *dev, } +static void +pci_device_create_iommu(const struct pciDevice *dev, + const char *devid) +{ + VIR_AUTOFREE(char *) iommuPath = NULL; + char tmp[256]; + + if (virAsprintfQuiet(&iommuPath, "%s/sys/kernel/iommu_groups/%d/devices/", + fakerootdir, dev->iommuGroup) < 0) + ABORT_OOM(); + + if (virFileMakePath(iommuPath) < 0) + ABORT("Unable to create: %s", iommuPath); + + if (snprintf(tmp, sizeof(tmp), + "../../../../devices/pci%04x:%02x/%s", + dev->addr.domain, dev->addr.bus, devid) < 0) { + ABORT("@tmp overflow"); + } + + make_symlink(iommuPath, devid, tmp); +} + + static void pci_device_new_from_stub(const struct pciDevice *data) { @@ -481,13 +505,7 @@ pci_device_new_from_stub(const struct pciDevice *data) make_file(devpath, "driver_override", NULL, -1); - if (snprintf(tmp, sizeof(tmp), - "%s/../../../kernel/iommu_groups/%d", - devpath, dev->iommuGroup) < 0) { - ABORT("@tmp overflow"); - } - if (virFileMakePath(tmp) < 0) - ABORT("Unable to create %s", tmp); + pci_device_create_iommu(dev, devid); if (snprintf(tmp, sizeof(tmp), "../../../kernel/iommu_groups/%d", dev->iommuGroup) < 0) {