Merge branch 'tracing/ftrace' into auto-ftrace-next
This commit is contained in:
@ -70,6 +70,7 @@
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/ftrace.h>
|
||||
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/irq_regs.h>
|
||||
@ -607,6 +608,24 @@ static inline void update_rq_clock(struct rq *rq)
|
||||
# define const_debug static const
|
||||
#endif
|
||||
|
||||
/**
|
||||
* runqueue_is_locked
|
||||
*
|
||||
* Returns true if the current cpu runqueue is locked.
|
||||
* This interface allows printk to be called with the runqueue lock
|
||||
* held and know whether or not it is OK to wake up the klogd.
|
||||
*/
|
||||
int runqueue_is_locked(void)
|
||||
{
|
||||
int cpu = get_cpu();
|
||||
struct rq *rq = cpu_rq(cpu);
|
||||
int ret;
|
||||
|
||||
ret = spin_is_locked(&rq->lock);
|
||||
put_cpu();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Debugging: various feature bits
|
||||
*/
|
||||
@ -831,7 +850,7 @@ static unsigned long long __cpu_clock(int cpu)
|
||||
* For kernel-internal use: high-speed (but slightly incorrect) per-cpu
|
||||
* clock constructed from sched_clock():
|
||||
*/
|
||||
unsigned long long cpu_clock(int cpu)
|
||||
unsigned long long notrace cpu_clock(int cpu)
|
||||
{
|
||||
unsigned long long prev_cpu_time, time, delta_time;
|
||||
unsigned long flags;
|
||||
@ -2149,6 +2168,9 @@ 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);
|
||||
check_preempt_curr(rq, p);
|
||||
|
||||
p->state = TASK_RUNNING;
|
||||
@ -2279,6 +2301,9 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
|
||||
p->sched_class->task_new(rq, p);
|
||||
inc_nr_running(p, 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);
|
||||
check_preempt_curr(rq, p);
|
||||
#ifdef CONFIG_SMP
|
||||
if (p->sched_class->task_wake_up)
|
||||
@ -2451,6 +2476,11 @@ 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);
|
||||
mm = next->mm;
|
||||
oldmm = prev->active_mm;
|
||||
/*
|
||||
@ -4021,26 +4051,44 @@ void scheduler_tick(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT)
|
||||
#if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \
|
||||
defined(CONFIG_PREEMPT_TRACER))
|
||||
|
||||
static inline unsigned long get_parent_ip(unsigned long addr)
|
||||
{
|
||||
if (in_lock_functions(addr)) {
|
||||
addr = CALLER_ADDR2;
|
||||
if (in_lock_functions(addr))
|
||||
addr = CALLER_ADDR3;
|
||||
}
|
||||
return addr;
|
||||
}
|
||||
|
||||
void __kprobes add_preempt_count(int val)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_PREEMPT
|
||||
/*
|
||||
* Underflow?
|
||||
*/
|
||||
if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))
|
||||
return;
|
||||
#endif
|
||||
preempt_count() += val;
|
||||
#ifdef CONFIG_DEBUG_PREEMPT
|
||||
/*
|
||||
* Spinlock count overflowing soon?
|
||||
*/
|
||||
DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
|
||||
PREEMPT_MASK - 10);
|
||||
#endif
|
||||
if (preempt_count() == val)
|
||||
trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
|
||||
}
|
||||
EXPORT_SYMBOL(add_preempt_count);
|
||||
|
||||
void __kprobes sub_preempt_count(int val)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_PREEMPT
|
||||
/*
|
||||
* Underflow?
|
||||
*/
|
||||
@ -4052,7 +4100,10 @@ void __kprobes sub_preempt_count(int val)
|
||||
if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) &&
|
||||
!(preempt_count() & PREEMPT_MASK)))
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (preempt_count() == val)
|
||||
trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
|
||||
preempt_count() -= val;
|
||||
}
|
||||
EXPORT_SYMBOL(sub_preempt_count);
|
||||
@ -5384,7 +5435,7 @@ out_unlock:
|
||||
return retval;
|
||||
}
|
||||
|
||||
static const char stat_nam[] = "RSDTtZX";
|
||||
static const char stat_nam[] = TASK_STATE_TO_CHAR_STR;
|
||||
|
||||
void sched_show_task(struct task_struct *p)
|
||||
{
|
||||
|
Reference in New Issue
Block a user