[libvirt] [PATCH v2] tools/virt-host-validate: Fix IOMMU check on s390x

Michal Privoznik mprivozn at redhat.com
Thu Mar 7 17:15:56 UTC 2019


On 3/1/19 12:10 PM, Thomas Huth wrote:
> When running virt-host-validate on an s390x host, the tool currently warns
> that it is "Unknown if this platform has IOMMU support". We can use the
> common check for entries in /sys/kernel/iommu_groups here, too, but it only
> makes sense to check it if there are also PCI devices available. It's also
> common on s390x that there are no PCI devices assigned to the LPAR, and in
> that case there is no need for the PCI-related IOMMU, so without PCI devices
> we should simply skip this test.
> 
> Signed-off-by: Thomas Huth <thuth at redhat.com>
> ---
>   v2:
>   - Use virDirOpen() + virDirRead() instead of stat() - this should hopefully
>     work now as expected.
> 
>   tools/virt-host-validate-common.c | 22 +++++++++++++++++-----
>   1 file changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
> index 73e3bdb..e27b558 100644
> --- a/tools/virt-host-validate-common.c
> +++ b/tools/virt-host-validate-common.c
> @@ -337,7 +337,12 @@ int virHostValidateIOMMU(const char *hvname,
>       virBitmapPtr flags;
>       struct stat sb;
>       const char *bootarg = NULL;
> -    bool isAMD = false, isIntel = false, isPPC = false;
> +    bool isAMD = false, isIntel = false;
> +    virArch arch = virArchFromHost();
> +    struct dirent *dent;
> +    DIR *dir;
> +    int rc;
> +
>       flags = virHostValidateGetCPUFlags();
>   
>       if (flags && virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_VMX))
> @@ -347,8 +352,6 @@ int virHostValidateIOMMU(const char *hvname,
>   
>       virBitmapFree(flags);
>   
> -    isPPC = ARCH_IS_PPC64(virArchFromHost());
> -
>       if (isIntel) {
>           virHostMsgCheck(hvname, "%s", _("for device assignment IOMMU support"));
>           if (access("/sys/firmware/acpi/tables/DMAR", F_OK) == 0) {
> @@ -373,8 +376,17 @@ int virHostValidateIOMMU(const char *hvname,
>                              "hardware platform");
>               return -1;
>           }
> -    } else if (isPPC) {
> +    } else if (ARCH_IS_PPC64(arch)) {
>           /* Empty Block */
> +    } else if (ARCH_IS_S390(arch)) {
> +        /* On s390x, we skip the IOMMU check if there are no PCI devices
> +         * (which is quite usual on s390x) */
> +        if (!virDirOpen(&dir, "/sys/bus/pci/devices"))
> +            return 0;
> +        rc = virDirRead(dir, &dent, NULL);
> +        VIR_DIR_CLOSE(dir);

Is this diropen and dirread really necessary? I mean, would something 
like plain test of the path presence be okay, e.g. 
virFileExists("/sys/bus/pci/devices").

Michal




More information about the libvir-list mailing list