| .. | .. |
|---|
| 7 | 7 | #include <linux/uaccess.h> |
|---|
| 8 | 8 | #include <linux/utsname.h> |
|---|
| 9 | 9 | #include <linux/hardirq.h> |
|---|
| 10 | +#include <linux/irq_pipeline.h> |
|---|
| 10 | 11 | #include <linux/kdebug.h> |
|---|
| 11 | 12 | #include <linux/module.h> |
|---|
| 12 | 13 | #include <linux/ptrace.h> |
|---|
| .. | .. |
|---|
| 335 | 336 | oops_enter(); |
|---|
| 336 | 337 | |
|---|
| 337 | 338 | /* racy, but better than risking deadlock. */ |
|---|
| 338 | | - raw_local_irq_save(flags); |
|---|
| 339 | + flags = hard_local_irq_save(); |
|---|
| 339 | 340 | cpu = smp_processor_id(); |
|---|
| 340 | 341 | if (!arch_spin_trylock(&die_lock)) { |
|---|
| 341 | 342 | if (cpu == die_owner) |
|---|
| .. | .. |
|---|
| 365 | 366 | if (!die_nest_count) |
|---|
| 366 | 367 | /* Nest count reaches zero, release the lock. */ |
|---|
| 367 | 368 | arch_spin_unlock(&die_lock); |
|---|
| 368 | | - raw_local_irq_restore(flags); |
|---|
| 369 | + hard_local_irq_restore(flags); |
|---|
| 369 | 370 | oops_exit(); |
|---|
| 370 | 371 | |
|---|
| 371 | 372 | /* Executive summary in case the oops scrolled away */ |
|---|
| .. | .. |
|---|
| 394 | 395 | { |
|---|
| 395 | 396 | const char *pr = ""; |
|---|
| 396 | 397 | |
|---|
| 398 | + irq_pipeline_oops(); |
|---|
| 399 | + |
|---|
| 397 | 400 | /* Save the regs of the first oops for the executive summary later. */ |
|---|
| 398 | 401 | if (!die_counter) |
|---|
| 399 | 402 | exec_summary_regs = *regs; |
|---|
| .. | .. |
|---|
| 402 | 405 | pr = IS_ENABLED(CONFIG_PREEMPT_RT) ? " PREEMPT_RT" : " PREEMPT"; |
|---|
| 403 | 406 | |
|---|
| 404 | 407 | printk(KERN_DEFAULT |
|---|
| 405 | | - "%s: %04lx [#%d]%s%s%s%s%s\n", str, err & 0xffff, ++die_counter, |
|---|
| 408 | + "%s: %04lx [#%d]%s%s%s%s%s%s\n", str, err & 0xffff, ++die_counter, |
|---|
| 406 | 409 | pr, |
|---|
| 407 | 410 | IS_ENABLED(CONFIG_SMP) ? " SMP" : "", |
|---|
| 408 | 411 | debug_pagealloc_enabled() ? " DEBUG_PAGEALLOC" : "", |
|---|
| 409 | 412 | IS_ENABLED(CONFIG_KASAN) ? " KASAN" : "", |
|---|
| 410 | 413 | IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION) ? |
|---|
| 411 | | - (boot_cpu_has(X86_FEATURE_PTI) ? " PTI" : " NOPTI") : ""); |
|---|
| 414 | + (boot_cpu_has(X86_FEATURE_PTI) ? " PTI" : " NOPTI") : "", |
|---|
| 415 | + irqs_pipelined() ? " IRQ_PIPELINE" : ""); |
|---|
| 412 | 416 | } |
|---|
| 413 | 417 | NOKPROBE_SYMBOL(__die_header); |
|---|
| 414 | 418 | |
|---|