diff options
Diffstat (limited to 'arch/x86/mm/fault.c')
-rw-r--r-- | arch/x86/mm/fault.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index baa0e86adfbc..bfae139182ff 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -426,10 +426,11 @@ static noinline int vmalloc_fault(unsigned long address) | |||
426 | } | 426 | } |
427 | 427 | ||
428 | static const char errata93_warning[] = | 428 | static const char errata93_warning[] = |
429 | KERN_ERR "******* Your BIOS seems to not contain a fix for K8 errata #93\n" | 429 | KERN_ERR |
430 | KERN_ERR "******* Working around it, but it may cause SEGVs or burn power.\n" | 430 | "******* Your BIOS seems to not contain a fix for K8 errata #93\n" |
431 | KERN_ERR "******* Please consider a BIOS update.\n" | 431 | "******* Working around it, but it may cause SEGVs or burn power.\n" |
432 | KERN_ERR "******* Disabling USB legacy in the BIOS may also help.\n"; | 432 | "******* Please consider a BIOS update.\n" |
433 | "******* Disabling USB legacy in the BIOS may also help.\n"; | ||
433 | 434 | ||
434 | /* | 435 | /* |
435 | * No vm86 mode in 64-bit mode: | 436 | * No vm86 mode in 64-bit mode: |
@@ -696,7 +697,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code, | |||
696 | if (!printk_ratelimit()) | 697 | if (!printk_ratelimit()) |
697 | return; | 698 | return; |
698 | 699 | ||
699 | printk(KERN_CONT "%s%s[%d]: segfault at %lx ip %p sp %p error %lx", | 700 | printk("%s%s[%d]: segfault at %lx ip %p sp %p error %lx", |
700 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, | 701 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, |
701 | tsk->comm, task_pid_nr(tsk), address, | 702 | tsk->comm, task_pid_nr(tsk), address, |
702 | (void *)regs->ip, (void *)regs->sp, error_code); | 703 | (void *)regs->ip, (void *)regs->sp, error_code); |
@@ -952,8 +953,6 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code) | |||
952 | tsk = current; | 953 | tsk = current; |
953 | mm = tsk->mm; | 954 | mm = tsk->mm; |
954 | 955 | ||
955 | prefetchw(&mm->mmap_sem); | ||
956 | |||
957 | /* Get the faulting address: */ | 956 | /* Get the faulting address: */ |
958 | address = read_cr2(); | 957 | address = read_cr2(); |
959 | 958 | ||
@@ -963,6 +962,7 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code) | |||
963 | */ | 962 | */ |
964 | if (kmemcheck_active(regs)) | 963 | if (kmemcheck_active(regs)) |
965 | kmemcheck_hide(regs); | 964 | kmemcheck_hide(regs); |
965 | prefetchw(&mm->mmap_sem); | ||
966 | 966 | ||
967 | if (unlikely(kmmio_fault(regs, address))) | 967 | if (unlikely(kmmio_fault(regs, address))) |
968 | return; | 968 | return; |
@@ -1114,7 +1114,7 @@ good_area: | |||
1114 | * make sure we exit gracefully rather than endlessly redo | 1114 | * make sure we exit gracefully rather than endlessly redo |
1115 | * the fault: | 1115 | * the fault: |
1116 | */ | 1116 | */ |
1117 | fault = handle_mm_fault(mm, vma, address, write); | 1117 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); |
1118 | 1118 | ||
1119 | if (unlikely(fault & VM_FAULT_ERROR)) { | 1119 | if (unlikely(fault & VM_FAULT_ERROR)) { |
1120 | mm_fault_error(regs, error_code, address, fault); | 1120 | mm_fault_error(regs, error_code, address, fault); |