[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