diff options
-rw-r--r-- | arch/x86/include/asm/dwarf2.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/entry_64.S | 14 | ||||
-rw-r--r-- | arch/x86/mm/fault.c | 8 |
3 files changed, 18 insertions, 6 deletions
diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h index 326099199318..f6f15986df6c 100644 --- a/arch/x86/include/asm/dwarf2.h +++ b/arch/x86/include/asm/dwarf2.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #define CFI_REMEMBER_STATE .cfi_remember_state | 27 | #define CFI_REMEMBER_STATE .cfi_remember_state |
28 | #define CFI_RESTORE_STATE .cfi_restore_state | 28 | #define CFI_RESTORE_STATE .cfi_restore_state |
29 | #define CFI_UNDEFINED .cfi_undefined | 29 | #define CFI_UNDEFINED .cfi_undefined |
30 | #define CFI_ESCAPE .cfi_escape | ||
30 | 31 | ||
31 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | 32 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME |
32 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | 33 | #define CFI_SIGNAL_FRAME .cfi_signal_frame |
@@ -68,6 +69,7 @@ | |||
68 | #define CFI_REMEMBER_STATE cfi_ignore | 69 | #define CFI_REMEMBER_STATE cfi_ignore |
69 | #define CFI_RESTORE_STATE cfi_ignore | 70 | #define CFI_RESTORE_STATE cfi_ignore |
70 | #define CFI_UNDEFINED cfi_ignore | 71 | #define CFI_UNDEFINED cfi_ignore |
72 | #define CFI_ESCAPE cfi_ignore | ||
71 | #define CFI_SIGNAL_FRAME cfi_ignore | 73 | #define CFI_SIGNAL_FRAME cfi_ignore |
72 | 74 | ||
73 | #endif | 75 | #endif |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 6419bb05ecd5..faf8d5e74b0b 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -331,10 +331,15 @@ ENDPROC(native_usergs_sysret64) | |||
331 | 1: incl PER_CPU_VAR(irq_count) | 331 | 1: incl PER_CPU_VAR(irq_count) |
332 | jne 2f | 332 | jne 2f |
333 | mov PER_CPU_VAR(irq_stack_ptr),%rsp | 333 | mov PER_CPU_VAR(irq_stack_ptr),%rsp |
334 | EMPTY_FRAME 0 | 334 | CFI_DEF_CFA_REGISTER rsi |
335 | 335 | ||
336 | 2: /* Store previous stack value */ | 336 | 2: /* Store previous stack value */ |
337 | pushq %rsi | 337 | pushq %rsi |
338 | CFI_ESCAPE 0x0f /* DW_CFA_def_cfa_expression */, 6, \ | ||
339 | 0x77 /* DW_OP_breg7 */, 0, \ | ||
340 | 0x06 /* DW_OP_deref */, \ | ||
341 | 0x08 /* DW_OP_const1u */, SS+8-RBP, \ | ||
342 | 0x22 /* DW_OP_plus */ | ||
338 | /* We entered an interrupt context - irqs are off: */ | 343 | /* We entered an interrupt context - irqs are off: */ |
339 | TRACE_IRQS_OFF | 344 | TRACE_IRQS_OFF |
340 | .endm | 345 | .endm |
@@ -788,7 +793,6 @@ END(interrupt) | |||
788 | subq $ORIG_RAX-RBP, %rsp | 793 | subq $ORIG_RAX-RBP, %rsp |
789 | CFI_ADJUST_CFA_OFFSET ORIG_RAX-RBP | 794 | CFI_ADJUST_CFA_OFFSET ORIG_RAX-RBP |
790 | SAVE_ARGS_IRQ | 795 | SAVE_ARGS_IRQ |
791 | PARTIAL_FRAME 0 | ||
792 | call \func | 796 | call \func |
793 | .endm | 797 | .endm |
794 | 798 | ||
@@ -813,10 +817,10 @@ ret_from_intr: | |||
813 | 817 | ||
814 | /* Restore saved previous stack */ | 818 | /* Restore saved previous stack */ |
815 | popq %rsi | 819 | popq %rsi |
816 | leaq 16(%rsi), %rsp | 820 | CFI_DEF_CFA_REGISTER rsi |
817 | 821 | leaq ARGOFFSET-RBP(%rsi), %rsp | |
818 | CFI_DEF_CFA_REGISTER rsp | 822 | CFI_DEF_CFA_REGISTER rsp |
819 | CFI_ADJUST_CFA_OFFSET -16 | 823 | CFI_ADJUST_CFA_OFFSET RBP-ARGOFFSET |
820 | 824 | ||
821 | exit_intr: | 825 | exit_intr: |
822 | GET_THREAD_INFO(%rcx) | 826 | GET_THREAD_INFO(%rcx) |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 0d17c8c50acd..9c7378df740a 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -420,12 +420,14 @@ static noinline __kprobes int vmalloc_fault(unsigned long address) | |||
420 | return 0; | 420 | return 0; |
421 | } | 421 | } |
422 | 422 | ||
423 | #ifdef CONFIG_CPU_SUP_AMD | ||
423 | static const char errata93_warning[] = | 424 | static const char errata93_warning[] = |
424 | KERN_ERR | 425 | KERN_ERR |
425 | "******* Your BIOS seems to not contain a fix for K8 errata #93\n" | 426 | "******* Your BIOS seems to not contain a fix for K8 errata #93\n" |
426 | "******* Working around it, but it may cause SEGVs or burn power.\n" | 427 | "******* Working around it, but it may cause SEGVs or burn power.\n" |
427 | "******* Please consider a BIOS update.\n" | 428 | "******* Please consider a BIOS update.\n" |
428 | "******* Disabling USB legacy in the BIOS may also help.\n"; | 429 | "******* Disabling USB legacy in the BIOS may also help.\n"; |
430 | #endif | ||
429 | 431 | ||
430 | /* | 432 | /* |
431 | * No vm86 mode in 64-bit mode: | 433 | * No vm86 mode in 64-bit mode: |
@@ -505,7 +507,11 @@ bad: | |||
505 | */ | 507 | */ |
506 | static int is_errata93(struct pt_regs *regs, unsigned long address) | 508 | static int is_errata93(struct pt_regs *regs, unsigned long address) |
507 | { | 509 | { |
508 | #ifdef CONFIG_X86_64 | 510 | #if defined(CONFIG_X86_64) && defined(CONFIG_CPU_SUP_AMD) |
511 | if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD | ||
512 | || boot_cpu_data.x86 != 0xf) | ||
513 | return 0; | ||
514 | |||
509 | if (address != regs->ip) | 515 | if (address != regs->ip) |
510 | return 0; | 516 | return 0; |
511 | 517 | ||