Lines Matching refs:fp

130 asmlinkage void trap_c(struct frame *fp);
133 static inline void access_error060 (struct frame *fp)
135 unsigned long fslw = fp->un.fmt4.pc; /* is really FSLW for access error */
137 pr_debug("fslw=%#lx, fa=%#lx\n", fslw, fp->un.fmt4.effaddr);
152 unsigned long addr = fp->un.fmt4.effaddr;
165 do_page_fault(&fp->ptregs, addr, errorcode);
170 send_fault_sig(&fp->ptregs);
172 send_fault_sig(&fp->ptregs) > 0) {
173 pr_err("pc=%#lx, fa=%#lx\n", fp->ptregs.pc,
174 fp->un.fmt4.effaddr);
176 trap_c( fp );
230 static inline void fix_xframe040(struct frame *fp, unsigned long wba, unsigned short wbs)
232 fp->un.fmt7.faddr = wba;
233 fp->un.fmt7.ssw = wbs & 0xff;
235 fp->un.fmt7.ssw |= MA_040;
238 static inline void do_040writebacks(struct frame *fp)
242 if (fp->un.fmt7.wb1s & WBV_040)
246 if ((fp->un.fmt7.wb2s & WBV_040) &&
247 !(fp->un.fmt7.wb2s & WBTT_040)) {
248 res = do_040writeback1(fp->un.fmt7.wb2s, fp->un.fmt7.wb2a,
249 fp->un.fmt7.wb2d);
251 fix_xframe040(fp, fp->un.fmt7.wb2a, fp->un.fmt7.wb2s);
253 fp->un.fmt7.wb2s = 0;
257 if (fp->un.fmt7.wb3s & WBV_040 && (!res || fp->un.fmt7.wb3s & 4)) {
258 res = do_040writeback1(fp->un.fmt7.wb3s, fp->un.fmt7.wb3a,
259 fp->un.fmt7.wb3d);
262 fix_xframe040(fp, fp->un.fmt7.wb3a, fp->un.fmt7.wb3s);
264 fp->un.fmt7.wb2s = fp->un.fmt7.wb3s;
265 fp->un.fmt7.wb3s &= (~WBV_040);
266 fp->un.fmt7.wb2a = fp->un.fmt7.wb3a;
267 fp->un.fmt7.wb2d = fp->un.fmt7.wb3d;
270 fp->un.fmt7.wb3s = 0;
274 send_fault_sig(&fp->ptregs);
283 asmlinkage void berr_040cleanup(struct frame *fp)
285 fp->un.fmt7.wb2s &= ~4;
286 fp->un.fmt7.wb3s &= ~4;
288 do_040writebacks(fp);
291 static inline void access_error040(struct frame *fp)
293 unsigned short ssw = fp->un.fmt7.ssw;
296 pr_debug("ssw=%#x, fa=%#lx\n", ssw, fp->un.fmt7.faddr);
297 pr_debug("wb1s=%#x, wb2s=%#x, wb3s=%#x\n", fp->un.fmt7.wb1s,
298 fp->un.fmt7.wb2s, fp->un.fmt7.wb3s);
300 fp->un.fmt7.wb2a, fp->un.fmt7.wb3a,
301 fp->un.fmt7.wb2d, fp->un.fmt7.wb3d);
304 unsigned long addr = fp->un.fmt7.faddr;
329 if (do_page_fault(&fp->ptregs, addr, errorcode)) {
331 if (user_mode(&fp->ptregs)){
342 if (fp->un.fmt7.wb2a == fp->un.fmt7.faddr)
343 fp->un.fmt7.wb2s &= ~WBV_040;
344 if (fp->un.fmt7.wb3a == fp->un.fmt7.faddr)
345 fp->un.fmt7.wb3s &= ~WBV_040;
353 current->thread.faddr = fp->un.fmt7.faddr;
354 if (send_fault_sig(&fp->ptregs) >= 0)
356 fp->un.fmt7.faddr);
360 do_040writebacks(fp);
371 static inline void bus_error030 (struct frame *fp)
375 unsigned short ssw = fp->un.fmtb.ssw;
381 fp->ptregs.format == 0xa ? fp->ptregs.pc + 2 : fp->un.fmtb.baddr - 2
383 fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
387 fp->un.fmtb.daddr,
388 space_names[ssw & DFC], fp->ptregs.pc);
398 if (mmu_emu_handle_fault (fp->un.fmtb.daddr, ssw & RW, 0))
403 if (fp->ptregs.sr & PS_S) {
407 if (mmu_emu_handle_fault (fp->un.fmtb.daddr, ssw & RW, 1))
412 fp->ptregs.pc);
415 if((fp->ptregs.pc >= (unsigned long)&_sun3_map_test_start) &&
416 (fp->ptregs.pc <= (unsigned long)&_sun3_map_test_end)) {
417 send_fault_sig(&fp->ptregs);
423 fp->un.fmtb.daddr,
424 space_names[ssw & DFC], fp->ptregs.pc);
428 die_if_kernel("Oops", &fp->ptregs,0);
442 addr = fp->un.fmtb.daddr;
459 fp->ptregs.pc);
460 die_if_kernel ("Oops", &fp->ptregs, buserr_type);
470 do_page_fault (&fp->ptregs, addr, errorcode);
479 if (fp->ptregs.format == 0xA)
480 addr = fp->ptregs.pc + 4;
482 addr = fp->un.fmtb.baddr;
488 do_page_fault (&fp->ptregs, addr, 0);
496 static inline void bus_error030 (struct frame *fp)
501 unsigned short ssw = fp->un.fmtb.ssw;
512 fp->ptregs.format == 0xa ? fp->ptregs.pc + 2 : fp->un.fmtb.baddr - 2
514 fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
518 fp->un.fmtb.daddr,
519 space_names[ssw & DFC], fp->ptregs.pc);
526 addr = fp->un.fmtb.daddr;
549 if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) {
552 fp->un.fmtb.daddr,
553 space_names[ssw & DFC], fp->ptregs.pc);
558 if (do_page_fault (&fp->ptregs, addr, errorcode) < 0)
562 if (!(ssw & RM) && send_fault_sig(&fp->ptregs) > 0)
568 fp->ptregs.pc);
569 die_if_kernel("Oops",&fp->ptregs,mmusr);
579 fp->ptregs.pc, ssw);
596 die_if_kernel("Oops",&fp->ptregs,mmusr);
615 if (fp->ptregs.sr & PS_S) {
616 pr_err("Instruction fault at %#010lx\n", fp->ptregs.pc);
619 die_if_kernel("Oops",&fp->ptregs,0);
625 if (fp->ptregs.format == 10)
626 addr = fp->ptregs.pc + 4;
628 addr = fp->un.fmtb.baddr;
632 if ((ssw & DF) && ((addr ^ fp->un.fmtb.daddr) & PAGE_MASK) == 0)
653 do_page_fault (&fp->ptregs, addr, 0);
656 addr, fp->ptregs.pc);
658 die_if_kernel("Oops",&fp->ptregs,mmusr);
698 static inline void access_errorcf(unsigned int fs, struct frame *fp)
714 need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 0, 0);
715 addr = fp->ptregs.pc;
718 need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 0, 1);
719 addr = fp->ptregs.pc + sizeof(long);
722 need_page_fault = cf_tlb_miss(&fp->ptregs, 1, 1, 0);
725 need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 1, 0);
748 do_page_fault(&fp->ptregs, addr, err_code);
753 asmlinkage void buserr_c(struct frame *fp)
756 if (user_mode(&fp->ptregs))
757 current->thread.esp0 = (unsigned long) fp;
759 pr_debug("*** Bus Error *** Format is %x\n", fp->ptregs.format);
764 fs = (fp->ptregs.vector & 0x3) |
765 ((fp->ptregs.vector & 0xc00) >> 8);
775 access_errorcf(fs, fp);
783 switch (fp->ptregs.format) {
786 access_error060 (fp);
791 access_error040 (fp);
797 bus_error030 (fp);
801 die_if_kernel("bad frame format",&fp->ptregs,0);
844 struct frame *fp = (struct frame *)regs;
859 addr = (unsigned long)&fp->un;
863 pr_cont("instr addr=%08lx\n", fp->un.fmt2.iaddr);
864 addr += sizeof(fp->un.fmt2);
867 pr_cont("eff addr=%08lx\n", fp->un.fmt3.effaddr);
868 addr += sizeof(fp->un.fmt3);
873 fp->un.fmt4.effaddr, fp->un.fmt4.pc);
876 fp->un.fmt4.effaddr, fp->un.fmt4.pc);
877 addr += sizeof(fp->un.fmt4);
881 fp->un.fmt7.effaddr, fp->un.fmt7.ssw, fp->un.fmt7.faddr);
883 fp->un.fmt7.wb1s, fp->un.fmt7.wb1a, fp->un.fmt7.wb1dpd0);
885 fp->un.fmt7.wb2s, fp->un.fmt7.wb2a, fp->un.fmt7.wb2d);
887 fp->un.fmt7.wb3s, fp->un.fmt7.wb3a, fp->un.fmt7.wb3d);
889 fp->un.fmt7.wb1dpd0, fp->un.fmt7.pd1, fp->un.fmt7.pd2,
890 fp->un.fmt7.pd3);
891 addr += sizeof(fp->un.fmt7);
894 pr_cont("instr addr=%08lx\n", fp->un.fmt9.iaddr);
895 addr += sizeof(fp->un.fmt9);
899 fp->un.fmta.ssw, fp->un.fmta.isc, fp->un.fmta.isb,
900 fp->un.fmta.daddr, fp->un.fmta.dobuf);
901 addr += sizeof(fp->un.fmta);
905 fp->un.fmtb.ssw, fp->un.fmtb.isc, fp->un.fmtb.isb,
906 fp->un.fmtb.daddr, fp->un.fmtb.dobuf);
908 fp->un.fmtb.baddr, fp->un.fmtb.dibuf, fp->un.fmtb.ver);
909 addr += sizeof(fp->un.fmtb);
967 static void bad_super_trap(struct frame *fp)
969 int vector = (fp->ptregs.vector >> 2) & 0xff;
975 fp->ptregs.format);
978 vector, fp->ptregs.format);
980 unsigned short ssw = fp->un.fmtb.ssw;
986 (fp->ptregs.format) == 0xA ?
987 fp->ptregs.pc + 2 : fp->un.fmtb.baddr - 2);
990 (fp->ptregs.format) == 0xA ?
991 fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
995 fp->un.fmtb.daddr, space_names[ssw & DFC],
996 fp->ptregs.pc);
999 die_if_kernel("BAD KERNEL TRAP", &fp->ptregs, 0);
1002 asmlinkage void trap_c(struct frame *fp)
1006 int vector = (fp->ptregs.vector >> 2) & 0xff;
1008 if (fp->ptregs.sr & PS_S) {
1016 if (fixup_exception(&fp->ptregs))
1019 bad_super_trap(fp);
1104 switch (fp->ptregs.format) {
1106 addr = (void __user *) fp->ptregs.pc;
1109 addr = (void __user *) fp->un.fmt2.iaddr;
1112 addr = (void __user *) fp->un.fmt7.effaddr;
1115 addr = (void __user *) fp->un.fmt9.iaddr;
1118 addr = (void __user *) fp->un.fmta.daddr;
1121 addr = (void __user*) fp->un.fmtb.daddr;
1127 void die_if_kernel (char *str, struct pt_regs *fp, int nr)
1129 if (!(fp->sr & PS_S))
1134 show_registers(fp);