[PATCH 3/3] cpu: maxfreq: use doubles for cpu freqs rather than int

Colin King colin.king at canonical.com
Wed Apr 24 09:25:23 UTC 2013


From: Colin Ian King <colin.king at canonical.com>

Use doubles for CPU frequencies, this keeps the code sane from int -> double
casting.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/cpu/maxfreq/maxfreq.c | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/src/cpu/maxfreq/maxfreq.c b/src/cpu/maxfreq/maxfreq.c
index 7678333..87df364 100644
--- a/src/cpu/maxfreq/maxfreq.c
+++ b/src/cpu/maxfreq/maxfreq.c
@@ -28,10 +28,10 @@
 #define CPU_FREQ_PATH	"/sys/devices/system/cpu"
 #define CPU_INFO_PATH	"/proc/cpuinfo"
 
-static int maxfreq_max(const char *str)
+static double maxfreq_max(const char *str)
 {
-	int max = -1;
-	int val;
+	double max = -1.0;
+	double val;
 
 	while (str && *str) {
 		while ((*str != '\0') && isspace(*str))
@@ -40,7 +40,7 @@ static int maxfreq_max(const char *str)
 		if (!isdigit(*str))
 			break;
 
-		val = atoi(str);
+		val = atof(str);
 		if (val > max)
 			max = val;
 		str = strstr(str, " ");
@@ -57,7 +57,7 @@ static int maxfreq_test1(fwts_framework *fw)
 	int cpu;
 	fwts_list_link *item;
 	fwts_list *cpuinfo;
-	int *cpufreq;
+	double *cpufreq;
 	int failed = 0;
 	int advice = 0;
 
@@ -79,7 +79,7 @@ static int maxfreq_test1(fwts_framework *fw)
 			cpus++;
 	}
 
-	if ((cpufreq = calloc(cpus, sizeof(int))) == NULL) {
+	if ((cpufreq = calloc(cpus, sizeof(double))) == NULL) {
 		fwts_log_error(fw, "Cannot create cpu frequency array.");
 		return FWTS_ERROR;
 	}
@@ -90,16 +90,15 @@ static int maxfreq_test1(fwts_framework *fw)
 		char *str = fwts_text_list_text(item);
 		if (strstr(str, "model name")) {
 			if ((str = strstr(str, "@")) != NULL) {
-				double freq = atof(str+1);
+				cpufreq[cpu] = atof(str+1);
 				if (strstr(str, "GHz"))
-					freq *= 1000000.0;
+					cpufreq[cpu] *= 1000000.0;
 				if (strstr(str, "MHz"))
-					freq *= 1000.0;
-				cpufreq[cpu] = (int)freq;
+					cpufreq[cpu] *= 1000.0;
 				cpufreqs_read++;
 			}
 			else
-				cpufreq[cpu] = -1;
+				cpufreq[cpu] = -1.0;
 
 			cpu++;
 		}
@@ -129,17 +128,17 @@ static int maxfreq_test1(fwts_framework *fw)
 				CPU_FREQ_PATH "/%s/cpufreq/scaling_available_frequencies",
 				entry->d_name);
 			if ((data = fwts_get(path)) != NULL) {
-				int maxfreq = maxfreq_max(data);
+				double maxfreq = maxfreq_max(data);
 				int cpunum = atoi(entry->d_name + 3);
-				if (maxfreq == -1) {
+				if (maxfreq < 0.0) {
 					fwts_failed(fw, LOG_LEVEL_MEDIUM,
 						"CPUFreqReadFailed",
 						"Cannot read cpu frequency from %s for CPU %s\n",
 						CPU_FREQ_PATH, entry->d_name);
 					failed++;
 				} else {
-					double maxfreq_ghz = (double)maxfreq/1000000.0;
-					double cpufreq_ghz = (double)cpufreq[cpunum] / 1000000.0;
+					double maxfreq_ghz = maxfreq / 1000000.0;
+					double cpufreq_ghz = cpufreq[cpunum] / 1000000.0;
 
 					if (fabs(maxfreq_ghz - cpufreq_ghz) > (maxfreq_ghz * 0.005)) {
 						failed++;
-- 
1.8.1.2




More information about the fwts-devel mailing list