forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/arch/m68k/kernel/traps.c
....@@ -35,10 +35,9 @@
3535 #include <asm/fpu.h>
3636 #include <linux/uaccess.h>
3737 #include <asm/traps.h>
38
-#include <asm/pgalloc.h>
3938 #include <asm/machdep.h>
4039 #include <asm/siginfo.h>
41
-
40
+#include <asm/tlbflush.h>
4241
4342 static const char *vec_names[] = {
4443 [VEC_RESETSP] = "RESET SP",
....@@ -431,7 +430,7 @@
431430 pr_err("BAD KERNEL BUSERR\n");
432431
433432 die_if_kernel("Oops", &fp->ptregs,0);
434
- force_sig(SIGKILL, current);
433
+ force_sig(SIGKILL);
435434 return;
436435 }
437436 } else {
....@@ -463,7 +462,7 @@
463462 !(ssw & RW) ? "write" : "read", addr,
464463 fp->ptregs.pc);
465464 die_if_kernel ("Oops", &fp->ptregs, buserr_type);
466
- force_sig (SIGBUS, current);
465
+ force_sig (SIGBUS);
467466 return;
468467 }
469468
....@@ -493,7 +492,7 @@
493492 do_page_fault (&fp->ptregs, addr, 0);
494493 } else {
495494 pr_debug("protection fault on insn access (segv).\n");
496
- force_sig (SIGSEGV, current);
495
+ force_sig (SIGSEGV);
497496 }
498497 }
499498 #else
....@@ -571,7 +570,7 @@
571570 !(ssw & RW) ? "write" : "read", addr,
572571 fp->ptregs.pc);
573572 die_if_kernel("Oops",&fp->ptregs,mmusr);
574
- force_sig(SIGSEGV, current);
573
+ force_sig(SIGSEGV);
575574 return;
576575 } else {
577576 #if 0
....@@ -598,7 +597,7 @@
598597 #endif
599598 pr_debug("Unknown SIGSEGV - 1\n");
600599 die_if_kernel("Oops",&fp->ptregs,mmusr);
601
- force_sig(SIGSEGV, current);
600
+ force_sig(SIGSEGV);
602601 return;
603602 }
604603
....@@ -621,7 +620,7 @@
621620 buserr:
622621 pr_err("BAD KERNEL BUSERR\n");
623622 die_if_kernel("Oops",&fp->ptregs,0);
624
- force_sig(SIGKILL, current);
623
+ force_sig(SIGKILL);
625624 return;
626625 }
627626
....@@ -660,7 +659,7 @@
660659 addr, fp->ptregs.pc);
661660 pr_debug("Unknown SIGSEGV - 2\n");
662661 die_if_kernel("Oops",&fp->ptregs,mmusr);
663
- force_sig(SIGSEGV, current);
662
+ force_sig(SIGSEGV);
664663 return;
665664 }
666665
....@@ -804,20 +803,20 @@
804803 default:
805804 die_if_kernel("bad frame format",&fp->ptregs,0);
806805 pr_debug("Unknown SIGSEGV - 4\n");
807
- force_sig(SIGSEGV, current);
806
+ force_sig(SIGSEGV);
808807 }
809808 }
810809
811810
812811 static int kstack_depth_to_print = 48;
813812
814
-void show_trace(unsigned long *stack)
813
+static void show_trace(unsigned long *stack, const char *loglvl)
815814 {
816815 unsigned long *endstack;
817816 unsigned long addr;
818817 int i;
819818
820
- pr_info("Call Trace:");
819
+ printk("%sCall Trace:", loglvl);
821820 addr = (unsigned long)stack + THREAD_SIZE - 1;
822821 endstack = (unsigned long *)(addr & -THREAD_SIZE);
823822 i = 0;
....@@ -846,7 +845,6 @@
846845 void show_registers(struct pt_regs *regs)
847846 {
848847 struct frame *fp = (struct frame *)regs;
849
- mm_segment_t old_fs = get_fs();
850848 u16 c, *cp;
851849 unsigned long addr;
852850 int i;
....@@ -916,13 +914,12 @@
916914 default:
917915 pr_cont("\n");
918916 }
919
- show_stack(NULL, (unsigned long *)addr);
917
+ show_stack(NULL, (unsigned long *)addr, KERN_INFO);
920918
921919 pr_info("Code:");
922
- set_fs(KERNEL_DS);
923920 cp = (u16 *)regs->pc;
924921 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) {
926923 pr_cont(" Bad PC value.");
927924 break;
928925 }
....@@ -931,11 +928,11 @@
931928 else
932929 pr_cont(" <%04x>", c);
933930 }
934
- set_fs(old_fs);
935931 pr_cont("\n");
936932 }
937933
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)
939936 {
940937 unsigned long *p;
941938 unsigned long *endstack;
....@@ -949,7 +946,7 @@
949946 }
950947 endstack = (unsigned long *)(((unsigned long)stack + THREAD_SIZE - 1) & -THREAD_SIZE);
951948
952
- pr_info("Stack from %08lx:", (unsigned long)stack);
949
+ printk("%sStack from %08lx:", loglvl, (unsigned long)stack);
953950 p = stack;
954951 for (i = 0; i < kstack_depth_to_print; i++) {
955952 if (p + 1 > endstack)
....@@ -959,7 +956,7 @@
959956 pr_cont(" %08lx", *p++);
960957 }
961958 pr_cont("\n");
962
- show_trace(stack);
959
+ show_trace(stack, loglvl);
963960 }
964961
965962 /*
....@@ -1127,7 +1124,7 @@
11271124 addr = (void __user*) fp->un.fmtb.daddr;
11281125 break;
11291126 }
1130
- force_sig_fault(sig, si_code, addr, current);
1127
+ force_sig_fault(sig, si_code, addr);
11311128 }
11321129
11331130 void die_if_kernel (char *str, struct pt_regs *fp, int nr)
....@@ -1159,6 +1156,6 @@
11591156 #ifdef CONFIG_M68KFPU_EMU
11601157 asmlinkage void fpemu_signal(int signal, int code, void *addr)
11611158 {
1162
- force_sig_fault(signal, code, addr, current);
1159
+ force_sig_fault(signal, code, addr);
11631160 }
11641161 #endif