[libvirt] [PATCH 13/18] virpcimock: Create symlink in /sys/kernel/iommu_groups/N/devices dir
Daniel Henrique Barboza
danielhb413 at gmail.com
Fri Aug 16 21:10:31 UTC 2019
Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
On 8/14/19 8:57 AM, Michal Privoznik wrote:
> 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 <mprivozn at redhat.com>
> ---
> tests/virpcimock.c | 32 +++++++++++++++++++++++++-------
> 1 file changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/tests/virpcimock.c b/tests/virpcimock.c
> index 0774bf62d9..6f315217e2 100644
> --- a/tests/virpcimock.c
> +++ b/tests/virpcimock.c
> @@ -400,6 +400,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)
> {
> @@ -480,13 +504,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) {
More information about the libvir-list
mailing list