public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Patch: ARM show_trace_task and show_task cleanup
@ 2001-06-24 13:33 Russell King
  2001-06-24 13:48 ` Keith Owens
  0 siblings, 1 reply; 3+ messages in thread
From: Russell King @ 2001-06-24 13:33 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel

Linus,

(CC:'d to lkml in case someone wants to object to the show_task() cleanup;
Alan has accepted it many -ac versions ago into his tree, and is happy for
me to send it on).

The following patch adds ARM support for show_trace_task() and changes
die() to display the instruction trace as ksymoops expects it (code
line last).

In addition, it cleans up show_task so that the displayed data is aligned
with the header that show_state displays:

1. We have some kernel tasks with more than 8 characters in their name.
2. Lazy-TLB state is shown at the end of each line, not in the middle of
   the PID lists.

diff -urN linux-orig/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
--- linux-orig/arch/arm/kernel/traps.c	Thu Feb 22 11:24:58 2001
+++ linux/arch/arm/kernel/traps.c	Thu Jun 21 11:54:53 2001
@@ -20,6 +20,7 @@
 #include <linux/mm.h>
 #include <linux/spinlock.h>
 #include <linux/ptrace.h>
+#include <linux/elf.h>
 #include <linux/init.h>
 
 #include <asm/atomic.h>
@@ -27,6 +28,7 @@
 #include <asm/pgtable.h>
 #include <asm/system.h>
 #include <asm/uaccess.h>
+#include <asm/unistd.h>
 
 #include "ptrace.h"
 
@@ -143,6 +145,18 @@
 		c_backtrace(fp, processor_mode(regs));
 }
 
+/*
+ * This is called from SysRq-T (show_task) to display the current
+ * call trace for each process.  Very useful.
+ */
+void show_trace_task(struct task_struct *tsk)
+{
+	if (tsk != current) {
+		unsigned int fp = tsk->thread.save->fp;
+		c_backtrace(fp, 0x10);
+	}
+}
+
 spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
 
 /*
@@ -173,9 +187,9 @@
 		fs = get_fs();
 		set_fs(KERNEL_DS);
 
-		dump_instr(regs);
 		dump_stack(tsk, (unsigned long)(regs + 1));
 		dump_backtrace(regs, tsk);
+		dump_instr(regs);
 
 		set_fs(fs);
 	}
diff -urN linux-orig/kernel/sched.c linux/kernel/sched.c
--- linux-orig/kernel/sched.c	Sun May 20 15:09:47 2001
+++ linux/kernel/sched.c	Sun Jun 10 19:58:42 2001
@@ -1104,7 +1104,7 @@
 	int state;
 	static const char * stat_nam[] = { "R", "S", "D", "Z", "T", "W" };
 
-	printk("%-8s  ", p->comm);
+	printk("%-13.13s ", p->comm);
 	state = p->state ? ffz(~p->state) + 1 : 0;
 	if (((unsigned) state) < sizeof(stat_nam)/sizeof(char *))
 		printk(stat_nam[state]);
@@ -1132,20 +1132,20 @@
 		printk("%5d ", p->p_cptr->pid);
 	else
 		printk("      ");
-	if (!p->mm)
-		printk(" (L-TLB) ");
-	else
-		printk(" (NOTLB) ");
 	if (p->p_ysptr)
 		printk("%7d", p->p_ysptr->pid);
 	else
 		printk("       ");
 	if (p->p_osptr)
-		printk(" %5d\n", p->p_osptr->pid);
+		printk(" %5d", p->p_osptr->pid);
+	else
+		printk("      ");
+	if (!p->mm)
+		printk(" (L-TLB)\n");
 	else
-		printk("\n");
+		printk(" (NOTLB)\n");
 
-#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
+#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_ARM)
 /* This is very useful, but only works on x86 and sparc64 right now */
 	{
 		extern void show_trace_task(struct task_struct *tsk);



--
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Patch: ARM show_trace_task and show_task cleanup
  2001-06-24 13:33 Patch: ARM show_trace_task and show_task cleanup Russell King
@ 2001-06-24 13:48 ` Keith Owens
  2001-06-24 14:19   ` Russell King
  0 siblings, 1 reply; 3+ messages in thread
From: Keith Owens @ 2001-06-24 13:48 UTC (permalink / raw)
  To: Russell King; +Cc: linux-kernel

On Sun, 24 Jun 2001 14:33:56 +0100, 
Russell King <rmk@arm.linux.org.uk> wrote:
>The following patch adds ARM support for show_trace_task() and changes
>die() to display the instruction trace as ksymoops expects it (code
>line last).

Thanks.

>-#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
>+#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_ARM)
> /* This is very useful, but only works on x86 and sparc64 right now */

<nitpick>Comment needs updating</nitpick>


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Patch: ARM show_trace_task and show_task cleanup
  2001-06-24 13:48 ` Keith Owens
@ 2001-06-24 14:19   ` Russell King
  0 siblings, 0 replies; 3+ messages in thread
From: Russell King @ 2001-06-24 14:19 UTC (permalink / raw)
  To: Keith Owens, torvalds; +Cc: linux-kernel

On Sun, Jun 24, 2001 at 11:48:03PM +1000, Keith Owens wrote:
> On Sun, 24 Jun 2001 14:33:56 +0100, 
> Russell King <rmk@arm.linux.org.uk> wrote:
> >-#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
> >+#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_ARM)
> > /* This is very useful, but only works on x86 and sparc64 right now */
> 
> <nitpick>Comment needs updating</nitpick>

Here's a new patch to keep the nitpickers quiet. ;)

Linus,

Please disregard the previous patch if you haven't applied it already and
apply this one instead; if you have applied it, then I'll wait for the next
pre-patch and send a new diff.

diff -urN linux-orig/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
--- linux-orig/arch/arm/kernel/traps.c	Thu Feb 22 11:24:58 2001
+++ linux/arch/arm/kernel/traps.c	Thu Jun 21 11:54:53 2001
@@ -20,6 +20,7 @@
 #include <linux/mm.h>
 #include <linux/spinlock.h>
 #include <linux/ptrace.h>
+#include <linux/elf.h>
 #include <linux/init.h>
 
 #include <asm/atomic.h>
@@ -27,6 +28,7 @@
 #include <asm/pgtable.h>
 #include <asm/system.h>
 #include <asm/uaccess.h>
+#include <asm/unistd.h>
 
 #include "ptrace.h"
 
@@ -143,12 +145,24 @@
 		c_backtrace(fp, processor_mode(regs));
 }
 
+/*
+ * This is called from SysRq-T (show_task) to display the current
+ * call trace for each process.  Very useful.
+ */
+void show_trace_task(struct task_struct *tsk)
+{
+	if (tsk != current) {
+		unsigned int fp = tsk->thread.save->fp;
+		c_backtrace(fp, 0x10);
+	}
+}
+
 spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
 
 /*
  * This function is protected against re-entrancy.
  */
-void die(const char *str, struct pt_regs *regs, int err)
+NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
 {
 	struct task_struct *tsk = current;
 
@@ -173,9 +187,9 @@
 		fs = get_fs();
 		set_fs(KERNEL_DS);
 
-		dump_instr(regs);
 		dump_stack(tsk, (unsigned long)(regs + 1));
 		dump_backtrace(regs, tsk);
+		dump_instr(regs);
 
 		set_fs(fs);
 	}
diff -urN linux-orig/kernel/sched.c linux/kernel/sched.c
--- linux-orig/kernel/sched.c	Sun May 20 15:09:47 2001
+++ linux/kernel/sched.c	Sun Jun 24 15:16:43 2001
@@ -1104,7 +1104,7 @@
 	int state;
 	static const char * stat_nam[] = { "R", "S", "D", "Z", "T", "W" };
 
-	printk("%-8s  ", p->comm);
+	printk("%-13.13s ", p->comm);
 	state = p->state ? ffz(~p->state) + 1 : 0;
 	if (((unsigned) state) < sizeof(stat_nam)/sizeof(char *))
 		printk(stat_nam[state]);
@@ -1132,21 +1132,21 @@
 		printk("%5d ", p->p_cptr->pid);
 	else
 		printk("      ");
-	if (!p->mm)
-		printk(" (L-TLB) ");
-	else
-		printk(" (NOTLB) ");
 	if (p->p_ysptr)
 		printk("%7d", p->p_ysptr->pid);
 	else
 		printk("       ");
 	if (p->p_osptr)
-		printk(" %5d\n", p->p_osptr->pid);
+		printk(" %5d", p->p_osptr->pid);
+	else
+		printk("      ");
+	if (!p->mm)
+		printk(" (L-TLB)\n");
 	else
-		printk("\n");
+		printk(" (NOTLB)\n");
 
-#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
-/* This is very useful, but only works on x86 and sparc64 right now */
+#if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_ARM)
+/* This is very useful, but only works on ARM, x86 and sparc64 right now */
 	{
 		extern void show_trace_task(struct task_struct *tsk);
 		show_trace_task(p);


--
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-06-24 14:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-06-24 13:33 Patch: ARM show_trace_task and show_task cleanup Russell King
2001-06-24 13:48 ` Keith Owens
2001-06-24 14:19   ` Russell King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox