The patch titled Subject: dump_stack: serialize the output from dump_stack() has been added to the -mm tree. Its filename is dump_stack-serialize-the-output-from-dump_stack.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Alex Thorlton <athorlton@xxxxxxx> Subject: dump_stack: serialize the output from dump_stack() tAdd adds functionality to serialize the output from dump_stack() to avoid mangling of the output when dump_stack is called simultaneously from multiple cpus. Signed-off-by: Alex Thorlton <athorlton@xxxxxxx> Reported-by: Russ Anderson <rja@xxxxxxx> Reviewed-by: Robin Holt <holt@xxxxxxx> Cc: Vineet Gupta <vgupta@xxxxxxxxxxxx> Cc: David S. Miller <davem@xxxxxxxxxxxxx> Cc: Richard Kuo <rkuo@xxxxxxxxxxxxxx> Cc: Jesper Nilsson <jesper.nilsson@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- lib/dump_stack.c | 49 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff -puN lib/dump_stack.c~dump_stack-serialize-the-output-from-dump_stack lib/dump_stack.c --- a/lib/dump_stack.c~dump_stack-serialize-the-output-from-dump_stack +++ a/lib/dump_stack.c @@ -6,15 +6,62 @@ #include <linux/kernel.h> #include <linux/export.h> #include <linux/sched.h> +#include <asm/processor.h> +#include <asm/atomic.h> + +#ifdef CONFIG_SMP +#include <linux/smp.h> +#endif /** * dump_stack - dump the current task information and its stack trace * * Architectures can override this implementation by implementing its own. */ +#ifdef CONFIG_SMP +static atomic_t dump_lock = ATOMIC_INIT(-1); + void dump_stack(void) { + int was_locked; + int old; + int cpu; + + /* + * Permit this cpu to perform nested stack dumps while serialising + * against other CPUs + */ + preempt_disable(); + +retry: + cpu = smp_processor_id(); + old = atomic_cmpxchg(&dump_lock, -1, cpu); + if (old == -1) { + was_locked = 0; + } else if (old == cpu) { + was_locked = 1; + } else { + cpu_relax(); + goto retry; + } + + __dump_stack(); + + if (!was_locked) + atomic_set(&dump_lock, -1); + + preempt_enable(); +} +#else +void dump_stack(void) +{ + __dump_stack(); +} +#endif +EXPORT_SYMBOL(dump_stack); + +static void __dump_stack(void) +{ dump_stack_print_info(KERN_DEFAULT); show_stack(NULL, NULL); } -EXPORT_SYMBOL(dump_stack); _ Patches currently in -mm which might be from athorlton@xxxxxxx are origin.patch dump_stack-serialize-the-output-from-dump_stack.patch dump_stack-serialize-the-output-from-dump_stack-fix.patch panic-add-cpu-pid-to-warn_slowpath_common-in-warning-printks.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html