Patch to fix some minor issues in idlestat tool -
- use USEC_PER_SEC instead of hardcoded value - replace 'f' with 'stderr' - check for root only if idlestat is run in trace mode - increase MAXCSTATE & MAXPSTATE to 16 as per Daniel's suggestion. Needs to be dynamically determined in future.
diff --git a/idlestat.c b/idlestat.c index 787d7b0..e9f556b 100644 --- a/idlestat.c +++ b/idlestat.c @@ -47,6 +47,7 @@ #include "topology.h"
#define IDLESTAT_VERSION "0.3" +#define USEC_PER_SEC 1000000
static char irq_type_name[][8] = { "irq", @@ -193,7 +194,7 @@ static struct cpuidle_data *intersection(struct cpuidle_data *data1, data->begin = begin; data->end = end; data->duration = end - begin; - data->duration *= 1000000; + data->duration *= USEC_PER_SEC;
return data; } @@ -510,7 +511,6 @@ static void open_next_pstate(struct cpufreq_pstates *ps, int s, double time) open_current_pstate(ps, time); }
-#define USEC_PER_SEC 1000000 static void close_current_pstate(struct cpufreq_pstates *ps, double time) { int c = ps->current; @@ -617,7 +617,7 @@ static int store_data(double time, int state, int cpu, return 0;
/* convert to us */ - data->duration *= 1000000; + data->duration *= USEC_PER_SEC;
cstate->min_time = MIN(cstate->min_time, data->duration);
@@ -1110,7 +1110,7 @@ static int idlestat_store(const char *path) f = fopen(path, "w+");
if (!f) { - fprintf(f, "%s: failed to open '%s': %m\n", __func__, path); + fprintf(stderr, "%s: failed to open '%s': %m\n", __func__, path); return -1; }
@@ -1230,7 +1230,7 @@ int main(int argc, char *argv[], char *const envp[]) return 1;
/* We have to manipulate some files only accessible to root */ - if (getuid()) { + if ((options.mode == TRACE) && getuid()) { fprintf(stderr, "must be root to run the tool\n"); return -1; } diff --git a/idlestat.h b/idlestat.h index 74238ff..1977ab4 100644 --- a/idlestat.h +++ b/idlestat.h @@ -29,8 +29,8 @@
#define BUFSIZE 256 #define NAMELEN 16 -#define MAXCSTATE 8 -#define MAXPSTATE 8 +#define MAXCSTATE 16 +#define MAXPSTATE 16 #define MAX(A, B) (A > B ? A : B) #define MIN(A, B) (A < B ? A : B) #define AVG(A, B, I) ((A) + ((B - A) / (I)))
Thanks for the fixes Mohammad.
On Mon, Jun 9, 2014 at 8:57 AM, Mohammad Merajul Islam Molla meraj.enigma@gmail.com wrote:
Patch to fix some minor issues in idlestat tool -
- use USEC_PER_SEC instead of hardcoded value
- replace 'f' with 'stderr'
- check for root only if idlestat is run in trace mode
- increase MAXCSTATE & MAXPSTATE to 16 as per Daniel's suggestion.
Needs to be dynamically determined in future.
I've split these up into three different patches, made some cosmetic changes and pushed to the git tree.
diff --git a/idlestat.c b/idlestat.c index 787d7b0..e9f556b 100644 --- a/idlestat.c +++ b/idlestat.c @@ -47,6 +47,7 @@ #include "topology.h"
#define IDLESTAT_VERSION "0.3" +#define USEC_PER_SEC 1000000
static char irq_type_name[][8] = { "irq", @@ -193,7 +194,7 @@ static struct cpuidle_data *intersection(struct cpuidle_data *data1, data->begin = begin; data->end = end; data->duration = end - begin;
- data->duration *= 1000000;
data->duration *= USEC_PER_SEC;
return data;
} @@ -510,7 +511,6 @@ static void open_next_pstate(struct cpufreq_pstates *ps, int s, double time) open_current_pstate(ps, time); }
-#define USEC_PER_SEC 1000000 static void close_current_pstate(struct cpufreq_pstates *ps, double time) { int c = ps->current; @@ -617,7 +617,7 @@ static int store_data(double time, int state, int cpu, return 0;
/* convert to us */
- data->duration *= 1000000;
data->duration *= USEC_PER_SEC;
cstate->min_time = MIN(cstate->min_time, data->duration);
@@ -1110,7 +1110,7 @@ static int idlestat_store(const char *path) f = fopen(path, "w+");
if (!f) {
- fprintf(f, "%s: failed to open '%s': %m\n", __func__, path);
- fprintf(stderr, "%s: failed to open '%s': %m\n", __func__, path); return -1; }
@@ -1230,7 +1230,7 @@ int main(int argc, char *argv[], char *const envp[]) return 1;
/* We have to manipulate some files only accessible to root */
- if (getuid()) {
- if ((options.mode == TRACE) && getuid()) { fprintf(stderr, "must be root to run the tool\n"); return -1; }
diff --git a/idlestat.h b/idlestat.h index 74238ff..1977ab4 100644 --- a/idlestat.h +++ b/idlestat.h @@ -29,8 +29,8 @@
#define BUFSIZE 256 #define NAMELEN 16 -#define MAXCSTATE 8 -#define MAXPSTATE 8 +#define MAXCSTATE 16 +#define MAXPSTATE 16 #define MAX(A, B) (A > B ? A : B) #define MIN(A, B) (A < B ? A : B) #define AVG(A, B, I) ((A) + ((B - A) / (I)))
linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev