]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tracing: Remove the ULONG_MAX stack trace hackery
authorThomas Gleixner <tglx@linutronix.de>
Wed, 10 Apr 2019 10:28:10 +0000 (12:28 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 14 Apr 2019 17:58:32 +0000 (19:58 +0200)
No architecture terminates the stack trace with ULONG_MAX anymore. As the
code checks the number of entries stored anyway there is no point in
keeping all that ULONG_MAX magic around.

The histogram code zeroes the storage before saving the stack, so if the
trace is shorter than the maximum number of entries it can terminate the
print loop if a zero entry is detected.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Alexander Potapenko <glider@google.com>
Link: https://lkml.kernel.org/r/20190410103645.048761764@linutronix.de
kernel/trace/trace_events_hist.c
kernel/trace/trace_stack.c

index 795aa203837733f6968f26ae1f8f4ca7b399f695..21ceae299f7eb6a8bd8e38795428488f52da5cbd 100644 (file)
@@ -5246,7 +5246,7 @@ static void hist_trigger_stacktrace_print(struct seq_file *m,
        unsigned int i;
 
        for (i = 0; i < max_entries; i++) {
-               if (stacktrace_entries[i] == ULONG_MAX)
+               if (!stacktrace_entries[i])
                        return;
 
                seq_printf(m, "%*c", 1 + spaces, ' ');
index eec648a0d673bed8d8ccc9ff2491ba71d7710871..c6e54ff25caea092fb6f498ddb1ecf45140c9fe1 100644 (file)
@@ -18,8 +18,7 @@
 
 #include "trace.h"
 
-static unsigned long stack_dump_trace[STACK_TRACE_ENTRIES+1] =
-        { [0 ... (STACK_TRACE_ENTRIES)] = ULONG_MAX };
+static unsigned long stack_dump_trace[STACK_TRACE_ENTRIES + 1];
 unsigned stack_trace_index[STACK_TRACE_ENTRIES];
 
 /*
@@ -52,10 +51,7 @@ void stack_trace_print(void)
                           stack_trace_max.nr_entries);
 
        for (i = 0; i < stack_trace_max.nr_entries; i++) {
-               if (stack_dump_trace[i] == ULONG_MAX)
-                       break;
-               if (i+1 == stack_trace_max.nr_entries ||
-                               stack_dump_trace[i+1] == ULONG_MAX)
+               if (i + 1 == stack_trace_max.nr_entries)
                        size = stack_trace_index[i];
                else
                        size = stack_trace_index[i] - stack_trace_index[i+1];
@@ -150,8 +146,6 @@ check_stack(unsigned long ip, unsigned long *stack)
                p = start;
 
                for (; p < top && i < stack_trace_max.nr_entries; p++) {
-                       if (stack_dump_trace[i] == ULONG_MAX)
-                               break;
                        /*
                         * The READ_ONCE_NOCHECK is used to let KASAN know that
                         * this is not a stack-out-of-bounds error.
@@ -183,8 +177,6 @@ check_stack(unsigned long ip, unsigned long *stack)
        }
 
        stack_trace_max.nr_entries = x;
-       for (; x < i; x++)
-               stack_dump_trace[x] = ULONG_MAX;
 
        if (task_stack_end_corrupted(current)) {
                stack_trace_print();
@@ -286,7 +278,7 @@ __next(struct seq_file *m, loff_t *pos)
 {
        long n = *pos - 1;
 
-       if (n >= stack_trace_max.nr_entries || stack_dump_trace[n] == ULONG_MAX)
+       if (n >= stack_trace_max.nr_entries)
                return NULL;
 
        m->private = (void *)n;
@@ -360,12 +352,10 @@ static int t_show(struct seq_file *m, void *v)
 
        i = *(long *)v;
 
-       if (i >= stack_trace_max.nr_entries ||
-           stack_dump_trace[i] == ULONG_MAX)
+       if (i >= stack_trace_max.nr_entries)
                return 0;
 
-       if (i+1 == stack_trace_max.nr_entries ||
-           stack_dump_trace[i+1] == ULONG_MAX)
+       if (i + 1 == stack_trace_max.nr_entries)
                size = stack_trace_index[i];
        else
                size = stack_trace_index[i] - stack_trace_index[i+1];