static void _print_addr(void *data, unsigned long address, int reliable)
 {
-       pr_info(" [<%08lx>] %s%pS\n", address, reliable ? "" : "? ",
+       const char *loglvl = data;
+
+       printk("%s [<%08lx>] %s%pS\n", loglvl, address, reliable ? "" : "? ",
                (void *)address);
 }
 
        .address = _print_addr
 };
 
-void show_stack(struct task_struct *task, unsigned long *stack)
+void show_stack_loglvl(struct task_struct *task, unsigned long *stack,
+                      const char *loglvl)
 {
        struct pt_regs *segv_regs = current->thread.segv_regs;
        int i;
        if (!stack)
                stack = get_stack_pointer(task, segv_regs);
 
-       pr_info("Stack:\n");
+       printk("%sStack:\n", loglvl);
        for (i = 0; i < 3 * STACKSLOTS_PER_LINE; i++) {
                if (kstack_end(stack))
                        break;
                if (i && ((i % STACKSLOTS_PER_LINE) == 0))
-                       pr_cont("\n");
+                       printk("%s\n", loglvl);
                pr_cont(" %08lx", *stack++);
        }
-       pr_cont("\n");
+       printk("%s\n", loglvl);
+
+       printk("%sCall Trace:\n", loglvl);
+       dump_trace(current, &stackops, (void *)loglvl);
+       printk("%s\n", loglvl);
+}
 
-       pr_info("Call Trace:\n");
-       dump_trace(current, &stackops, NULL);
-       pr_info("\n");
+void show_stack(struct task_struct *task, unsigned long *stack)
+{
+       show_stack_loglvl(task, stack, KERN_INFO);
 }