[PATCH] cpufreq: use qsort to sort frequencies
Colin King
colin.king at canonical.com
Sat Apr 20 13:40:07 UTC 2013
From: Colin Ian King <colin.king at canonical.com>
Use qsort to sort frequencies, and set the maximum number of
frequencies to 256 to overly futureproof the code.
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
src/cpu/cpufreq/cpufreq.c | 33 +++++++++++++++------------------
1 file changed, 15 insertions(+), 18 deletions(-)
diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
index fd37b9d..fa10275 100644
--- a/src/cpu/cpufreq/cpufreq.c
+++ b/src/cpu/cpufreq/cpufreq.c
@@ -41,6 +41,8 @@
#define FWTS_CPU_PATH "/sys/devices/system/cpu"
+#define MAX_FREQS 256
+
typedef struct {
uint32_t Hz;
uint64_t speed;
@@ -214,14 +216,22 @@ static uint32_t get_claimed_hz(const int cpu)
return value;
}
+static int cpu_freq_compare(const void *v1, const void *v2)
+{
+ const fwts_cpu_freq *cpu_freq1 = (fwts_cpu_freq *)v1;
+ const fwts_cpu_freq *cpu_freq2 = (fwts_cpu_freq *)v2;
+
+ return cpu_freq1->Hz - cpu_freq2->Hz;
+}
+
static void do_cpu(fwts_framework *fw, int cpu)
{
char path[PATH_MAX];
char line[4096];
- fwts_cpu_freq freqs[32];
+ fwts_cpu_freq freqs[MAX_FREQS];
FILE *file;
char *c, *c2;
- int i, delta;
+ int i;
int speedcount;
static int warned=0;
int warned_PSS = 0;
@@ -250,7 +260,7 @@ static void do_cpu(fwts_framework *fw, int cpu)
c = line;
i = 0;
- while (c && strlen(c) > 1) {
+ while ((i < MAX_FREQS) && c && strlen(c) > 1) {
c2 = strchr(c, ' ');
if (c2) {
*c2 = 0;
@@ -302,21 +312,8 @@ static void do_cpu(fwts_framework *fw, int cpu)
if (speedcount<2)
return;
- /* Now.. sort the frequencies */
-
- delta=1;
- while (delta) {
- fwts_cpu_freq tmp;
- delta = 0;
- for (i = 0; i < speedcount-1; i++) {
- if (freqs[i].Hz > freqs[i+1].Hz) {
- tmp = freqs[i];
- freqs[i] = freqs[i+1];
- freqs[i+1] = tmp;
- delta = 1;
- }
- }
- }
+ /* Sort the frequencies */
+ qsort(freqs, speedcount, sizeof(fwts_cpu_freq), cpu_freq_compare);
/* now check for 1) increasing HZ and 2) increasing speed */
for (i = 0; i < speedcount-1; i++) {
--
1.8.1.2
More information about the fwts-devel
mailing list