Commit c74441a1 authored by Thomas Gleixner's avatar Thomas Gleixner

timer: Stats: Simplify the flags handling

Simplify the handling of the flag storage for the timer statistics. No
intermediate storage anymore. Just hand over the flags field.

I left the printout of 'deferrable' for now because changing this
would be an ABI update and I have no idea how strong people feel about
that. OTOH, I wonder whether we should kill the whole timer stats
stuff because all of that information can be retrieved via ftrace/perf
as well.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Joonwoo Park <joonwoop@codeaurora.org>
Cc: Wenbo Wang <wenbo.wang@memblaze.com>
Link: http://lkml.kernel.org/r/20150526224512.046626248@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 0eeda71b
...@@ -188,13 +188,10 @@ extern void set_timer_slack(struct timer_list *time, int slack_hz); ...@@ -188,13 +188,10 @@ extern void set_timer_slack(struct timer_list *time, int slack_hz);
extern int timer_stats_active; extern int timer_stats_active;
#define TIMER_STATS_FLAG_DEFERRABLE 0x1
extern void init_timer_stats(void); extern void init_timer_stats(void);
extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
void *timerf, char *comm, void *timerf, char *comm, u32 flags);
unsigned int timer_flag);
extern void __timer_stats_timer_set_start_info(struct timer_list *timer, extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
void *addr); void *addr);
......
...@@ -404,15 +404,12 @@ void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr) ...@@ -404,15 +404,12 @@ void __timer_stats_timer_set_start_info(struct timer_list *timer, void *addr)
static void timer_stats_account_timer(struct timer_list *timer) static void timer_stats_account_timer(struct timer_list *timer)
{ {
unsigned int flag = 0;
if (likely(!timer->start_site)) if (likely(!timer->start_site))
return; return;
if (unlikely(timer->flags & TIMER_DEFERRABLE))
flag |= TIMER_STATS_FLAG_DEFERRABLE;
timer_stats_update_stats(timer, timer->start_pid, timer->start_site, timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
timer->function, timer->start_comm, flag); timer->function, timer->start_comm,
timer->flags);
} }
#else #else
......
...@@ -68,7 +68,7 @@ struct entry { ...@@ -68,7 +68,7 @@ struct entry {
* Number of timeout events: * Number of timeout events:
*/ */
unsigned long count; unsigned long count;
unsigned int timer_flag; u32 flags;
/* /*
* We save the command-line string to preserve * We save the command-line string to preserve
...@@ -227,13 +227,13 @@ static struct entry *tstat_lookup(struct entry *entry, char *comm) ...@@ -227,13 +227,13 @@ static struct entry *tstat_lookup(struct entry *entry, char *comm)
* @startf: pointer to the function which did the timer setup * @startf: pointer to the function which did the timer setup
* @timerf: pointer to the timer callback function of the timer * @timerf: pointer to the timer callback function of the timer
* @comm: name of the process which set up the timer * @comm: name of the process which set up the timer
* @tflags: The flags field of the timer
* *
* When the timer is already registered, then the event counter is * When the timer is already registered, then the event counter is
* incremented. Otherwise the timer is registered in a free slot. * incremented. Otherwise the timer is registered in a free slot.
*/ */
void timer_stats_update_stats(void *timer, pid_t pid, void *startf, void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
void *timerf, char *comm, void *timerf, char *comm, u32 tflags)
unsigned int timer_flag)
{ {
/* /*
* It doesn't matter which lock we take: * It doesn't matter which lock we take:
...@@ -251,7 +251,7 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf, ...@@ -251,7 +251,7 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
input.start_func = startf; input.start_func = startf;
input.expire_func = timerf; input.expire_func = timerf;
input.pid = pid; input.pid = pid;
input.timer_flag = timer_flag; input.flags = tflags;
raw_spin_lock_irqsave(lock, flags); raw_spin_lock_irqsave(lock, flags);
if (!timer_stats_active) if (!timer_stats_active)
...@@ -306,7 +306,7 @@ static int tstats_show(struct seq_file *m, void *v) ...@@ -306,7 +306,7 @@ static int tstats_show(struct seq_file *m, void *v)
for (i = 0; i < nr_entries; i++) { for (i = 0; i < nr_entries; i++) {
entry = entries + i; entry = entries + i;
if (entry->timer_flag & TIMER_STATS_FLAG_DEFERRABLE) { if (entry->flags & TIMER_DEFERRABLE) {
seq_printf(m, "%4luD, %5d %-16s ", seq_printf(m, "%4luD, %5d %-16s ",
entry->count, entry->pid, entry->comm); entry->count, entry->pid, entry->comm);
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment