aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/dumpstack_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/dumpstack_64.c')
-rw-r--r--arch/x86/kernel/dumpstack_64.c53
1 files changed, 1 insertions, 52 deletions
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
index 36cf1a498227..310abf4542dc 100644
--- a/arch/x86/kernel/dumpstack_64.c
+++ b/arch/x86/kernel/dumpstack_64.c
@@ -140,56 +140,6 @@ unknown:
140 return -EINVAL; 140 return -EINVAL;
141} 141}
142 142
143void show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
144 unsigned long *sp, char *log_lvl)
145{
146 unsigned long *irq_stack_end;
147 unsigned long *irq_stack;
148 unsigned long *stack;
149 int i;
150
151 if (!try_get_task_stack(task))
152 return;
153
154 irq_stack_end = (unsigned long *)this_cpu_read(irq_stack_ptr);
155 irq_stack = irq_stack_end - (IRQ_STACK_SIZE / sizeof(long));
156
157 sp = sp ? : get_stack_pointer(task, regs);
158
159 stack = sp;
160 for (i = 0; i < kstack_depth_to_print; i++) {
161 unsigned long word;
162
163 if (stack >= irq_stack && stack <= irq_stack_end) {
164 if (stack == irq_stack_end) {
165 stack = (unsigned long *) (irq_stack_end[-1]);
166 pr_cont(" <EOI> ");
167 }
168 } else {
169 if (kstack_end(stack))
170 break;
171 }
172
173 if (probe_kernel_address(stack, word))
174 break;
175
176 if ((i % STACKSLOTS_PER_LINE) == 0) {
177 if (i != 0)
178 pr_cont("\n");
179 printk("%s %016lx", log_lvl, word);
180 } else
181 pr_cont(" %016lx", word);
182
183 stack++;
184 touch_nmi_watchdog();
185 }
186
187 pr_cont("\n");
188 show_trace_log_lvl(task, regs, sp, log_lvl);
189
190 put_task_stack(task);
191}
192
193void show_regs(struct pt_regs *regs) 143void show_regs(struct pt_regs *regs)
194{ 144{
195 int i; 145 int i;
@@ -207,8 +157,7 @@ void show_regs(struct pt_regs *regs)
207 unsigned char c; 157 unsigned char c;
208 u8 *ip; 158 u8 *ip;
209 159
210 printk(KERN_DEFAULT "Stack:\n"); 160 show_trace_log_lvl(current, regs, NULL, KERN_DEFAULT);
211 show_stack_log_lvl(current, regs, NULL, KERN_DEFAULT);
212 161
213 printk(KERN_DEFAULT "Code: "); 162 printk(KERN_DEFAULT "Code: ");
214 163