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 <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2015-05-12 18:21:18 +02:00
parent 04695f48b2
commit 85128e2962
4 changed files with 82 additions and 10 deletions

View File

@ -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;

View File

@ -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

View File

@ -0,0 +1,18 @@
<sysinfo type='smbios'>
<processor>
<entry name='socket_destination'>0</entry>
<entry name='type'>ARMv7 Processor rev 5 (v7l)</entry>
</processor>
<processor>
<entry name='socket_destination'>1</entry>
<entry name='type'>ARMv7 Processor rev 5 (v7l)</entry>
</processor>
<processor>
<entry name='socket_destination'>2</entry>
<entry name='type'>ARMv7 Processor rev 5 (v7l)</entry>
</processor>
<processor>
<entry name='socket_destination'>3</entry>
<entry name='type'>ARMv7 Processor rev 5 (v7l)</entry>
</processor>
</sysinfo>

View File

@ -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)