xref: /openbmc/linux/arch/parisc/kernel/traps.c (revision 8e774e02)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  linux/arch/parisc/traps.c
4  *
5  *  Copyright (C) 1991, 1992  Linus Torvalds
6  *  Copyright (C) 1999, 2000  Philipp Rumpf <prumpf@tux.org>
7  */
8 
9 /*
10  * 'Traps.c' handles hardware traps and faults after we have saved some
11  * state in 'asm.s'.
12  */
13 
14 #include <linux/sched.h>
15 #include <linux/sched/debug.h>
16 #include <linux/kernel.h>
17 #include <linux/string.h>
18 #include <linux/errno.h>
19 #include <linux/ptrace.h>
20 #include <linux/timer.h>
21 #include <linux/delay.h>
22 #include <linux/mm.h>
23 #include <linux/module.h>
24 #include <linux/smp.h>
25 #include <linux/spinlock.h>
26 #include <linux/init.h>
27 #include <linux/interrupt.h>
28 #include <linux/console.h>
29 #include <linux/bug.h>
30 #include <linux/ratelimit.h>
31 #include <linux/uaccess.h>
32 
33 #include <asm/assembly.h>
34 #include <asm/io.h>
35 #include <asm/irq.h>
36 #include <asm/traps.h>
37 #include <asm/unaligned.h>
38 #include <linux/atomic.h>
39 #include <asm/smp.h>
40 #include <asm/pdc.h>
41 #include <asm/pdc_chassis.h>
42 #include <asm/unwind.h>
43 #include <asm/tlbflush.h>
44 #include <asm/cacheflush.h>
45 #include <linux/kgdb.h>
46 #include <linux/kprobes.h>
47 
48 #include "../math-emu/math-emu.h"	/* for handle_fpe() */
49 
50 static void parisc_show_stack(struct task_struct *task,
51 	struct pt_regs *regs);
52 
53 static int printbinary(char *buf, unsigned long x, int nbits)
54 {
55 	unsigned long mask = 1UL << (nbits - 1);
56 	while (mask != 0) {
57 		*buf++ = (mask & x ? '1' : '0');
58 		mask >>= 1;
59 	}
60 	*buf = '\0';
61 
62 	return nbits;
63 }
64 
65 #ifdef CONFIG_64BIT
66 #define RFMT "%016lx"
67 #else
68 #define RFMT "%08lx"
69 #endif
70 #define FFMT "%016llx"	/* fpregs are 64-bit always */
71 
72 #define PRINTREGS(lvl,r,f,fmt,x)	\
73 	printk("%s%s%02d-%02d  " fmt " " fmt " " fmt " " fmt "\n",	\
74 		lvl, f, (x), (x+3), (r)[(x)+0], (r)[(x)+1],		\
75 		(r)[(x)+2], (r)[(x)+3])
76 
77 static void print_gr(char *level, struct pt_regs *regs)
78 {
79 	int i;
80 	char buf[64];
81 
82 	printk("%s\n", level);
83 	printk("%s     YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI\n", level);
84 	printbinary(buf, regs->gr[0], 32);
85 	printk("%sPSW: %s %s\n", level, buf, print_tainted());
86 
87 	for (i = 0; i < 32; i += 4)
88 		PRINTREGS(level, regs->gr, "r", RFMT, i);
89 }
90 
91 static void print_fr(char *level, struct pt_regs *regs)
92 {
93 	int i;
94 	char buf[64];
95 	struct { u32 sw[2]; } s;
96 
97 	/* FR are 64bit everywhere. Need to use asm to get the content
98 	 * of fpsr/fper1, and we assume that we won't have a FP Identify
99 	 * in our way, otherwise we're screwed.
100 	 * The fldd is used to restore the T-bit if there was one, as the
101 	 * store clears it anyway.
102 	 * PA2.0 book says "thou shall not use fstw on FPSR/FPERs" - T-Bone */
103 	asm volatile ("fstd %%fr0,0(%1)	\n\t"
104 		      "fldd 0(%1),%%fr0	\n\t"
105 		      : "=m" (s) : "r" (&s) : "r0");
106 
107 	printk("%s\n", level);
108 	printk("%s      VZOUICununcqcqcqcqcqcrmunTDVZOUI\n", level);
109 	printbinary(buf, s.sw[0], 32);
110 	printk("%sFPSR: %s\n", level, buf);
111 	printk("%sFPER1: %08x\n", level, s.sw[1]);
112 
113 	/* here we'll print fr0 again, tho it'll be meaningless */
114 	for (i = 0; i < 32; i += 4)
115 		PRINTREGS(level, regs->fr, "fr", FFMT, i);
116 }
117 
118 void show_regs(struct pt_regs *regs)
119 {
120 	int i, user;
121 	char *level;
122 	unsigned long cr30, cr31;
123 
124 	user = user_mode(regs);
125 	level = user ? KERN_DEBUG : KERN_CRIT;
126 
127 	show_regs_print_info(level);
128 
129 	print_gr(level, regs);
130 
131 	for (i = 0; i < 8; i += 4)
132 		PRINTREGS(level, regs->sr, "sr", RFMT, i);
133 
134 	if (user)
135 		print_fr(level, regs);
136 
137 	cr30 = mfctl(30);
138 	cr31 = mfctl(31);
139 	printk("%s\n", level);
140 	printk("%sIASQ: " RFMT " " RFMT " IAOQ: " RFMT " " RFMT "\n",
141 	       level, regs->iasq[0], regs->iasq[1], regs->iaoq[0], regs->iaoq[1]);
142 	printk("%s IIR: %08lx    ISR: " RFMT "  IOR: " RFMT "\n",
143 	       level, regs->iir, regs->isr, regs->ior);
144 	printk("%s CPU: %8d   CR30: " RFMT " CR31: " RFMT "\n",
145 	       level, current_thread_info()->cpu, cr30, cr31);
146 	printk("%s ORIG_R28: " RFMT "\n", level, regs->orig_r28);
147 
148 	if (user) {
149 		printk("%s IAOQ[0]: " RFMT "\n", level, regs->iaoq[0]);
150 		printk("%s IAOQ[1]: " RFMT "\n", level, regs->iaoq[1]);
151 		printk("%s RP(r2): " RFMT "\n", level, regs->gr[2]);
152 	} else {
153 		printk("%s IAOQ[0]: %pS\n", level, (void *) regs->iaoq[0]);
154 		printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
155 		printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
156 
157 		parisc_show_stack(current, regs);
158 	}
159 }
160 
161 static DEFINE_RATELIMIT_STATE(_hppa_rs,
162 	DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);
163 
164 #define parisc_printk_ratelimited(critical, regs, fmt, ...)	{	      \
165 	if ((critical || show_unhandled_signals) && __ratelimit(&_hppa_rs)) { \
166 		printk(fmt, ##__VA_ARGS__);				      \
167 		show_regs(regs);					      \
168 	}								      \
169 }
170 
171 
172 static void do_show_stack(struct unwind_frame_info *info)
173 {
174 	int i = 1;
175 
176 	printk(KERN_CRIT "Backtrace:\n");
177 	while (i <= MAX_UNWIND_ENTRIES) {
178 		if (unwind_once(info) < 0 || info->ip == 0)
179 			break;
180 
181 		if (__kernel_text_address(info->ip)) {
182 			printk(KERN_CRIT " [<" RFMT ">] %pS\n",
183 				info->ip, (void *) info->ip);
184 			i++;
185 		}
186 	}
187 	printk(KERN_CRIT "\n");
188 }
189 
190 static void parisc_show_stack(struct task_struct *task,
191 	struct pt_regs *regs)
192 {
193 	struct unwind_frame_info info;
194 
195 	unwind_frame_init_task(&info, task, regs);
196 
197 	do_show_stack(&info);
198 }
199 
200 void show_stack(struct task_struct *t, unsigned long *sp)
201 {
202 	parisc_show_stack(t, NULL);
203 }
204 
205 int is_valid_bugaddr(unsigned long iaoq)
206 {
207 	return 1;
208 }
209 
210 void die_if_kernel(char *str, struct pt_regs *regs, long err)
211 {
212 	if (user_mode(regs)) {
213 		if (err == 0)
214 			return; /* STFU */
215 
216 		parisc_printk_ratelimited(1, regs,
217 			KERN_CRIT "%s (pid %d): %s (code %ld) at " RFMT "\n",
218 			current->comm, task_pid_nr(current), str, err, regs->iaoq[0]);
219 
220 		return;
221 	}
222 
223 	bust_spinlocks(1);
224 
225 	oops_enter();
226 
227 	/* Amuse the user in a SPARC fashion */
228 	if (err) printk(KERN_CRIT
229 			"      _______________________________ \n"
230 			"     < Your System ate a SPARC! Gah! >\n"
231 			"      ------------------------------- \n"
232 			"             \\   ^__^\n"
233 			"                 (__)\\       )\\/\\\n"
234 			"                  U  ||----w |\n"
235 			"                     ||     ||\n");
236 
237 	/* unlock the pdc lock if necessary */
238 	pdc_emergency_unlock();
239 
240 	/* maybe the kernel hasn't booted very far yet and hasn't been able
241 	 * to initialize the serial or STI console. In that case we should
242 	 * re-enable the pdc console, so that the user will be able to
243 	 * identify the problem. */
244 	if (!console_drivers)
245 		pdc_console_restart();
246 
247 	if (err)
248 		printk(KERN_CRIT "%s (pid %d): %s (code %ld)\n",
249 			current->comm, task_pid_nr(current), str, err);
250 
251 	/* Wot's wrong wif bein' racy? */
252 	if (current->thread.flags & PARISC_KERNEL_DEATH) {
253 		printk(KERN_CRIT "%s() recursion detected.\n", __func__);
254 		local_irq_enable();
255 		while (1);
256 	}
257 	current->thread.flags |= PARISC_KERNEL_DEATH;
258 
259 	show_regs(regs);
260 	dump_stack();
261 	add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
262 
263 	if (in_interrupt())
264 		panic("Fatal exception in interrupt");
265 
266 	if (panic_on_oops)
267 		panic("Fatal exception");
268 
269 	oops_exit();
270 	do_exit(SIGSEGV);
271 }
272 
273 /* gdb uses break 4,8 */
274 #define GDB_BREAK_INSN 0x10004
275 static void handle_gdb_break(struct pt_regs *regs, int wot)
276 {
277 	force_sig_fault(SIGTRAP, wot,
278 			(void __user *) (regs->iaoq[0] & ~3));
279 }
280 
281 static void handle_break(struct pt_regs *regs)
282 {
283 	unsigned iir = regs->iir;
284 
285 	if (unlikely(iir == PARISC_BUG_BREAK_INSN && !user_mode(regs))) {
286 		/* check if a BUG() or WARN() trapped here.  */
287 		enum bug_trap_type tt;
288 		tt = report_bug(regs->iaoq[0] & ~3, regs);
289 		if (tt == BUG_TRAP_TYPE_WARN) {
290 			regs->iaoq[0] += 4;
291 			regs->iaoq[1] += 4;
292 			return; /* return to next instruction when WARN_ON().  */
293 		}
294 		die_if_kernel("Unknown kernel breakpoint", regs,
295 			(tt == BUG_TRAP_TYPE_NONE) ? 9 : 0);
296 	}
297 
298 #ifdef CONFIG_KPROBES
299 	if (unlikely(iir == PARISC_KPROBES_BREAK_INSN)) {
300 		parisc_kprobe_break_handler(regs);
301 		return;
302 	}
303 
304 #endif
305 
306 #ifdef CONFIG_KGDB
307 	if (unlikely(iir == PARISC_KGDB_COMPILED_BREAK_INSN ||
308 		iir == PARISC_KGDB_BREAK_INSN)) {
309 		kgdb_handle_exception(9, SIGTRAP, 0, regs);
310 		return;
311 	}
312 #endif
313 
314 	if (unlikely(iir != GDB_BREAK_INSN))
315 		parisc_printk_ratelimited(0, regs,
316 			KERN_DEBUG "break %d,%d: pid=%d command='%s'\n",
317 			iir & 31, (iir>>13) & ((1<<13)-1),
318 			task_pid_nr(current), current->comm);
319 
320 	/* send standard GDB signal */
321 	handle_gdb_break(regs, TRAP_BRKPT);
322 }
323 
324 static void default_trap(int code, struct pt_regs *regs)
325 {
326 	printk(KERN_ERR "Trap %d on CPU %d\n", code, smp_processor_id());
327 	show_regs(regs);
328 }
329 
330 void (*cpu_lpmc) (int code, struct pt_regs *regs) __read_mostly = default_trap;
331 
332 
333 void transfer_pim_to_trap_frame(struct pt_regs *regs)
334 {
335     register int i;
336     extern unsigned int hpmc_pim_data[];
337     struct pdc_hpmc_pim_11 *pim_narrow;
338     struct pdc_hpmc_pim_20 *pim_wide;
339 
340     if (boot_cpu_data.cpu_type >= pcxu) {
341 
342 	pim_wide = (struct pdc_hpmc_pim_20 *)hpmc_pim_data;
343 
344 	/*
345 	 * Note: The following code will probably generate a
346 	 * bunch of truncation error warnings from the compiler.
347 	 * Could be handled with an ifdef, but perhaps there
348 	 * is a better way.
349 	 */
350 
351 	regs->gr[0] = pim_wide->cr[22];
352 
353 	for (i = 1; i < 32; i++)
354 	    regs->gr[i] = pim_wide->gr[i];
355 
356 	for (i = 0; i < 32; i++)
357 	    regs->fr[i] = pim_wide->fr[i];
358 
359 	for (i = 0; i < 8; i++)
360 	    regs->sr[i] = pim_wide->sr[i];
361 
362 	regs->iasq[0] = pim_wide->cr[17];
363 	regs->iasq[1] = pim_wide->iasq_back;
364 	regs->iaoq[0] = pim_wide->cr[18];
365 	regs->iaoq[1] = pim_wide->iaoq_back;
366 
367 	regs->sar  = pim_wide->cr[11];
368 	regs->iir  = pim_wide->cr[19];
369 	regs->isr  = pim_wide->cr[20];
370 	regs->ior  = pim_wide->cr[21];
371     }
372     else {
373 	pim_narrow = (struct pdc_hpmc_pim_11 *)hpmc_pim_data;
374 
375 	regs->gr[0] = pim_narrow->cr[22];
376 
377 	for (i = 1; i < 32; i++)
378 	    regs->gr[i] = pim_narrow->gr[i];
379 
380 	for (i = 0; i < 32; i++)
381 	    regs->fr[i] = pim_narrow->fr[i];
382 
383 	for (i = 0; i < 8; i++)
384 	    regs->sr[i] = pim_narrow->sr[i];
385 
386 	regs->iasq[0] = pim_narrow->cr[17];
387 	regs->iasq[1] = pim_narrow->iasq_back;
388 	regs->iaoq[0] = pim_narrow->cr[18];
389 	regs->iaoq[1] = pim_narrow->iaoq_back;
390 
391 	regs->sar  = pim_narrow->cr[11];
392 	regs->iir  = pim_narrow->cr[19];
393 	regs->isr  = pim_narrow->cr[20];
394 	regs->ior  = pim_narrow->cr[21];
395     }
396 
397     /*
398      * The following fields only have meaning if we came through
399      * another path. So just zero them here.
400      */
401 
402     regs->ksp = 0;
403     regs->kpc = 0;
404     regs->orig_r28 = 0;
405 }
406 
407 
408 /*
409  * This routine is called as a last resort when everything else
410  * has gone clearly wrong. We get called for faults in kernel space,
411  * and HPMC's.
412  */
413 void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long offset)
414 {
415 	static DEFINE_SPINLOCK(terminate_lock);
416 
417 	bust_spinlocks(1);
418 
419 	set_eiem(0);
420 	local_irq_disable();
421 	spin_lock(&terminate_lock);
422 
423 	/* unlock the pdc lock if necessary */
424 	pdc_emergency_unlock();
425 
426 	/* restart pdc console if necessary */
427 	if (!console_drivers)
428 		pdc_console_restart();
429 
430 	/* Not all paths will gutter the processor... */
431 	switch(code){
432 
433 	case 1:
434 		transfer_pim_to_trap_frame(regs);
435 		break;
436 
437 	default:
438 		/* Fall through */
439 		break;
440 
441 	}
442 
443 	{
444 		/* show_stack(NULL, (unsigned long *)regs->gr[30]); */
445 		struct unwind_frame_info info;
446 		unwind_frame_init(&info, current, regs);
447 		do_show_stack(&info);
448 	}
449 
450 	printk("\n");
451 	pr_crit("%s: Code=%d (%s) at addr " RFMT "\n",
452 		msg, code, trap_name(code), offset);
453 	show_regs(regs);
454 
455 	spin_unlock(&terminate_lock);
456 
457 	/* put soft power button back under hardware control;
458 	 * if the user had pressed it once at any time, the
459 	 * system will shut down immediately right here. */
460 	pdc_soft_power_button(0);
461 
462 	/* Call kernel panic() so reboot timeouts work properly
463 	 * FIXME: This function should be on the list of
464 	 * panic notifiers, and we should call panic
465 	 * directly from the location that we wish.
466 	 * e.g. We should not call panic from
467 	 * parisc_terminate, but rather the oter way around.
468 	 * This hack works, prints the panic message twice,
469 	 * and it enables reboot timers!
470 	 */
471 	panic(msg);
472 }
473 
474 void notrace handle_interruption(int code, struct pt_regs *regs)
475 {
476 	unsigned long fault_address = 0;
477 	unsigned long fault_space = 0;
478 	int si_code;
479 
480 	if (code == 1)
481 	    pdc_console_restart();  /* switch back to pdc if HPMC */
482 	else
483 	    local_irq_enable();
484 
485 	/* Security check:
486 	 * If the priority level is still user, and the
487 	 * faulting space is not equal to the active space
488 	 * then the user is attempting something in a space
489 	 * that does not belong to them. Kill the process.
490 	 *
491 	 * This is normally the situation when the user
492 	 * attempts to jump into the kernel space at the
493 	 * wrong offset, be it at the gateway page or a
494 	 * random location.
495 	 *
496 	 * We cannot normally signal the process because it
497 	 * could *be* on the gateway page, and processes
498 	 * executing on the gateway page can't have signals
499 	 * delivered.
500 	 *
501 	 * We merely readjust the address into the users
502 	 * space, at a destination address of zero, and
503 	 * allow processing to continue.
504 	 */
505 	if (((unsigned long)regs->iaoq[0] & 3) &&
506 	    ((unsigned long)regs->iasq[0] != (unsigned long)regs->sr[7])) {
507 		/* Kill the user process later */
508 		regs->iaoq[0] = 0 | 3;
509 		regs->iaoq[1] = regs->iaoq[0] + 4;
510 		regs->iasq[0] = regs->iasq[1] = regs->sr[7];
511 		regs->gr[0] &= ~PSW_B;
512 		return;
513 	}
514 
515 #if 0
516 	printk(KERN_CRIT "Interruption # %d\n", code);
517 #endif
518 
519 	switch(code) {
520 
521 	case  1:
522 		/* High-priority machine check (HPMC) */
523 
524 		/* set up a new led state on systems shipped with a LED State panel */
525 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_HPMC);
526 
527 		parisc_terminate("High Priority Machine Check (HPMC)",
528 				regs, code, 0);
529 		/* NOT REACHED */
530 
531 	case  2:
532 		/* Power failure interrupt */
533 		printk(KERN_CRIT "Power failure interrupt !\n");
534 		return;
535 
536 	case  3:
537 		/* Recovery counter trap */
538 		regs->gr[0] &= ~PSW_R;
539 
540 #ifdef CONFIG_KPROBES
541 		if (parisc_kprobe_ss_handler(regs))
542 			return;
543 #endif
544 
545 #ifdef CONFIG_KGDB
546 		if (kgdb_single_step) {
547 			kgdb_handle_exception(0, SIGTRAP, 0, regs);
548 			return;
549 		}
550 #endif
551 
552 		if (user_space(regs))
553 			handle_gdb_break(regs, TRAP_TRACE);
554 		/* else this must be the start of a syscall - just let it run */
555 		return;
556 
557 	case  5:
558 		/* Low-priority machine check */
559 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_LPMC);
560 
561 		flush_cache_all();
562 		flush_tlb_all();
563 		cpu_lpmc(5, regs);
564 		return;
565 
566 	case  PARISC_ITLB_TRAP:
567 		/* Instruction TLB miss fault/Instruction page fault */
568 		fault_address = regs->iaoq[0];
569 		fault_space   = regs->iasq[0];
570 		break;
571 
572 	case  8:
573 		/* Illegal instruction trap */
574 		die_if_kernel("Illegal instruction", regs, code);
575 		si_code = ILL_ILLOPC;
576 		goto give_sigill;
577 
578 	case  9:
579 		/* Break instruction trap */
580 		handle_break(regs);
581 		return;
582 
583 	case 10:
584 		/* Privileged operation trap */
585 		die_if_kernel("Privileged operation", regs, code);
586 		si_code = ILL_PRVOPC;
587 		goto give_sigill;
588 
589 	case 11:
590 		/* Privileged register trap */
591 		if ((regs->iir & 0xffdfffe0) == 0x034008a0) {
592 
593 			/* This is a MFCTL cr26/cr27 to gr instruction.
594 			 * PCXS traps on this, so we need to emulate it.
595 			 */
596 
597 			if (regs->iir & 0x00200000)
598 				regs->gr[regs->iir & 0x1f] = mfctl(27);
599 			else
600 				regs->gr[regs->iir & 0x1f] = mfctl(26);
601 
602 			regs->iaoq[0] = regs->iaoq[1];
603 			regs->iaoq[1] += 4;
604 			regs->iasq[0] = regs->iasq[1];
605 			return;
606 		}
607 
608 		die_if_kernel("Privileged register usage", regs, code);
609 		si_code = ILL_PRVREG;
610 	give_sigill:
611 		force_sig_fault(SIGILL, si_code,
612 				(void __user *) regs->iaoq[0]);
613 		return;
614 
615 	case 12:
616 		/* Overflow Trap, let the userland signal handler do the cleanup */
617 		force_sig_fault(SIGFPE, FPE_INTOVF,
618 				(void __user *) regs->iaoq[0]);
619 		return;
620 
621 	case 13:
622 		/* Conditional Trap
623 		   The condition succeeds in an instruction which traps
624 		   on condition  */
625 		if(user_mode(regs)){
626 			/* Let userspace app figure it out from the insn pointed
627 			 * to by si_addr.
628 			 */
629 			force_sig_fault(SIGFPE, FPE_CONDTRAP,
630 					(void __user *) regs->iaoq[0]);
631 			return;
632 		}
633 		/* The kernel doesn't want to handle condition codes */
634 		break;
635 
636 	case 14:
637 		/* Assist Exception Trap, i.e. floating point exception. */
638 		die_if_kernel("Floating point exception", regs, 0); /* quiet */
639 		__inc_irq_stat(irq_fpassist_count);
640 		handle_fpe(regs);
641 		return;
642 
643 	case 15:
644 		/* Data TLB miss fault/Data page fault */
645 		/* Fall through */
646 	case 16:
647 		/* Non-access instruction TLB miss fault */
648 		/* The instruction TLB entry needed for the target address of the FIC
649 		   is absent, and hardware can't find it, so we get to cleanup */
650 		/* Fall through */
651 	case 17:
652 		/* Non-access data TLB miss fault/Non-access data page fault */
653 		/* FIXME:
654 			 Still need to add slow path emulation code here!
655 			 If the insn used a non-shadow register, then the tlb
656 			 handlers could not have their side-effect (e.g. probe
657 			 writing to a target register) emulated since rfir would
658 			 erase the changes to said register. Instead we have to
659 			 setup everything, call this function we are in, and emulate
660 			 by hand. Technically we need to emulate:
661 			 fdc,fdce,pdc,"fic,4f",prober,probeir,probew, probeiw
662 		*/
663 		fault_address = regs->ior;
664 		fault_space = regs->isr;
665 		break;
666 
667 	case 18:
668 		/* PCXS only -- later cpu's split this into types 26,27 & 28 */
669 		/* Check for unaligned access */
670 		if (check_unaligned(regs)) {
671 			handle_unaligned(regs);
672 			return;
673 		}
674 		/* Fall Through */
675 	case 26:
676 		/* PCXL: Data memory access rights trap */
677 		fault_address = regs->ior;
678 		fault_space   = regs->isr;
679 		break;
680 
681 	case 19:
682 		/* Data memory break trap */
683 		regs->gr[0] |= PSW_X; /* So we can single-step over the trap */
684 		/* fall thru */
685 	case 21:
686 		/* Page reference trap */
687 		handle_gdb_break(regs, TRAP_HWBKPT);
688 		return;
689 
690 	case 25:
691 		/* Taken branch trap */
692 		regs->gr[0] &= ~PSW_T;
693 		if (user_space(regs))
694 			handle_gdb_break(regs, TRAP_BRANCH);
695 		/* else this must be the start of a syscall - just let it
696 		 * run.
697 		 */
698 		return;
699 
700 	case  7:
701 		/* Instruction access rights */
702 		/* PCXL: Instruction memory protection trap */
703 
704 		/*
705 		 * This could be caused by either: 1) a process attempting
706 		 * to execute within a vma that does not have execute
707 		 * permission, or 2) an access rights violation caused by a
708 		 * flush only translation set up by ptep_get_and_clear().
709 		 * So we check the vma permissions to differentiate the two.
710 		 * If the vma indicates we have execute permission, then
711 		 * the cause is the latter one. In this case, we need to
712 		 * call do_page_fault() to fix the problem.
713 		 */
714 
715 		if (user_mode(regs)) {
716 			struct vm_area_struct *vma;
717 
718 			down_read(&current->mm->mmap_sem);
719 			vma = find_vma(current->mm,regs->iaoq[0]);
720 			if (vma && (regs->iaoq[0] >= vma->vm_start)
721 				&& (vma->vm_flags & VM_EXEC)) {
722 
723 				fault_address = regs->iaoq[0];
724 				fault_space = regs->iasq[0];
725 
726 				up_read(&current->mm->mmap_sem);
727 				break; /* call do_page_fault() */
728 			}
729 			up_read(&current->mm->mmap_sem);
730 		}
731 		/* Fall Through */
732 	case 27:
733 		/* Data memory protection ID trap */
734 		if (code == 27 && !user_mode(regs) &&
735 			fixup_exception(regs))
736 			return;
737 
738 		die_if_kernel("Protection id trap", regs, code);
739 		force_sig_fault(SIGSEGV, SEGV_MAPERR,
740 				(code == 7)?
741 				((void __user *) regs->iaoq[0]) :
742 				((void __user *) regs->ior));
743 		return;
744 
745 	case 28:
746 		/* Unaligned data reference trap */
747 		handle_unaligned(regs);
748 		return;
749 
750 	default:
751 		if (user_mode(regs)) {
752 			parisc_printk_ratelimited(0, regs, KERN_DEBUG
753 				"handle_interruption() pid=%d command='%s'\n",
754 				task_pid_nr(current), current->comm);
755 			/* SIGBUS, for lack of a better one. */
756 			force_sig_fault(SIGBUS, BUS_OBJERR,
757 					(void __user *)regs->ior);
758 			return;
759 		}
760 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
761 
762 		parisc_terminate("Unexpected interruption", regs, code, 0);
763 		/* NOT REACHED */
764 	}
765 
766 	if (user_mode(regs)) {
767 	    if ((fault_space >> SPACEID_SHIFT) != (regs->sr[7] >> SPACEID_SHIFT)) {
768 		parisc_printk_ratelimited(0, regs, KERN_DEBUG
769 				"User fault %d on space 0x%08lx, pid=%d command='%s'\n",
770 				code, fault_space,
771 				task_pid_nr(current), current->comm);
772 		force_sig_fault(SIGSEGV, SEGV_MAPERR,
773 				(void __user *)regs->ior);
774 		return;
775 	    }
776 	}
777 	else {
778 
779 	    /*
780 	     * The kernel should never fault on its own address space,
781 	     * unless pagefault_disable() was called before.
782 	     */
783 
784 	    if (fault_space == 0 && !faulthandler_disabled())
785 	    {
786 		/* Clean up and return if in exception table. */
787 		if (fixup_exception(regs))
788 			return;
789 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
790 		parisc_terminate("Kernel Fault", regs, code, fault_address);
791 	    }
792 	}
793 
794 	do_page_fault(regs, code, fault_address);
795 }
796 
797 
798 void __init initialize_ivt(const void *iva)
799 {
800 	extern u32 os_hpmc_size;
801 	extern const u32 os_hpmc[];
802 
803 	int i;
804 	u32 check = 0;
805 	u32 *ivap;
806 	u32 *hpmcp;
807 	u32 length, instr;
808 
809 	if (strcmp((const char *)iva, "cows can fly"))
810 		panic("IVT invalid");
811 
812 	ivap = (u32 *)iva;
813 
814 	for (i = 0; i < 8; i++)
815 	    *ivap++ = 0;
816 
817 	/*
818 	 * Use PDC_INSTR firmware function to get instruction that invokes
819 	 * PDCE_CHECK in HPMC handler.  See programming note at page 1-31 of
820 	 * the PA 1.1 Firmware Architecture document.
821 	 */
822 	if (pdc_instr(&instr) == PDC_OK)
823 		ivap[0] = instr;
824 
825 	/*
826 	 * Rules for the checksum of the HPMC handler:
827 	 * 1. The IVA does not point to PDC/PDH space (ie: the OS has installed
828 	 *    its own IVA).
829 	 * 2. The word at IVA + 32 is nonzero.
830 	 * 3. If Length (IVA + 60) is not zero, then Length (IVA + 60) and
831 	 *    Address (IVA + 56) are word-aligned.
832 	 * 4. The checksum of the 8 words starting at IVA + 32 plus the sum of
833 	 *    the Length/4 words starting at Address is zero.
834 	 */
835 
836 	/* Setup IVA and compute checksum for HPMC handler */
837 	ivap[6] = (u32)__pa(os_hpmc);
838 	length = os_hpmc_size;
839 	ivap[7] = length;
840 
841 	hpmcp = (u32 *)os_hpmc;
842 
843 	for (i=0; i<length/4; i++)
844 	    check += *hpmcp++;
845 
846 	for (i=0; i<8; i++)
847 	    check += ivap[i];
848 
849 	ivap[5] = -check;
850 }
851 
852 
853 /* early_trap_init() is called before we set up kernel mappings and
854  * write-protect the kernel */
855 void  __init early_trap_init(void)
856 {
857 	extern const void fault_vector_20;
858 
859 #ifndef CONFIG_64BIT
860 	extern const void fault_vector_11;
861 	initialize_ivt(&fault_vector_11);
862 #endif
863 
864 	initialize_ivt(&fault_vector_20);
865 }
866 
867 void __init trap_init(void)
868 {
869 }
870