Loading arch/x86/kernel/entry_32.S +1 −4 Original line number Diff line number Diff line Loading @@ -1217,12 +1217,9 @@ trace_return: pushl %eax pushl %ecx pushl %edx movl 0xc(%esp), %eax pushl %eax movl 0xc(%esp), %edx lea 0x4(%ebp), %eax pushl %eax call prepare_ftrace_return addl $8, %esp popl %edx popl %ecx popl %eax Loading arch/x86/kernel/ftrace.c +5 −39 Original line number Diff line number Diff line Loading @@ -44,62 +44,37 @@ void ftrace_nmi_exit(void) atomic_dec(&in_nmi); } /* * Synchronize accesses to return adresses stack with * interrupts. */ static raw_spinlock_t ret_stack_lock; /* Add a function return address to the trace stack on thread info.*/ static int push_return_trace(unsigned long ret, unsigned long long time, unsigned long func) { int index; struct thread_info *ti; unsigned long flags; int err = 0; raw_local_irq_save(flags); __raw_spin_lock(&ret_stack_lock); struct thread_info *ti = current_thread_info(); ti = current_thread_info(); /* The return trace stack is full */ if (ti->curr_ret_stack == FTRACE_RET_STACK_SIZE - 1) { err = -EBUSY; goto out; } if (ti->curr_ret_stack == FTRACE_RET_STACK_SIZE - 1) return -EBUSY; index = ++ti->curr_ret_stack; ti->ret_stack[index].ret = ret; ti->ret_stack[index].func = func; ti->ret_stack[index].calltime = time; out: __raw_spin_unlock(&ret_stack_lock); raw_local_irq_restore(flags); return err; return 0; } /* Retrieve a function return address to the trace stack on thread info.*/ static void pop_return_trace(unsigned long *ret, unsigned long long *time, unsigned long *func) { struct thread_info *ti; int index; unsigned long flags; raw_local_irq_save(flags); __raw_spin_lock(&ret_stack_lock); ti = current_thread_info(); struct thread_info *ti = current_thread_info(); index = ti->curr_ret_stack; *ret = ti->ret_stack[index].ret; *func = ti->ret_stack[index].func; *time = ti->ret_stack[index].calltime; ti->curr_ret_stack--; __raw_spin_unlock(&ret_stack_lock); raw_local_irq_restore(flags); } /* Loading @@ -120,7 +95,6 @@ unsigned long ftrace_return_to_handler(void) * Hook the return address and push it in the stack of return addrs * in current thread info. */ asmlinkage void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) { unsigned long old; Loading Loading @@ -175,14 +149,6 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) *parent = old; } static int __init init_ftrace_function_return(void) { ret_stack_lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; return 0; } device_initcall(init_ftrace_function_return); #endif #ifdef CONFIG_DYNAMIC_FTRACE Loading kernel/trace/ring_buffer.c +7 −1 Original line number Diff line number Diff line Loading @@ -53,8 +53,14 @@ void tracing_off(void) /* FIXME!!! */ u64 ring_buffer_time_stamp(int cpu) { u64 time; preempt_disable_notrace(); /* shift to debug/test normalization and TIME_EXTENTS */ return sched_clock() << DEBUG_SHIFT; time = sched_clock() << DEBUG_SHIFT; preempt_enable_notrace(); return time; } void ring_buffer_normalize_time_stamp(int cpu, u64 *ts) Loading scripts/bootgraph.pl +2 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,8 @@ my $stylecounter = 0; my %rows; my $rowscount = 1; my @initcalls = sort { $start{$a} <=> $start{$b} } keys(%start); my $key; foreach $key (@initcalls) { foreach my $key (@initcalls) { my $duration = $end{$key} - $start{$key}; if ($duration >= $threshold) { Loading Loading
arch/x86/kernel/entry_32.S +1 −4 Original line number Diff line number Diff line Loading @@ -1217,12 +1217,9 @@ trace_return: pushl %eax pushl %ecx pushl %edx movl 0xc(%esp), %eax pushl %eax movl 0xc(%esp), %edx lea 0x4(%ebp), %eax pushl %eax call prepare_ftrace_return addl $8, %esp popl %edx popl %ecx popl %eax Loading
arch/x86/kernel/ftrace.c +5 −39 Original line number Diff line number Diff line Loading @@ -44,62 +44,37 @@ void ftrace_nmi_exit(void) atomic_dec(&in_nmi); } /* * Synchronize accesses to return adresses stack with * interrupts. */ static raw_spinlock_t ret_stack_lock; /* Add a function return address to the trace stack on thread info.*/ static int push_return_trace(unsigned long ret, unsigned long long time, unsigned long func) { int index; struct thread_info *ti; unsigned long flags; int err = 0; raw_local_irq_save(flags); __raw_spin_lock(&ret_stack_lock); struct thread_info *ti = current_thread_info(); ti = current_thread_info(); /* The return trace stack is full */ if (ti->curr_ret_stack == FTRACE_RET_STACK_SIZE - 1) { err = -EBUSY; goto out; } if (ti->curr_ret_stack == FTRACE_RET_STACK_SIZE - 1) return -EBUSY; index = ++ti->curr_ret_stack; ti->ret_stack[index].ret = ret; ti->ret_stack[index].func = func; ti->ret_stack[index].calltime = time; out: __raw_spin_unlock(&ret_stack_lock); raw_local_irq_restore(flags); return err; return 0; } /* Retrieve a function return address to the trace stack on thread info.*/ static void pop_return_trace(unsigned long *ret, unsigned long long *time, unsigned long *func) { struct thread_info *ti; int index; unsigned long flags; raw_local_irq_save(flags); __raw_spin_lock(&ret_stack_lock); ti = current_thread_info(); struct thread_info *ti = current_thread_info(); index = ti->curr_ret_stack; *ret = ti->ret_stack[index].ret; *func = ti->ret_stack[index].func; *time = ti->ret_stack[index].calltime; ti->curr_ret_stack--; __raw_spin_unlock(&ret_stack_lock); raw_local_irq_restore(flags); } /* Loading @@ -120,7 +95,6 @@ unsigned long ftrace_return_to_handler(void) * Hook the return address and push it in the stack of return addrs * in current thread info. */ asmlinkage void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) { unsigned long old; Loading Loading @@ -175,14 +149,6 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) *parent = old; } static int __init init_ftrace_function_return(void) { ret_stack_lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; return 0; } device_initcall(init_ftrace_function_return); #endif #ifdef CONFIG_DYNAMIC_FTRACE Loading
kernel/trace/ring_buffer.c +7 −1 Original line number Diff line number Diff line Loading @@ -53,8 +53,14 @@ void tracing_off(void) /* FIXME!!! */ u64 ring_buffer_time_stamp(int cpu) { u64 time; preempt_disable_notrace(); /* shift to debug/test normalization and TIME_EXTENTS */ return sched_clock() << DEBUG_SHIFT; time = sched_clock() << DEBUG_SHIFT; preempt_enable_notrace(); return time; } void ring_buffer_normalize_time_stamp(int cpu, u64 *ts) Loading
scripts/bootgraph.pl +2 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,8 @@ my $stylecounter = 0; my %rows; my $rowscount = 1; my @initcalls = sort { $start{$a} <=> $start{$b} } keys(%start); my $key; foreach $key (@initcalls) { foreach my $key (@initcalls) { my $duration = $end{$key} - $start{$key}; if ($duration >= $threshold) { Loading