From 85128e296232c0b95b18321b76a15252b0db5a90 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 12 May 2015 18:21:18 +0200 Subject: [PATCH] sysinfo: Fix reports on ARM Due to a kernel commit (b4b8f770e), cpuinfo format has changed on ARMs. Firstly, 'Processor: ...' may not be reported, it's replaced by 'model name: ...'. Secondly, the "Processor" string may occur in CPU name, e.g. 'ARMv7 Processor rev 5 (v7l)'. Therefore, we must firstly look for 'model name' and then for 'Processor' if not found. Moreover, lines in the cpuinfo file are shuffled, so we better not manipulate the pointer to start of internal buffer as we may lost some info. Signed-off-by: Michal Privoznik --- src/util/virsysinfo.c | 9 +++-- tests/sysinfodata/arm-rpi2cpuinfo.data | 43 ++++++++++++++++++++++++ tests/sysinfodata/arm-rpi2sysinfo.expect | 18 ++++++++++ tests/sysinfotest.c | 22 +++++++++--- 4 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 tests/sysinfodata/arm-rpi2cpuinfo.data create mode 100644 tests/sysinfodata/arm-rpi2sysinfo.expect diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c index 8bb17f07ba..40390abaa9 100644 --- a/src/util/virsysinfo.c +++ b/src/util/virsysinfo.c @@ -289,16 +289,15 @@ virSysinfoParseProcessor(const char *base, virSysinfoDefPtr ret) virSysinfoProcessorDefPtr processor; char *processor_type = NULL; - if (!(tmp_base = strstr(base, "Processor"))) + if (!(tmp_base = strstr(base, "model name")) && + !(tmp_base = strstr(base, "Processor"))) return 0; - base = tmp_base; - eol = strchr(base, '\n'); - cur = strchr(base, ':') + 1; + eol = strchr(tmp_base, '\n'); + cur = strchr(tmp_base, ':') + 1; virSkipSpaces(&cur); if (eol && VIR_STRNDUP(processor_type, cur, eol - cur) < 0) goto error; - base = cur; while ((tmp_base = strstr(base, "processor")) != NULL) { base = tmp_base; diff --git a/tests/sysinfodata/arm-rpi2cpuinfo.data b/tests/sysinfodata/arm-rpi2cpuinfo.data new file mode 100644 index 0000000000..598e365a57 --- /dev/null +++ b/tests/sysinfodata/arm-rpi2cpuinfo.data @@ -0,0 +1,43 @@ +processor : 0 +model name : ARMv7 Processor rev 5 (v7l) +BogoMIPS : 38.40 +Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm +CPU implementer : 0x41 +CPU architecture: 7 +CPU variant : 0x0 +CPU part : 0xc07 +CPU revision : 5 + +processor : 1 +model name : ARMv7 Processor rev 5 (v7l) +BogoMIPS : 38.40 +Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm +CPU implementer : 0x41 +CPU architecture: 7 +CPU variant : 0x0 +CPU part : 0xc07 +CPU revision : 5 + +processor : 2 +model name : ARMv7 Processor rev 5 (v7l) +BogoMIPS : 38.40 +Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm +CPU implementer : 0x41 +CPU architecture: 7 +CPU variant : 0x0 +CPU part : 0xc07 +CPU revision : 5 + +processor : 3 +model name : ARMv7 Processor rev 5 (v7l) +BogoMIPS : 38.40 +Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm +CPU implementer : 0x41 +CPU architecture: 7 +CPU variant : 0x0 +CPU part : 0xc07 +CPU revision : 5 + +Hardware : BCM2709 +Revision : a01041 +Serial : 00000000c9e9323d diff --git a/tests/sysinfodata/arm-rpi2sysinfo.expect b/tests/sysinfodata/arm-rpi2sysinfo.expect new file mode 100644 index 0000000000..acb3ad9919 --- /dev/null +++ b/tests/sysinfodata/arm-rpi2sysinfo.expect @@ -0,0 +1,18 @@ + + + 0 + ARMv7 Processor rev 5 (v7l) + + + 1 + ARMv7 Processor rev 5 (v7l) + + + 2 + ARMv7 Processor rev 5 (v7l) + + + 3 + ARMv7 Processor rev 5 (v7l) + + diff --git a/tests/sysinfotest.c b/tests/sysinfotest.c index d8266a72ae..74e5f71fc2 100644 --- a/tests/sysinfotest.c +++ b/tests/sysinfotest.c @@ -166,11 +166,23 @@ VIRT_TEST_MAIN(test_x86) static int test_arm(void) { - return sysinfotest_run("arm sysinfo", - NULL, - NULL, - "/sysinfodata/armcpuinfo.data", - "/sysinfodata/armsysinfo.expect"); + int ret = EXIT_SUCCESS; + + if (sysinfotest_run("arm sysinfo", + NULL, + NULL, + "/sysinfodata/armcpuinfo.data", + "/sysinfodata/armsysinfo.expect") != EXIT_SUCCESS) + ret = EXIT_FAILURE; + + if (sysinfotest_run("Raspberry Pi 2 sysinfo", + NULL, + NULL, + "/sysinfodata/arm-rpi2cpuinfo.data", + "/sysinfodata/arm-rpi2sysinfo.expect") != EXIT_SUCCESS) + ret = EXIT_FAILURE; + + return ret; } VIRT_TEST_MAIN(test_arm) -- GitLab