void (*board_ebase_setup)(void);
 void(*board_cache_error_setup)(void);
 
-static void show_raw_backtrace(unsigned long reg29)
+static void show_raw_backtrace(unsigned long reg29, const char *loglvl)
 {
        unsigned long *sp = (unsigned long *)(reg29 & ~3);
        unsigned long addr;
 
-       printk("Call Trace:");
+       printk("%sCall Trace:", loglvl);
 #ifdef CONFIG_KALLSYMS
-       printk("\n");
+       printk("%s\n", loglvl);
 #endif
        while (!kstack_end(sp)) {
                unsigned long __user *p =
                        (unsigned long __user *)(unsigned long)sp++;
                if (__get_user(addr, p)) {
-                       printk(" (Bad stack address)");
+                       printk("%s (Bad stack address)", loglvl);
                        break;
                }
                if (__kernel_text_address(addr))
-                       print_ip_sym(KERN_DEFAULT, addr);
+                       print_ip_sym(loglvl, addr);
        }
-       printk("\n");
+       printk("%s\n", loglvl);
 }
 
 #ifdef CONFIG_KALLSYMS
 __setup("raw_show_trace", set_raw_show_trace);
 #endif
 
-static void show_backtrace(struct task_struct *task, const struct pt_regs *regs)
+static void show_backtrace(struct task_struct *task, const struct pt_regs *regs,
+                          const char *loglvl)
 {
        unsigned long sp = regs->regs[29];
        unsigned long ra = regs->regs[31];
                task = current;
 
        if (raw_show_trace || user_mode(regs) || !__kernel_text_address(pc)) {
-               show_raw_backtrace(sp);
+               show_raw_backtrace(sp, loglvl);
                return;
        }
-       printk("Call Trace:\n");
+       printk("%sCall Trace:\n", loglvl);
        do {
-               print_ip_sym(KERN_DEFAULT, pc);
+               print_ip_sym(loglvl, pc);
                pc = unwind_stack(task, &sp, pc, &ra);
        } while (pc);
        pr_cont("\n");
  * with at least a bit of error checking ...
  */
 static void show_stacktrace(struct task_struct *task,
-       const struct pt_regs *regs)
+       const struct pt_regs *regs, const char *loglvl)
 {
        const int field = 2 * sizeof(unsigned long);
        long stackdata;
        int i;
        unsigned long __user *sp = (unsigned long __user *)regs->regs[29];
 
-       printk("Stack :");
+       printk("%sStack :", loglvl);
        i = 0;
        while ((unsigned long) sp & (PAGE_SIZE - 1)) {
                if (i && ((i % (64 / field)) == 0)) {
                        pr_cont("\n");
-                       printk("       ");
+                       printk("%s       ", loglvl);
                }
                if (i > 39) {
                        pr_cont(" ...");
                i++;
        }
        pr_cont("\n");
-       show_backtrace(task, regs);
+       show_backtrace(task, regs, loglvl);
 }
 
-void show_stack(struct task_struct *task, unsigned long *sp)
+void show_stack_loglvl(struct task_struct *task, unsigned long *sp,
+                      const char *loglvl)
 {
        struct pt_regs regs;
        mm_segment_t old_fs = get_fs();
         * the stack in the kernel (not user) address space.
         */
        set_fs(KERNEL_DS);
-       show_stacktrace(task, ®s);
+       show_stacktrace(task, ®s, loglvl);
        set_fs(old_fs);
 }
 
+void show_stack(struct task_struct *task, unsigned long *sp)
+{
+       show_stack_loglvl(task, sp, KERN_DEFAULT)
+}
+
 static void show_code(unsigned int __user *pc)
 {
        long i;
        if (!user_mode(regs))
                /* Necessary for getting the correct stack content */
                set_fs(KERNEL_DS);
-       show_stacktrace(current, regs);
+       show_stacktrace(current, regs, KERN_DEFAULT);
        show_code((unsigned int __user *) regs->cp0_epc);
        printk("\n");
        set_fs(old_fs);