powertop: code shrink

function                                             old     new   delta
read_cstate_counts                                   355     360      +5
print_intel_cstates                                  494     499      +5
process_timer_stats                                  554     480     -74
process_irq_counts                                   765     530    -235
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 10/-309)          Total: -299 bytes

Signed-off-by: Maksym Kryzhanovskyy <xmaks@email.cz>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Maksym Kryzhanovskyy 2010-11-04 08:41:57 +01:00 committed by Denys Vlasenko
parent 854738d39d
commit 6052c2b0be

View File

@ -169,7 +169,7 @@ static void read_cstate_counts(ullong *usage, ullong *duration)
if (len < 3 || len > BIG_SYSNAME_LEN)
continue;
sprintf(buf, "/proc/acpi/processor/%s/power", d->d_name);
sprintf(buf, "%s/%s/power", "/proc/acpi/processor", d->d_name);
fp = fopen_for_read(buf);
if (!fp)
continue;
@ -321,28 +321,17 @@ static void process_irq_counts(void)
/* 0: 143646045 153901007 IO-APIC-edge timer
* ^
*/
*p = '\0';
/* Deal with non-maskable interrupts -- make up fake numbers */
nr = -1;
if (buf[0] != ' ' && !isdigit(buf[0])) {
//TODO: optimize
if (strncmp(buf, "NMI:", 4) == 0)
nr = 20000;
if (strncmp(buf, "RES:", 4) == 0)
nr = 20001;
if (strncmp(buf, "CAL:", 4) == 0)
nr = 20002;
if (strncmp(buf, "TLB:", 4) == 0)
nr = 20003;
if (strncmp(buf, "TRM:", 4) == 0)
nr = 20004;
if (strncmp(buf, "THR:", 4) == 0)
nr = 20005;
if (strncmp(buf, "SPU:", 4) == 0)
nr = 20006;
nr = index_in_strings("NMI\0RES\nCAL\0TLB\0TRM\0THR\0SPU\0", buf);
if (nr != -1) {
nr += 20000;
} else {
/* bb_strtou doesn't eat leading spaces, using strtoul */
nr = strtoul(buf, NULL, 10);
}
*p = ':';
if (nr == -1)
continue;
@ -430,33 +419,31 @@ static NOINLINE int process_timer_stats(void)
while (fgets(buf, sizeof(buf), fp)) {
const char *count, *process, *func;
char *p;
int cnt;
int idx;
count = skip_whitespace(buf);
if (strcmp(strchrnul(count, ' '), " total events") == 0)
break;
p = strchr(count, ',');
if (!p)
continue;
*p++ = '\0';
if (strcmp(strchrnul(count, ' '), " total events") == 0)
break;
p = skip_whitespace(p); /* points to pid */
/* Find char ' ', then eat remaining spaces */
#define ADVANCE(p) do { \
(p) = strchr((p), ' '); \
if (!(p)) \
continue; \
*(p) = '\0'; \
(p)++; \
(p) = skip_whitespace(p); \
} while (0)
/* Get process name */
ADVANCE(p);
if (strchr(count, 'D'))
continue; /* deferred */
p = skip_whitespace(p); /* points to pid now */
process = NULL;
get_func_name:
p = strchr(p, ' ');
if (!p)
continue;
*p++ = '\0';
p = skip_whitespace(p);
if (process == NULL) {
process = p;
/* Get function */
ADVANCE(p);
goto get_func_name;
}
func = p;
#undef ADVANCE
//if (strcmp(process, "swapper") == 0
// && strcmp(func, "hrtimer_start_range_ns (tick_sched_timer)\n") == 0
//) {
@ -471,38 +458,29 @@ static NOINLINE int process_timer_stats(void)
//if (strcmp(process, "powertop") == 0)
// continue;
if (strcmp(process, "insmod") == 0)
process = "[kernel module]";
if (strcmp(process, "modprobe") == 0)
process = "[kernel module]";
if (strcmp(process, "swapper") == 0)
process = "<kernel core>";
idx = index_in_strings("insmod\0modprobe\0swapper\0", process);
if (idx != -1) {
process = idx < 2 ? "[kernel module]" : "<kernel core>";
}
strchrnul(p, '\n')[0] = '\0';
{
char *tmp;
cnt = bb_strtoull(count, &tmp, 10);
p = tmp;
}
while (*p != '\0') {
if (*p++ == 'D') /* deferred */
goto skip;
}
// 46D\01136\0kondemand/1\0do_dbs_timer (delayed_work_timer_fn)
// ^ ^ ^
// count process func
//if (strchr(process, '['))
sprintf(line, "%15.15s : %s", process, func);
//else
// sprintf(line, "%s", process);
save_line(line, cnt);
skip: ;
save_line(line, bb_strtoull(count, NULL, 10));
}
fclose(fp);
}
n = 0;
#if ENABLE_FEATURE_POWERTOP_PROCIRQ
if (strstr(buf, "total events")) {
if (strstr(buf, " total events")) {
n = bb_strtoull(buf, NULL, 10) / G.total_cpus;
if (n > 0 && n < G.interrupt_0) {
sprintf(line, " <interrupt> : %s", "extra timer interrupt");
@ -566,7 +544,7 @@ static NOINLINE void print_intel_cstates(void)
if (!isdigit(d->d_name[3]))
continue;
len = sprintf(fname, "/sys/devices/system/cpu/%s/cpuidle", d->d_name);
len = sprintf(fname, "%s/%s/cpuidle", "/sys/devices/system/cpu", d->d_name);
dir = opendir(fname);
if (!dir)
continue;