]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[PATCH] x86: Some preparationary cleanup for stack trace
authorAndi Kleen <ak@suse.de>
Tue, 26 Sep 2006 08:52:34 +0000 (10:52 +0200)
committerAndi Kleen <andi@basil.nowhere.org>
Tue, 26 Sep 2006 08:52:34 +0000 (10:52 +0200)
- Remove unused all_contexts parameter
No caller used it
- Move skip argument into the structure (needed for
followon patches)

Cc: mingo@elte.hu
Signed-off-by: Andi Kleen <ak@suse.de>
arch/i386/kernel/stacktrace.c
arch/s390/kernel/stacktrace.c
arch/x86_64/kernel/stacktrace.c
include/linux/stacktrace.h
kernel/lockdep.c

index e62a037ab39985b1494599c0a9d2e47b0a493c89..ae3c32a87adde3c7871f0724525e22a019d2eb2a 100644 (file)
@@ -61,12 +61,8 @@ save_context_stack(struct stack_trace *trace, unsigned int skip,
 
 /*
  * Save stack-backtrace addresses into a stack_trace buffer.
- * If all_contexts is set, all contexts (hardirq, softirq and process)
- * are saved. If not set then only the current context is saved.
  */
-void save_stack_trace(struct stack_trace *trace,
-                     struct task_struct *task, int all_contexts,
-                     unsigned int skip)
+void save_stack_trace(struct stack_trace *trace, struct task_struct *task)
 {
        unsigned long ebp;
        unsigned long *stack = &ebp;
@@ -85,10 +81,9 @@ void save_stack_trace(struct stack_trace *trace,
                struct thread_info *context = (struct thread_info *)
                                ((unsigned long)stack & (~(THREAD_SIZE - 1)));
 
-               ebp = save_context_stack(trace, skip, context, stack, ebp);
+               ebp = save_context_stack(trace, trace->skip, context, stack, ebp);
                stack = (unsigned long *)context->previous_esp;
-               if (!all_contexts || !stack ||
-                               trace->nr_entries >= trace->max_entries)
+               if (!stack || trace->nr_entries >= trace->max_entries)
                        break;
                trace->entries[trace->nr_entries++] = ULONG_MAX;
                if (trace->nr_entries >= trace->max_entries)
index de83f38288d08b1116f11a5ccfb6836af045f338..d9428a0fc8fb9ee3011f90f35f74a3be97bee70e 100644 (file)
@@ -59,9 +59,7 @@ static inline unsigned long save_context_stack(struct stack_trace *trace,
        }
 }
 
-void save_stack_trace(struct stack_trace *trace,
-                     struct task_struct *task, int all_contexts,
-                     unsigned int skip)
+void save_stack_trace(struct stack_trace *trace, struct task_struct *task)
 {
        register unsigned long sp asm ("15");
        unsigned long orig_sp;
@@ -69,22 +67,23 @@ void save_stack_trace(struct stack_trace *trace,
        sp &= PSW_ADDR_INSN;
        orig_sp = sp;
 
-       sp = save_context_stack(trace, &skip, sp,
+       sp = save_context_stack(trace, &trace->skip, sp,
                                S390_lowcore.panic_stack - PAGE_SIZE,
                                S390_lowcore.panic_stack);
-       if ((sp != orig_sp) && !all_contexts)
+       if ((sp != orig_sp) && !trace->all_contexts)
                return;
-       sp = save_context_stack(trace, &skip, sp,
+       sp = save_context_stack(trace, &trace->skip, sp,
                                S390_lowcore.async_stack - ASYNC_SIZE,
                                S390_lowcore.async_stack);
-       if ((sp != orig_sp) && !all_contexts)
+       if ((sp != orig_sp) && !trace->all_contexts)
                return;
        if (task)
-               save_context_stack(trace, &skip, sp,
+               save_context_stack(trace, &trace->skip, sp,
                                   (unsigned long) task_stack_page(task),
                                   (unsigned long) task_stack_page(task) + THREAD_SIZE);
        else
-               save_context_stack(trace, &skip, sp, S390_lowcore.thread_info,
+               save_context_stack(trace, &trace->skip, sp,
+                                  S390_lowcore.thread_info,
                                   S390_lowcore.thread_info + THREAD_SIZE);
        return;
 }
index 32cf55eb9af87b33259afe4537504b958ebe6b53..1c022af8fe1eb22ff7935928598ffb2b299b589d 100644 (file)
@@ -109,9 +109,10 @@ out_restore:
  * Save stack-backtrace addresses into a stack_trace buffer:
  */
 static inline unsigned long
-save_context_stack(struct stack_trace *trace, unsigned int skip,
+save_context_stack(struct stack_trace *trace,
                   unsigned long stack, unsigned long stack_end)
 {
+       int skip = trace->skip;
        unsigned long addr;
 
 #ifdef CONFIG_FRAME_POINTER
@@ -159,12 +160,8 @@ save_context_stack(struct stack_trace *trace, unsigned int skip,
 
 /*
  * Save stack-backtrace addresses into a stack_trace buffer.
- * If all_contexts is set, all contexts (hardirq, softirq and process)
- * are saved. If not set then only the current context is saved.
  */
-void save_stack_trace(struct stack_trace *trace,
-                     struct task_struct *task, int all_contexts,
-                     unsigned int skip)
+void save_stack_trace(struct stack_trace *trace, struct task_struct *task)
 {
        unsigned long stack = (unsigned long)&stack;
        int i, nr_stacks = 0, stacks_done[MAX_STACKS];
@@ -207,9 +204,8 @@ void save_stack_trace(struct stack_trace *trace,
                                return;
                stacks_done[nr_stacks] = stack_end;
 
-               stack = save_context_stack(trace, skip, stack, stack_end);
-               if (!all_contexts || !stack ||
-                               trace->nr_entries >= trace->max_entries)
+               stack = save_context_stack(trace, stack, stack_end);
+               if (!stack || trace->nr_entries >= trace->max_entries)
                        return;
                trace->entries[trace->nr_entries++] = ULONG_MAX;
                if (trace->nr_entries >= trace->max_entries)
index 9cc81e5722245e6d99bf09f56b0b43ce8895837b..50e2b01e517cc3c9bdf3af4b328c4afb8d3aab21 100644 (file)
@@ -5,15 +5,16 @@
 struct stack_trace {
        unsigned int nr_entries, max_entries;
        unsigned long *entries;
+       int skip;       /* input argument: How many entries to skip */
+       int all_contexts; /* input argument: if true do than one stack */
 };
 
 extern void save_stack_trace(struct stack_trace *trace,
-                            struct task_struct *task, int all_contexts,
-                            unsigned int skip);
+                            struct task_struct *task);
 
 extern void print_stack_trace(struct stack_trace *trace, int spaces);
 #else
-# define save_stack_trace(trace, task, all, skip)      do { } while (0)
+# define save_stack_trace(trace, task)                 do { } while (0)
 # define print_stack_trace(trace)                      do { } while (0)
 #endif
 
index 9bad178845135fba9f6b76ac59d408b723c5b5bc..900b4cb1a0245a9e926b921e4e49dfdd107a73ae 100644 (file)
@@ -224,7 +224,10 @@ static int save_trace(struct stack_trace *trace)
        trace->max_entries = MAX_STACK_TRACE_ENTRIES - nr_stack_trace_entries;
        trace->entries = stack_trace + nr_stack_trace_entries;
 
-       save_stack_trace(trace, NULL, 0, 3);
+       trace->skip = 3;
+       trace->all_contexts = 0;
+
+       save_stack_trace(trace, NULL);
 
        trace->max_entries = trace->nr_entries;