}
 
 /*
- * The show_stack is an external API which we do not use ourselves.
+ * The show_stack(), show_stack_loglvl() are external API
+ * which we do not use ourselves.
  */
 
 int kstack_depth_to_print = 48;
 
-void show_stack(struct task_struct *task, unsigned long *stack)
+void show_stack_loglvl(struct task_struct *task, unsigned long *stack,
+                      const char *loglvl)
 {
        unsigned long *endstack, addr;
        int i;
        addr = (unsigned long) stack;
        endstack = (unsigned long *) PAGE_ALIGN(addr);
 
-       pr_emerg("Stack from %08lx:", (unsigned long)stack);
+       printk("%sStack from %08lx:", loglvl, (unsigned long)stack);
        for (i = 0; i < kstack_depth_to_print; i++) {
                if (stack + 1 > endstack)
                        break;
                if (i % 8 == 0)
-                       pr_emerg("\n       ");
-               pr_emerg(" %08lx", *stack++);
+                       printk("%s\n       ", loglvl);
+               printk("%s %08lx", loglvl, *stack++);
        }
 
-       pr_emerg("\nCall Trace:");
+       printk("%s\nCall Trace:", loglvl);
        i = 0;
        while (stack + 1 <= endstack) {
                addr = *stack++;
                     (addr <= (unsigned long) _etext))) {
                        if (i % 4 == 0)
                                pr_emerg("\n       ");
-                       pr_emerg(" [<%08lx>]", addr);
+                       printk("%s [<%08lx>]", loglvl, addr);
                        i++;
                }
        }
-       pr_emerg("\n");
+       printk("%s\n", loglvl);
+}
+
+void show_stack(struct task_struct *task, unsigned long *stack)
+{
+       show_stack_loglvl(task, stack, KERN_EMERG);
 }
 
 void __init trap_init(void)