timer: Stats: Simplify the flags handling
authorThomas Gleixner <tglx@linutronix.de>
Tue, 26 May 2015 22:50:31 +0000 (22:50 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 19 Jun 2015 13:18:27 +0000 (15:18 +0200)
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: Thomas 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.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
include/linux/timer.h
kernel/time/timer.c
kernel/time/timer_stats.c

index 4a0d52b..ff0689b 100644 (file)
@@ -188,13 +188,10 @@ extern void set_timer_slack(struct timer_list *time, int slack_hz);
 
 extern int timer_stats_active;
 
-#define TIMER_STATS_FLAG_DEFERRABLE    0x1
-
 extern void init_timer_stats(void);
 
 extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
-                                    void *timerf, char *comm,
-                                    unsigned int timer_flag);
+                                    void *timerf, char *comm, u32 flags);
 
 extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
                                               void *addr);
index 1540af9..3398d93 100644 (file)
@@ -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)
 {
-       unsigned int flag = 0;
-
        if (likely(!timer->start_site))
                return;
-       if (unlikely(timer->flags & TIMER_DEFERRABLE))
-               flag |= TIMER_STATS_FLAG_DEFERRABLE;
 
        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
index 1fb08f2..1adecb4 100644 (file)
@@ -68,7 +68,7 @@ struct entry {
         * Number of timeout events:
         */
        unsigned long           count;
-       unsigned int            timer_flag;
+       u32                     flags;
 
        /*
         * We save the command-line string to preserve
@@ -227,13 +227,13 @@ static struct entry *tstat_lookup(struct entry *entry, char *comm)
  * @startf:    pointer to the function which did the timer setup
  * @timerf:    pointer to the timer callback function of 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
  * incremented. Otherwise the timer is registered in a free slot.
  */
 void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
-                             void *timerf, char *comm,
-                             unsigned int timer_flag)
+                             void *timerf, char *comm, u32 tflags)
 {
        /*
         * It doesn't matter which lock we take:
@@ -251,7 +251,7 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
        input.start_func = startf;
        input.expire_func = timerf;
        input.pid = pid;
-       input.timer_flag = timer_flag;
+       input.flags = tflags;
 
        raw_spin_lock_irqsave(lock, flags);
        if (!timer_stats_active)
@@ -306,7 +306,7 @@ static int tstats_show(struct seq_file *m, void *v)
 
        for (i = 0; i < nr_entries; i++) {
                entry = entries + i;
-               if (entry->timer_flag & TIMER_STATS_FLAG_DEFERRABLE) {
+               if (entry->flags & TIMER_DEFERRABLE) {
                        seq_printf(m, "%4luD, %5d %-16s ",
                                entry->count, entry->pid, entry->comm);
                } else {