Skip to content
Snippets Groups Projects
Select Git revision
  • 83eaddab4378db256d00d295bda6ca997cd13a52
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

tcp_ipv6.c

Blame
  • trace_stack.c 7.51 KiB
    /*
     * Copyright (C) 2008 Steven Rostedt <srostedt@redhat.com>
     *
     */
    #include <linux/stacktrace.h>
    #include <linux/kallsyms.h>
    #include <linux/seq_file.h>
    #include <linux/spinlock.h>
    #include <linux/uaccess.h>
    #include <linux/debugfs.h>
    #include <linux/ftrace.h>
    #include <linux/module.h>
    #include <linux/sysctl.h>
    #include <linux/init.h>
    #include <linux/fs.h>
    #include "trace.h"
    
    #define STACK_TRACE_ENTRIES 500
    
    static unsigned long stack_dump_trace[STACK_TRACE_ENTRIES+1] =
    	 { [0 ... (STACK_TRACE_ENTRIES)] = ULONG_MAX };
    static unsigned stack_dump_index[STACK_TRACE_ENTRIES];
    
    static struct stack_trace max_stack_trace = {
    	.max_entries		= STACK_TRACE_ENTRIES,
    	.entries		= stack_dump_trace,
    };
    
    static unsigned long max_stack_size;
    static raw_spinlock_t max_stack_lock =
    	(raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED;
    
    static int stack_trace_disabled __read_mostly;
    static DEFINE_PER_CPU(int, trace_active);
    static DEFINE_MUTEX(stack_sysctl_mutex);
    
    int stack_tracer_enabled;
    static int last_stack_tracer_enabled;
    
    static inline void check_stack(void)
    {
    	unsigned long this_size, flags;
    	unsigned long *p, *top, *start;
    	int i;
    
    	this_size = ((unsigned long)&this_size) & (THREAD_SIZE-1);
    	this_size = THREAD_SIZE - this_size;
    
    	if (this_size <= max_stack_size)
    		return;
    
    	/* we do not handle interrupt stacks yet */
    	if (!object_is_on_stack(&this_size))
    		return;
    
    	local_irq_save(flags);
    	__raw_spin_lock(&max_stack_lock);
    
    	/* a race could have already updated it */
    	if (this_size <= max_stack_size)
    		goto out;
    
    	max_stack_size = this_size;
    
    	max_stack_trace.nr_entries	= 0;
    	max_stack_trace.skip		= 3;
    
    	save_stack_trace(&max_stack_trace);
    
    	/*