Skip to contentSkip to conversation

sparc64: add function save_stack_trace_tsk()

PATCH In review Alexander Beregalov 2 participants 3 messages Nov 12, 2008 Linux-next tree

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sparc64: add function save_stack_trace_tsk()

Hi

Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'

---

Add function save_stack_trace_tsk() on sparc64.

---

 arch/sparc64/kernel/stacktrace.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)
arch/sparc64/kernel/stacktrace.c +8 -2
index 4e21d4a..a22eb8e 100644
@@ -7,9 +7,9 @@
 
 #include "kstack.h"
 
-void save_stack_trace(struct stack_trace *trace)
+void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
 {
-	struct thread_info *tp = task_thread_info(current);
+	struct thread_info *tp = task_thread_info(tsk);
 	unsigned long ksp, fp;
 
 	stack_trace_flush();
@@ -47,4 +47,10 @@ void save_stack_trace(struct stack_trace *trace)
 			trace->entries[trace->nr_entries++] = pc;
 	} while (trace->nr_entries < trace->max_entries);
 }
+EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
+
+inline void save_stack_trace(struct stack_trace *trace)
+{
+	save_stack_trace_tsk(current, trace);
+}
 EXPORT_SYMBOL_GPL(save_stack_trace);
#1 lore raw

2008/11/12 Alexander Beregalov <[email protected]>:

Quoted 8 lines

Hi

Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'

Quoted 7 lines

---

Add function save_stack_trace_tsk() on sparc64.

---

No, it does not work, it is not so simple.

#2 lore raw
In reply to Alexander Beregalov

From: Alexander Beregalov <[email protected]>
Date: Wed, 12 Nov 2008 16:47:49 +0300

Quoted 6 lines

Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'

Quoted 6 lines

---

Add function save_stack_trace_tsk() on sparc64.

This won't work as-is.

The save_stack_trace() function starts with the actual frame-pointer register in the current cpu to start winding back the stack. So when 'tsk' is not 'current' nothing will be saved. That's what this bit of code is doing:

	__asm__ __volatile__(
		"mov	%%fp, %0"
		: "=r" (ksp)
	);

	fp = ksp + STACK_BIAS;

Also, "stack_trace_flush()" should only be run when current = tsk.