.. | .. |
---|
35 | 35 | #include <asm/fpu.h> |
---|
36 | 36 | #include <linux/uaccess.h> |
---|
37 | 37 | #include <asm/traps.h> |
---|
38 | | -#include <asm/pgalloc.h> |
---|
39 | 38 | #include <asm/machdep.h> |
---|
40 | 39 | #include <asm/siginfo.h> |
---|
41 | | - |
---|
| 40 | +#include <asm/tlbflush.h> |
---|
42 | 41 | |
---|
43 | 42 | static const char *vec_names[] = { |
---|
44 | 43 | [VEC_RESETSP] = "RESET SP", |
---|
.. | .. |
---|
431 | 430 | pr_err("BAD KERNEL BUSERR\n"); |
---|
432 | 431 | |
---|
433 | 432 | die_if_kernel("Oops", &fp->ptregs,0); |
---|
434 | | - force_sig(SIGKILL, current); |
---|
| 433 | + force_sig(SIGKILL); |
---|
435 | 434 | return; |
---|
436 | 435 | } |
---|
437 | 436 | } else { |
---|
.. | .. |
---|
463 | 462 | !(ssw & RW) ? "write" : "read", addr, |
---|
464 | 463 | fp->ptregs.pc); |
---|
465 | 464 | die_if_kernel ("Oops", &fp->ptregs, buserr_type); |
---|
466 | | - force_sig (SIGBUS, current); |
---|
| 465 | + force_sig (SIGBUS); |
---|
467 | 466 | return; |
---|
468 | 467 | } |
---|
469 | 468 | |
---|
.. | .. |
---|
493 | 492 | do_page_fault (&fp->ptregs, addr, 0); |
---|
494 | 493 | } else { |
---|
495 | 494 | pr_debug("protection fault on insn access (segv).\n"); |
---|
496 | | - force_sig (SIGSEGV, current); |
---|
| 495 | + force_sig (SIGSEGV); |
---|
497 | 496 | } |
---|
498 | 497 | } |
---|
499 | 498 | #else |
---|
.. | .. |
---|
571 | 570 | !(ssw & RW) ? "write" : "read", addr, |
---|
572 | 571 | fp->ptregs.pc); |
---|
573 | 572 | die_if_kernel("Oops",&fp->ptregs,mmusr); |
---|
574 | | - force_sig(SIGSEGV, current); |
---|
| 573 | + force_sig(SIGSEGV); |
---|
575 | 574 | return; |
---|
576 | 575 | } else { |
---|
577 | 576 | #if 0 |
---|
.. | .. |
---|
598 | 597 | #endif |
---|
599 | 598 | pr_debug("Unknown SIGSEGV - 1\n"); |
---|
600 | 599 | die_if_kernel("Oops",&fp->ptregs,mmusr); |
---|
601 | | - force_sig(SIGSEGV, current); |
---|
| 600 | + force_sig(SIGSEGV); |
---|
602 | 601 | return; |
---|
603 | 602 | } |
---|
604 | 603 | |
---|
.. | .. |
---|
621 | 620 | buserr: |
---|
622 | 621 | pr_err("BAD KERNEL BUSERR\n"); |
---|
623 | 622 | die_if_kernel("Oops",&fp->ptregs,0); |
---|
624 | | - force_sig(SIGKILL, current); |
---|
| 623 | + force_sig(SIGKILL); |
---|
625 | 624 | return; |
---|
626 | 625 | } |
---|
627 | 626 | |
---|
.. | .. |
---|
660 | 659 | addr, fp->ptregs.pc); |
---|
661 | 660 | pr_debug("Unknown SIGSEGV - 2\n"); |
---|
662 | 661 | die_if_kernel("Oops",&fp->ptregs,mmusr); |
---|
663 | | - force_sig(SIGSEGV, current); |
---|
| 662 | + force_sig(SIGSEGV); |
---|
664 | 663 | return; |
---|
665 | 664 | } |
---|
666 | 665 | |
---|
.. | .. |
---|
804 | 803 | default: |
---|
805 | 804 | die_if_kernel("bad frame format",&fp->ptregs,0); |
---|
806 | 805 | pr_debug("Unknown SIGSEGV - 4\n"); |
---|
807 | | - force_sig(SIGSEGV, current); |
---|
| 806 | + force_sig(SIGSEGV); |
---|
808 | 807 | } |
---|
809 | 808 | } |
---|
810 | 809 | |
---|
811 | 810 | |
---|
812 | 811 | static int kstack_depth_to_print = 48; |
---|
813 | 812 | |
---|
814 | | -void show_trace(unsigned long *stack) |
---|
| 813 | +static void show_trace(unsigned long *stack, const char *loglvl) |
---|
815 | 814 | { |
---|
816 | 815 | unsigned long *endstack; |
---|
817 | 816 | unsigned long addr; |
---|
818 | 817 | int i; |
---|
819 | 818 | |
---|
820 | | - pr_info("Call Trace:"); |
---|
| 819 | + printk("%sCall Trace:", loglvl); |
---|
821 | 820 | addr = (unsigned long)stack + THREAD_SIZE - 1; |
---|
822 | 821 | endstack = (unsigned long *)(addr & -THREAD_SIZE); |
---|
823 | 822 | i = 0; |
---|
.. | .. |
---|
846 | 845 | void show_registers(struct pt_regs *regs) |
---|
847 | 846 | { |
---|
848 | 847 | struct frame *fp = (struct frame *)regs; |
---|
849 | | - mm_segment_t old_fs = get_fs(); |
---|
850 | 848 | u16 c, *cp; |
---|
851 | 849 | unsigned long addr; |
---|
852 | 850 | int i; |
---|
.. | .. |
---|
916 | 914 | default: |
---|
917 | 915 | pr_cont("\n"); |
---|
918 | 916 | } |
---|
919 | | - show_stack(NULL, (unsigned long *)addr); |
---|
| 917 | + show_stack(NULL, (unsigned long *)addr, KERN_INFO); |
---|
920 | 918 | |
---|
921 | 919 | pr_info("Code:"); |
---|
922 | | - set_fs(KERNEL_DS); |
---|
923 | 920 | cp = (u16 *)regs->pc; |
---|
924 | 921 | for (i = -8; i < 16; i++) { |
---|
925 | | - if (get_user(c, cp + i) && i >= 0) { |
---|
| 922 | + if (get_kernel_nofault(c, cp + i) && i >= 0) { |
---|
926 | 923 | pr_cont(" Bad PC value."); |
---|
927 | 924 | break; |
---|
928 | 925 | } |
---|
.. | .. |
---|
931 | 928 | else |
---|
932 | 929 | pr_cont(" <%04x>", c); |
---|
933 | 930 | } |
---|
934 | | - set_fs(old_fs); |
---|
935 | 931 | pr_cont("\n"); |
---|
936 | 932 | } |
---|
937 | 933 | |
---|
938 | | -void show_stack(struct task_struct *task, unsigned long *stack) |
---|
| 934 | +void show_stack(struct task_struct *task, unsigned long *stack, |
---|
| 935 | + const char *loglvl) |
---|
939 | 936 | { |
---|
940 | 937 | unsigned long *p; |
---|
941 | 938 | unsigned long *endstack; |
---|
.. | .. |
---|
949 | 946 | } |
---|
950 | 947 | endstack = (unsigned long *)(((unsigned long)stack + THREAD_SIZE - 1) & -THREAD_SIZE); |
---|
951 | 948 | |
---|
952 | | - pr_info("Stack from %08lx:", (unsigned long)stack); |
---|
| 949 | + printk("%sStack from %08lx:", loglvl, (unsigned long)stack); |
---|
953 | 950 | p = stack; |
---|
954 | 951 | for (i = 0; i < kstack_depth_to_print; i++) { |
---|
955 | 952 | if (p + 1 > endstack) |
---|
.. | .. |
---|
959 | 956 | pr_cont(" %08lx", *p++); |
---|
960 | 957 | } |
---|
961 | 958 | pr_cont("\n"); |
---|
962 | | - show_trace(stack); |
---|
| 959 | + show_trace(stack, loglvl); |
---|
963 | 960 | } |
---|
964 | 961 | |
---|
965 | 962 | /* |
---|
.. | .. |
---|
1127 | 1124 | addr = (void __user*) fp->un.fmtb.daddr; |
---|
1128 | 1125 | break; |
---|
1129 | 1126 | } |
---|
1130 | | - force_sig_fault(sig, si_code, addr, current); |
---|
| 1127 | + force_sig_fault(sig, si_code, addr); |
---|
1131 | 1128 | } |
---|
1132 | 1129 | |
---|
1133 | 1130 | void die_if_kernel (char *str, struct pt_regs *fp, int nr) |
---|
.. | .. |
---|
1159 | 1156 | #ifdef CONFIG_M68KFPU_EMU |
---|
1160 | 1157 | asmlinkage void fpemu_signal(int signal, int code, void *addr) |
---|
1161 | 1158 | { |
---|
1162 | | - force_sig_fault(signal, code, addr, current); |
---|
| 1159 | + force_sig_fault(signal, code, addr); |
---|
1163 | 1160 | } |
---|
1164 | 1161 | #endif |
---|