Skip to content

Commit

Permalink
sparc64: Fix SMP bootup with CONFIG_STACK_DEBUG or ftrace.
Browse files Browse the repository at this point in the history
Based upon a report by Meelis Roos.

Any function call can try to access the current
thread register via the _mcount hooks when the kernel
is built with -pg (via ftrace or STACK_DEBUG).

That can't be setup properly very early on during
the bootup of other cpus for sun4u and some early
sun4v systems.

So add notrace markers to these specific functions, so
that _mcount doesn't get invoked too early.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
davem330 committed Sep 16, 2008
1 parent f948cc6 commit 9843099
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
5 changes: 3 additions & 2 deletions arch/sparc64/kernel/irq.c
Expand Up @@ -7,6 +7,7 @@

#include <linux/module.h>
#include <linux/sched.h>
#include <linux/linkage.h>
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/kernel_stat.h>
Expand Down Expand Up @@ -866,7 +867,7 @@ static void kill_prom_timer(void)
: "g1", "g2");
}

void init_irqwork_curcpu(void)
void notrace init_irqwork_curcpu(void)
{
int cpu = hard_smp_processor_id();

Expand Down Expand Up @@ -897,7 +898,7 @@ static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type
}
}

void __cpuinit sun4v_register_mondo_queues(int this_cpu)
void __cpuinit notrace sun4v_register_mondo_queues(int this_cpu)
{
struct trap_per_cpu *tb = &trap_block[this_cpu];

Expand Down
3 changes: 2 additions & 1 deletion arch/sparc64/kernel/traps.c
Expand Up @@ -10,6 +10,7 @@

#include <linux/module.h>
#include <linux/sched.h>
#include <linux/linkage.h>
#include <linux/kernel.h>
#include <linux/signal.h>
#include <linux/smp.h>
Expand Down Expand Up @@ -2453,7 +2454,7 @@ struct trap_per_cpu trap_block[NR_CPUS];
/* This can get invoked before sched_init() so play it super safe
* and use hard_smp_processor_id().
*/
void init_cur_cpu_trap(struct thread_info *t)
void notrace init_cur_cpu_trap(struct thread_info *t)
{
int cpu = hard_smp_processor_id();
struct trap_per_cpu *p = &trap_block[cpu];
Expand Down

0 comments on commit 9843099

Please sign in to comment.