Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f63e781 authored by David S. Miller's avatar David S. Miller
Browse files

sparc64: Handle stack trace attempts before irqstacks are setup.



Things like lockdep can try to do stack backtraces before
the irqstack blocks have been setup.  So don't try to match
their ranges so early on.

Also, remove unused variable in save_stack_trace().

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4f70f7a9
Loading
Loading
Loading
Loading
+20 −18
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ static inline bool kstack_valid(struct thread_info *tp, unsigned long sp)
	    sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf)))
		return true;

	if (hardirq_stack[tp->cpu]) {
		base = (unsigned long) hardirq_stack[tp->cpu];
		if (sp >= base &&
		    sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf)))
@@ -23,7 +24,7 @@ static inline bool kstack_valid(struct thread_info *tp, unsigned long sp)
		if (sp >= base &&
		    sp <= (base + THREAD_SIZE - sizeof(struct sparc_stackf)))
			return true;

	}
	return false;
}

@@ -37,6 +38,7 @@ static inline bool kstack_is_trap_frame(struct thread_info *tp, struct pt_regs *
	    addr <= (base + THREAD_SIZE - sizeof(*regs)))
		goto check_magic;

	if (hardirq_stack[tp->cpu]) {
		base = (unsigned long) hardirq_stack[tp->cpu];
		if (addr >= base &&
		    addr <= (base + THREAD_SIZE - sizeof(*regs)))
@@ -45,7 +47,7 @@ static inline bool kstack_is_trap_frame(struct thread_info *tp, struct pt_regs *
		if (addr >= base &&
		    addr <= (base + THREAD_SIZE - sizeof(*regs)))
			goto check_magic;

	}
	return false;

check_magic:
+1 −2
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@

void save_stack_trace(struct stack_trace *trace)
{
	unsigned long ksp, fp, thread_base;
	struct thread_info *tp = task_thread_info(current);
	unsigned long ksp, fp;

	stack_trace_flush();

@@ -20,7 +20,6 @@ void save_stack_trace(struct stack_trace *trace)
	);

	fp = ksp + STACK_BIAS;
	thread_base = (unsigned long) tp;
	do {
		struct sparc_stackf *sf;
		struct pt_regs *regs;