Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- src/util/virhostcpu.c | 50 +++++++++++++++++-- .../linux-x86_64-test1.signature | 1 + .../linux-x86_64-test2.signature | 1 + .../linux-x86_64-test3.signature | 1 + .../linux-x86_64-test4.signature | 1 + .../linux-x86_64-test5.signature | 1 + .../linux-x86_64-test6.signature | 1 + .../linux-x86_64-test7.signature | 1 + .../linux-x86_64-test8.signature | 1 + .../linux-x86_64-with-die.signature | 1 + 10 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 tests/virhostcpudata/linux-x86_64-test1.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test2.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test3.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test4.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test5.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test6.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test7.signature create mode 100644 tests/virhostcpudata/linux-x86_64-test8.signature create mode 100644 tests/virhostcpudata/linux-x86_64-with-die.signature diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index bfef022f64..851c0015f7 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -1418,10 +1418,54 @@ virHostCPUGetTscInfo(void) (defined(__linux__) || defined(__FreeBSD__)) */ int -virHostCPUReadSignature(virArch arch G_GNUC_UNUSED, - FILE *cpuinfo G_GNUC_UNUSED, - char **signature G_GNUC_UNUSED) +virHostCPUReadSignature(virArch arch, + FILE *cpuinfo, + char **signature) { + size_t lineLen = 1024; + g_autofree char *line = g_new0(char, lineLen); + g_autofree char *vendor = NULL; + g_autofree char *name = NULL; + g_autofree char *family = NULL; + g_autofree char *model = NULL; + g_autofree char *stepping = NULL; + + if (!ARCH_IS_X86(arch)) + return 0; + + while (fgets(line, lineLen, cpuinfo)) { + g_auto(GStrv) parts = g_strsplit(line, ": ", 2); + + if (g_strv_length(parts) != 2) + continue; + + g_strstrip(parts[0]); + g_strstrip(parts[1]); + + if (STREQ(parts[0], "vendor_id")) { + if (!vendor) + vendor = g_steal_pointer(&parts[1]); + } else if (STREQ(parts[0], "model name")) { + if (!name) + name = g_steal_pointer(&parts[1]); + } else if (STREQ(parts[0], "cpu family")) { + if (!family) + family = g_steal_pointer(&parts[1]); + } else if (STREQ(parts[0], "model")) { + if (!model) + model = g_steal_pointer(&parts[1]); + } else if (STREQ(parts[0], "stepping")) { + if (!stepping) + stepping = g_steal_pointer(&parts[1]); + } + + if (vendor && name && family && model && stepping) { + *signature = g_strdup_printf("%s, %s, family: %s, model: %s, stepping: %s", + vendor, name, family, model, stepping); + return 0; + } + } + return 0; } diff --git a/tests/virhostcpudata/linux-x86_64-test1.signature b/tests/virhostcpudata/linux-x86_64-test1.signature new file mode 100644 index 0000000000..953337a4cb --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test1.signature @@ -0,0 +1 @@ +GenuineIntel, Intel(R) Xeon(TM) CPU 2.80GHz, family: 15, model: 4, stepping: 8 diff --git a/tests/virhostcpudata/linux-x86_64-test2.signature b/tests/virhostcpudata/linux-x86_64-test2.signature new file mode 100644 index 0000000000..bbeb084944 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test2.signature @@ -0,0 +1 @@ +GenuineIntel, Intel(R) Core(TM)2 Duo CPU T9600 @ 2.80GHz, family: 6, model: 23, stepping: 10 diff --git a/tests/virhostcpudata/linux-x86_64-test3.signature b/tests/virhostcpudata/linux-x86_64-test3.signature new file mode 100644 index 0000000000..b94bbc1701 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test3.signature @@ -0,0 +1 @@ +AuthenticAMD, AMD Opteron(tm) Processor 6172, family: 16, model: 9, stepping: 1 diff --git a/tests/virhostcpudata/linux-x86_64-test4.signature b/tests/virhostcpudata/linux-x86_64-test4.signature new file mode 100644 index 0000000000..9237332d59 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test4.signature @@ -0,0 +1 @@ +GenuineIntel, Intel(R) Xeon(R) CPU E7- 8837 @ 2.67GHz, family: 6, model: 47, stepping: 2 diff --git a/tests/virhostcpudata/linux-x86_64-test5.signature b/tests/virhostcpudata/linux-x86_64-test5.signature new file mode 100644 index 0000000000..dbaba8ee08 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test5.signature @@ -0,0 +1 @@ +GenuineIntel, Intel(R) Xeon(R) CPU E5320 @ 1.86GHz, family: 6, model: 15, stepping: 7 diff --git a/tests/virhostcpudata/linux-x86_64-test6.signature b/tests/virhostcpudata/linux-x86_64-test6.signature new file mode 100644 index 0000000000..e5d8476e06 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test6.signature @@ -0,0 +1 @@ +GenuineIntel, Intel(R) Xeon(R) CPU E5640 @ 2.67GHz, family: 6, model: 44, stepping: 2 diff --git a/tests/virhostcpudata/linux-x86_64-test7.signature b/tests/virhostcpudata/linux-x86_64-test7.signature new file mode 100644 index 0000000000..a2e91b270b --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test7.signature @@ -0,0 +1 @@ +AuthenticAMD, AMD Opteron(tm) Processor 6174, family: 16, model: 9, stepping: 1 diff --git a/tests/virhostcpudata/linux-x86_64-test8.signature b/tests/virhostcpudata/linux-x86_64-test8.signature new file mode 100644 index 0000000000..e873053f3b --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-test8.signature @@ -0,0 +1 @@ +AuthenticAMD, AMD Opteron(tm) Processor 6282 SE, family: 21, model: 1, stepping: 2 diff --git a/tests/virhostcpudata/linux-x86_64-with-die.signature b/tests/virhostcpudata/linux-x86_64-with-die.signature new file mode 100644 index 0000000000..ce0545cd38 --- /dev/null +++ b/tests/virhostcpudata/linux-x86_64-with-die.signature @@ -0,0 +1 @@ +GenuineIntel, QEMU Virtual CPU version 2.5+, family: 6, model: 6, stepping: 3 -- 2.26.2