Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6db8347 authored by Naveen N. Rao's avatar Naveen N. Rao Committed by Ingo Molnar
Browse files

sched/stat: Simplify the sched_info accounting dependency



Both CONFIG_SCHEDSTATS=y and CONFIG_TASK_DELAY_ACCT=y track task
sched_info, which results in ugly #if clauses.

Simplify the code by introducing a synthethic CONFIG_SCHED_INFO
switch, selected by both.

Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ricklind@us.ibm.com
Link: http://lkml.kernel.org/r/8d19eef800811a94b0f91bcbeb27430a884d7433.1435255405.git.naveen.n.rao@linux.vnet.ibm.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 407a2c72
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -849,7 +849,7 @@ extern struct user_struct root_user;
struct backing_dev_info;
struct backing_dev_info;
struct reclaim_state;
struct reclaim_state;


#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
#ifdef CONFIG_SCHED_INFO
struct sched_info {
struct sched_info {
	/* cumulative counters */
	/* cumulative counters */
	unsigned long pcount;	      /* # of times run on this cpu */
	unsigned long pcount;	      /* # of times run on this cpu */
@@ -859,7 +859,7 @@ struct sched_info {
	unsigned long long last_arrival,/* when we last ran on a cpu */
	unsigned long long last_arrival,/* when we last ran on a cpu */
			   last_queued;	/* when we were last queued to run */
			   last_queued;	/* when we were last queued to run */
};
};
#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
#endif /* CONFIG_SCHED_INFO */


#ifdef CONFIG_TASK_DELAY_ACCT
#ifdef CONFIG_TASK_DELAY_ACCT
struct task_delay_info {
struct task_delay_info {
@@ -1408,7 +1408,7 @@ struct task_struct {
	int rcu_tasks_idle_cpu;
	int rcu_tasks_idle_cpu;
#endif /* #ifdef CONFIG_TASKS_RCU */
#endif /* #ifdef CONFIG_TASKS_RCU */


#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
#ifdef CONFIG_SCHED_INFO
	struct sched_info sched_info;
	struct sched_info sched_info;
#endif
#endif


+1 −0
Original line number Original line Diff line number Diff line
@@ -435,6 +435,7 @@ config TASKSTATS
config TASK_DELAY_ACCT
config TASK_DELAY_ACCT
	bool "Enable per-task delay accounting"
	bool "Enable per-task delay accounting"
	depends on TASKSTATS
	depends on TASKSTATS
	select SCHED_INFO
	help
	help
	  Collect information on time spent by a task waiting for system
	  Collect information on time spent by a task waiting for system
	  resources like cpu, synchronous block I/O completion and swapping
	  resources like cpu, synchronous block I/O completion and swapping
+1 −1
Original line number Original line Diff line number Diff line
@@ -1975,7 +1975,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
	set_task_cpu(p, cpu);
	set_task_cpu(p, cpu);
	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
	raw_spin_unlock_irqrestore(&p->pi_lock, flags);


#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
#ifdef CONFIG_SCHED_INFO
	if (likely(sched_info_on()))
	if (likely(sched_info_on()))
		memset(&p->sched_info, 0, sizeof(p->sched_info));
		memset(&p->sched_info, 0, sizeof(p->sched_info));
#endif
#endif
+2 −2
Original line number Original line Diff line number Diff line
@@ -47,7 +47,7 @@ rq_sched_info_depart(struct rq *rq, unsigned long long delta)
# define schedstat_set(var, val)	do { } while (0)
# define schedstat_set(var, val)	do { } while (0)
#endif
#endif


#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
#ifdef CONFIG_SCHED_INFO
static inline void sched_info_reset_dequeued(struct task_struct *t)
static inline void sched_info_reset_dequeued(struct task_struct *t)
{
{
	t->sched_info.last_queued = 0;
	t->sched_info.last_queued = 0;
@@ -156,7 +156,7 @@ sched_info_switch(struct rq *rq,
#define sched_info_depart(rq, t)		do { } while (0)
#define sched_info_depart(rq, t)		do { } while (0)
#define sched_info_arrive(rq, next)		do { } while (0)
#define sched_info_arrive(rq, next)		do { } while (0)
#define sched_info_switch(rq, t, next)		do { } while (0)
#define sched_info_switch(rq, t, next)		do { } while (0)
#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
#endif /* CONFIG_SCHED_INFO */


/*
/*
 * The following are functions that support scheduler-internal time accounting.
 * The following are functions that support scheduler-internal time accounting.
+5 −0
Original line number Original line Diff line number Diff line
@@ -841,9 +841,14 @@ config SCHED_DEBUG
	  that can help debug the scheduler. The runtime overhead of this
	  that can help debug the scheduler. The runtime overhead of this
	  option is minimal.
	  option is minimal.


config SCHED_INFO
	bool
	default n

config SCHEDSTATS
config SCHEDSTATS
	bool "Collect scheduler statistics"
	bool "Collect scheduler statistics"
	depends on DEBUG_KERNEL && PROC_FS
	depends on DEBUG_KERNEL && PROC_FS
	select SCHED_INFO
	help
	help
	  If you say Y here, additional code will be inserted into the
	  If you say Y here, additional code will be inserted into the
	  scheduler and related routines to collect statistics about
	  scheduler and related routines to collect statistics about