X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=arch%2Fx86%2Fmm%2Ffault_64.c;h=dd26e680a43166ca9abe0ced6390989edddf4349;hb=3c1df68b848b39270752ff8d4b956cc4a4dce0f6;hp=75b7b165bdf337b5a85562d7d21297c992837e67;hpb=fdfe8aa84dd78cfdff427d0520f5974fb5e9c220;p=linux-2.6 diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index 75b7b165bd..dd26e680a4 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c @@ -514,6 +514,17 @@ good_area: tsk->maj_flt++; else tsk->min_flt++; + +#ifdef CONFIG_X86_32 + /* + * Did it hit the DOS screen memory VA from vm86 mode? + */ + if (v8086_mode(regs)) { + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT; + if (bit < 32) + tsk->thread.screen_bitmap |= 1 << bit; + } +#endif up_read(&mm->mmap_sem); return; @@ -550,13 +561,15 @@ bad_area_nosemaphore: printk_ratelimit()) { printk( #ifdef CONFIG_X86_32 - "%s%s[%d]: segfault at %08lx ip %08lx sp %08lx error %lx\n", + "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", #else - "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n", + "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx", #endif task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, tsk->comm, task_pid_nr(tsk), address, regs->ip, regs->sp, error_code); + print_vma_addr(" in ", regs->ip); + printk("\n"); } tsk->thread.cr2 = address; @@ -595,7 +608,7 @@ no_context: else printk(KERN_ALERT "Unable to handle kernel paging request"); printk(" at %016lx RIP: \n" KERN_ALERT, address); - printk_address(regs->ip, regs->bp); + printk_address(regs->ip, 1); dump_pagetable(address); tsk->thread.cr2 = address; tsk->thread.trap_no = 14;