diff options
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 36 | 
1 files changed, 19 insertions, 17 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 6f230596bd0..d906f72b42d 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -71,6 +71,7 @@  #include <linux/debugfs.h>  #include <linux/ctype.h>  #include <linux/ftrace.h> +#include <trace/sched.h>  #include <asm/tlb.h>  #include <asm/irq_regs.h> @@ -1936,6 +1937,7 @@ unsigned long wait_task_inactive(struct task_struct *p, long match_state)  		 * just go back and repeat.  		 */  		rq = task_rq_lock(p, &flags); +		trace_sched_wait_task(rq, p);  		running = task_running(rq, p);  		on_rq = p->se.on_rq;  		ncsw = 0; @@ -2297,9 +2299,7 @@ out_activate:  	success = 1;  out_running: -	trace_mark(kernel_sched_wakeup, -		"pid %d state %ld ## rq %p task %p rq->curr %p", -		p->pid, p->state, rq, p, rq->curr); +	trace_sched_wakeup(rq, p);  	check_preempt_curr(rq, p, sync);  	p->state = TASK_RUNNING; @@ -2432,9 +2432,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)  		p->sched_class->task_new(rq, p);  		inc_nr_running(rq);  	} -	trace_mark(kernel_sched_wakeup_new, -		"pid %d state %ld ## rq %p task %p rq->curr %p", -		p->pid, p->state, rq, p, rq->curr); +	trace_sched_wakeup_new(rq, p);  	check_preempt_curr(rq, p, 0);  #ifdef CONFIG_SMP  	if (p->sched_class->task_wake_up) @@ -2607,11 +2605,7 @@ context_switch(struct rq *rq, struct task_struct *prev,  	struct mm_struct *mm, *oldmm;  	prepare_task_switch(rq, prev, next); -	trace_mark(kernel_sched_schedule, -		"prev_pid %d next_pid %d prev_state %ld " -		"## rq %p prev %p next %p", -		prev->pid, next->pid, prev->state, -		rq, prev, next); +	trace_sched_switch(rq, prev, next);  	mm = next->mm;  	oldmm = prev->active_mm;  	/* @@ -2851,6 +2845,7 @@ static void sched_migrate_task(struct task_struct *p, int dest_cpu)  	    || unlikely(!cpu_active(dest_cpu)))  		goto out; +	trace_sched_migrate_task(rq, p, dest_cpu);  	/* force the process onto the specified CPU */  	if (migrate_task(p, dest_cpu, &req)) {  		/* Need to wait for migration thread (might exit: take ref). */ @@ -4052,23 +4047,26 @@ DEFINE_PER_CPU(struct kernel_stat, kstat);  EXPORT_PER_CPU_SYMBOL(kstat);  /* - * Return p->sum_exec_runtime plus any more ns on the sched_clock - * that have not yet been banked in case the task is currently running. + * Return any ns on the sched_clock that have not yet been banked in + * @p in case that task is currently running.   */ -unsigned long long task_sched_runtime(struct task_struct *p) +unsigned long long task_delta_exec(struct task_struct *p)  {  	unsigned long flags; -	u64 ns, delta_exec;  	struct rq *rq; +	u64 ns = 0;  	rq = task_rq_lock(p, &flags); -	ns = p->se.sum_exec_runtime; +  	if (task_current(rq, p)) { +		u64 delta_exec; +  		update_rq_clock(rq);  		delta_exec = rq->clock - p->se.exec_start;  		if ((s64)delta_exec > 0) -			ns += delta_exec; +			ns = delta_exec;  	} +  	task_rq_unlock(rq, &flags);  	return ns; @@ -4085,6 +4083,7 @@ void account_user_time(struct task_struct *p, cputime_t cputime)  	cputime64_t tmp;  	p->utime = cputime_add(p->utime, cputime); +	account_group_user_time(p, cputime);  	/* Add user time to cpustat. */  	tmp = cputime_to_cputime64(cputime); @@ -4109,6 +4108,7 @@ static void account_guest_time(struct task_struct *p, cputime_t cputime)  	tmp = cputime_to_cputime64(cputime);  	p->utime = cputime_add(p->utime, cputime); +	account_group_user_time(p, cputime);  	p->gtime = cputime_add(p->gtime, cputime);  	cpustat->user = cputime64_add(cpustat->user, tmp); @@ -4144,6 +4144,7 @@ void account_system_time(struct task_struct *p, int hardirq_offset,  	}  	p->stime = cputime_add(p->stime, cputime); +	account_group_system_time(p, cputime);  	/* Add system time to cpustat. */  	tmp = cputime_to_cputime64(cputime); @@ -4185,6 +4186,7 @@ void account_steal_time(struct task_struct *p, cputime_t steal)  	if (p == rq->idle) {  		p->stime = cputime_add(p->stime, steal); +		account_group_system_time(p, steal);  		if (atomic_read(&rq->nr_iowait) > 0)  			cpustat->iowait = cputime64_add(cpustat->iowait, tmp);  		else  |