Blob Blame History Raw
From d39e87ca9292b7382eec78a25423f32e1645f9fa Mon Sep 17 00:00:00 2001
Message-Id: <d39e87ca9292b7382eec78a25423f32e1645f9fa@dist-git>
From: Nitesh Konkar <niteshkonkar.libvirt@gmail.com>
Date: Thu, 17 Aug 2017 19:18:05 +0530
Subject: [PATCH] virt-host-validate: Fix warning for IOMMU detection on PPC

Fix the warning generated on PPC by virt-host-validate for IOMMU.
In case of PPC, IOMMU in the host kernel either has it or it's not
compiled in. The /sys/kernel/iommu_groups check is good enough to
verify if it was compiled with the kernel or not.

Modify the error message when "if (sb.st_nlink <= 2)" to indicate
what the problem would be since there would be no @bootarg.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
(cherry picked from commit 941ec9b6a7ab0ea463ce7dcd2daad858b58cd9ae)

https://bugzilla.redhat.com/show_bug.cgi?id=1485242

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
---
 tools/virt-host-validate-common.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
index 6faed04586..c45dfc5d8c 100644
--- a/tools/virt-host-validate-common.c
+++ b/tools/virt-host-validate-common.c
@@ -35,6 +35,7 @@
 #include "virfile.h"
 #include "virt-host-validate-common.h"
 #include "virstring.h"
+#include "virarch.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
@@ -442,8 +443,7 @@ int virHostValidateIOMMU(const char *hvname,
     virBitmapPtr flags;
     struct stat sb;
     const char *bootarg = NULL;
-    bool isAMD = false, isIntel = false;
-
+    bool isAMD = false, isIntel = false, isPPC = false;
     flags = virHostValidateGetCPUFlags();
 
     if (flags && virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_VMX))
@@ -453,9 +453,10 @@ int virHostValidateIOMMU(const char *hvname,
 
     virBitmapFree(flags);
 
-    virHostMsgCheck(hvname, "%s", _("for device assignment IOMMU support"));
+    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) {
             virHostMsgPass();
             bootarg = "intel_iommu=on";
@@ -467,6 +468,7 @@ int virHostValidateIOMMU(const char *hvname,
             return -1;
         }
     } else if (isAMD) {
+        virHostMsgCheck(hvname, "%s", _("for device assignment IOMMU support"));
         if (access("/sys/firmware/acpi/tables/IVRS", F_OK) == 0) {
             virHostMsgPass();
             bootarg = "iommu=pt iommu=1";
@@ -477,6 +479,8 @@ int virHostValidateIOMMU(const char *hvname,
                            "hardware platform");
             return -1;
         }
+    } else if (isPPC) {
+        /* Empty Block */
     } else {
         virHostMsgFail(level,
                        "Unknown if this platform has IOMMU support");
@@ -493,9 +497,12 @@ int virHostValidateIOMMU(const char *hvname,
 
     virHostMsgCheck(hvname, "%s", _("if IOMMU is enabled by kernel"));
     if (sb.st_nlink <= 2) {
-        virHostMsgFail(level,
-                       "IOMMU appears to be disabled in kernel. "
-                       "Add %s to kernel cmdline arguments", bootarg);
+        if (!isPPC)
+            virHostMsgFail(level,
+                           "IOMMU appears to be disabled in kernel. "
+                           "Add %s to kernel cmdline arguments", bootarg);
+        else
+            virHostMsgFail(level, "IOMMU capability not compiled into kernel.");
         return -1;
     }
     virHostMsgPass();
-- 
2.14.1