Subject: | cpu_type test fails on s390 architecture |
cpu_type test fails on s390 architecture because there is different
format of /proc/cpuinfo. Attached patch adds support for this
architecture when running Linux.
Subject: | Sys-CPU-0.52-Add-support-for-Linux-on-s390.patch |
From 2c6e746e5e96f7c6c131db7d8f9366ae002a17cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Mon, 5 Nov 2012 11:26:55 +0100
Subject: [PATCH] Add support for Linux on s390
---
CPU.xs | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/CPU.xs b/CPU.xs
index b77d0c0..564e855 100644
--- a/CPU.xs
+++ b/CPU.xs
@@ -269,6 +269,17 @@ int proc_cpuinfo_clock (void) {
return (0);
}
+#ifdef __s390__ || __s390x__
+/* Return machine value from s390 processor line, NULL if not found */
+char *processor_machine_field (char *processor) {
+ char *machine = NULL;
+ if (NULL == processor) return NULL;
+ if (NULL != (machine = strstr(processor, "machine = "))) {
+ machine += 10;
+ }
+ return machine;
+}
+#endif
#endif
int get_cpu_count() {
@@ -354,11 +365,15 @@ SV *
cpu_type()
CODE:
{
- char *value = malloc(MAX_IDENT_SIZE);
+ char *value = NULL;
int retcode = 0;
#ifdef __linux__
- value = proc_cpuinfo_field ("model name");
+#ifdef __s390__ || __s390x__
+ value = processor_machine_field (proc_cpuinfo_field ("processor") );
+#endif
+ if (!value) value = proc_cpuinfo_field ("model name");
if (!value) value = proc_cpuinfo_field ("machine");
+ if (!value) value = proc_cpuinfo_field ("vendor_id");
#endif
#ifdef WINDOWS
retcode = GetSysInfoKey("Identifier",value);
--
1.7.11.7