[PATCH] hyperv: Handle long CPU models better.

Dawid Zamirski dzrudy at gmail.com
Thu Apr 8 15:51:05 UTC 2021


Apparenlly exising code was dealing with stripping down Intel CPU models
as reported by Hyper-V host but was still having issues with my AMD CPU
for which Hyper-V returns "AMD FX(tm)-8350 Eight-Core Processor".
Therefore, this patch deals with it by stripping out the "
Processor" part, and if there's another CPU that we don't know of
yet that causes trouble, trim the resulting string to 32 characters
rather than failing as the node info has other information that are
more useful than the model.
---
 src/hyperv/hyperv_driver.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 17f5be1f0d..6e03aa4f18 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -1948,14 +1948,14 @@ hypervNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
         if (STRPREFIX(tmp, "  ")) {
             memmove(tmp, tmp + 1, strlen(tmp + 1) + 1);
             continue;
-        } else if (STRPREFIX(tmp, "(R)") || STRPREFIX(tmp, "(C)")) {
+        } else if (STRCASEPREFIX(tmp, "(R)") || STRCASEPREFIX(tmp, "(C)")) {
             memmove(tmp, tmp + 3, strlen(tmp + 3) + 1);
             continue;
-        } else if (STRPREFIX(tmp, "(TM)")) {
+        } else if (STRCASEPREFIX(tmp, "(TM)")) {
             memmove(tmp, tmp + 4, strlen(tmp + 4) + 1);
             continue;
-        } else if (STRPREFIX(tmp, " @ ")) {
-            /* Remove " @ X.YZGHz" from the end. */
+        } else if (STRPREFIX(tmp, " @ ") || STRPREFIX(tmp, " Processor")) {
+            /* Remove " @ X.YZGHz" or " Processor" from the end. */
             *tmp = '\0';
             break;
         }
@@ -1963,13 +1963,12 @@ hypervNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
         ++tmp;
     }
 
+    /* trim whatever is left to 32 characters - better this than nothing  */
+    processorList->data->Name[31] = '\0';
+
     /* Fill struct */
-    if (virStrcpyStatic(info->model, processorList->data->Name) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("CPU model %s too long for destination"),
-                       processorList->data->Name);
+    if (virStrcpyStatic(info->model, processorList->data->Name) < 0)
         return -1;
-    }
 
     info->memory = computerSystem->data->TotalPhysicalMemory / 1024; /* byte to kilobyte */
     info->mhz = processorList->data->MaxClockSpeed;
-- 
2.31.1




More information about the libvir-list mailing list