Do you think we should add the same change to dumpstack_64.c too. Looks like you addressed Alan's comments already (i.e. use of unlikely not needed, us %p, and use pr_warn instead of printk)
--mark > -----Original Message----- > From: Liu, Chuansheng > Sent: Sunday, August 26, 2012 6:56 PM > To: 'linux-kernel@vger.kernel.org' (linux-kernel@vger.kernel.org) > Cc: h...@linux.intel.com; Gross, Mark; a...@linux.intel.com > Subject: [PATCH RESEND] x86_dump_trace: avoiding endless " <IRQ> " is > printed > > From: liu chuansheng <chuansheng....@intel.com> > Subject: [PATCH] x86_dump_trace: avoiding endless " <IRQ> " is printed > > Found the case that endless " <IRQ> " printing in dump_trace, and no real > meaningful stack traces are output, so there should be one rare case that > possibly context->previous_esp = context or other cases. > > The endless " <IRQ> " is as below: > ... > [ 82.215244,0] <IRQ> > [ 82.215399,0] <IRQ> > [ 82.215554,0] <IRQ> > [ 82.215710,0] <IRQ> > [ 82.215865,0] <IRQ> > [ 82.216022,0] <IRQ> > [ 82.216178,0] <IRQ> > [ 82.216333,0] <IRQ> > [ 82.216488,0] <IRQ> > [ 82.216643,0] <IRQ> > [ 82.216798,0] <IRQ> > [ 82.216953,0] <IRQ> > ... > > This patch aim is: > 1/ Limiting the " <IRQ> " outputing, currently the max IRQ contexts is > 2(softirq+harirq combination); 2/ When the max IRQ contexts 2 is reached, > print the context content to confirm; > > Change-Id: I6d72aa71c4c5ff8f9e6ae133b3f6bfec8887750d > Signed-off-by: liu chuansheng <chuansheng....@intel.com> > --- > arch/x86/kernel/dumpstack_32.c | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kernel/dumpstack_32.c > b/arch/x86/kernel/dumpstack_32.c index 1038a41..410fa38 100644 > --- a/arch/x86/kernel/dumpstack_32.c > +++ b/arch/x86/kernel/dumpstack_32.c > @@ -22,6 +22,7 @@ void dump_trace(struct task_struct *task, struct pt_regs > *regs, > const struct stacktrace_ops *ops, void *data) { > int graph = 0; > + int dump_irq_count = 0; > > if (!task) > task = current; > @@ -47,8 +48,18 @@ void dump_trace(struct task_struct *task, struct > pt_regs *regs, > stack = (unsigned long *)context->previous_esp; > if (!stack) > break; > + > + if (dump_irq_count > 2) { > + pr_warn("break multi-IRQ print," > + "context=%p, stack=%p\n", > + context, > + stack); > + break; > + } > + > if (ops->stack(data, "IRQ") < 0) > break; > + dump_irq_count++; > touch_nmi_watchdog(); > } > } > -- > 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/