ACK: [PATCH] cpufreq: use qsort to sort frequencies
Alex Hung
alex.hung at canonical.com
Mon Apr 22 01:32:13 UTC 2013
On 04/20/2013 09:40 PM, Colin King wrote:
> 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++) {
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list