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: 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>
This commit is contained in:
		
					parent
					
						
							
								0eeda71bc3
							
						
					
				
			
			
				commit
				
					
						c74441a17e
					
				
			
		
					 3 changed files with 8 additions and 14 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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 {
 | 
				
			||||||
	 * 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)
 | 
				
			||||||
 * @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,
 | 
				
			||||||
	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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue