xref: /linux/arch/mips/kernel/unaligned.c (revision 09fc778e)
1 /*
2  * Handle unaligned accesses by emulation.
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License.  See the file "COPYING" in the main directory of this archive
6  * for more details.
7  *
8  * Copyright (C) 1996, 1998, 1999, 2002 by Ralf Baechle
9  * Copyright (C) 1999 Silicon Graphics, Inc.
10  * Copyright (C) 2014 Imagination Technologies Ltd.
11  *
12  * This file contains exception handler for address error exception with the
13  * special capability to execute faulting instructions in software.  The
14  * handler does not try to handle the case when the program counter points
15  * to an address not aligned to a word boundary.
16  *
17  * Putting data to unaligned addresses is a bad practice even on Intel where
18  * only the performance is affected.  Much worse is that such code is non-
19  * portable.  Due to several programs that die on MIPS due to alignment
20  * problems I decided to implement this handler anyway though I originally
21  * didn't intend to do this at all for user code.
22  *
23  * For now I enable fixing of address errors by default to make life easier.
24  * I however intend to disable this somewhen in the future when the alignment
25  * problems with user programs have been fixed.	 For programmers this is the
26  * right way to go.
27  *
28  * Fixing address errors is a per process option.  The option is inherited
29  * across fork(2) and execve(2) calls.	If you really want to use the
30  * option in your user programs - I discourage the use of the software
31  * emulation strongly - use the following code in your userland stuff:
32  *
33  * #include <sys/sysmips.h>
34  *
35  * ...
36  * sysmips(MIPS_FIXADE, x);
37  * ...
38  *
39  * The argument x is 0 for disabling software emulation, enabled otherwise.
40  *
41  * Below a little program to play around with this feature.
42  *
43  * #include <stdio.h>
44  * #include <sys/sysmips.h>
45  *
46  * struct foo {
47  *	   unsigned char bar[8];
48  * };
49  *
50  * main(int argc, char *argv[])
51  * {
52  *	   struct foo x = {0, 1, 2, 3, 4, 5, 6, 7};
53  *	   unsigned int *p = (unsigned int *) (x.bar + 3);
54  *	   int i;
55  *
56  *	   if (argc > 1)
57  *		   sysmips(MIPS_FIXADE, atoi(argv[1]));
58  *
59  *	   printf("*p = %08lx\n", *p);
60  *
61  *	   *p = 0xdeadface;
62  *
63  *	   for(i = 0; i <= 7; i++)
64  *	   printf("%02x ", x.bar[i]);
65  *	   printf("\n");
66  * }
67  *
68  * Coprocessor loads are not supported; I think this case is unimportant
69  * in the practice.
70  *
71  * TODO: Handle ndc (attempted store to doubleword in uncached memory)
72  *	 exception for the R6000.
73  *	 A store crossing a page boundary might be executed only partially.
74  *	 Undo the partial store in this case.
75  */
76 #include <linux/context_tracking.h>
77 #include <linux/mm.h>
78 #include <linux/signal.h>
79 #include <linux/smp.h>
80 #include <linux/sched.h>
81 #include <linux/debugfs.h>
82 #include <linux/perf_event.h>
83 
84 #include <asm/asm.h>
85 #include <asm/branch.h>
86 #include <asm/byteorder.h>
87 #include <asm/cop2.h>
88 #include <asm/debug.h>
89 #include <asm/fpu.h>
90 #include <asm/fpu_emulator.h>
91 #include <asm/inst.h>
92 #include <asm/unaligned-emul.h>
93 #include <asm/mmu_context.h>
94 #include <asm/traps.h>
95 #include <linux/uaccess.h>
96 
97 #include "access-helper.h"
98 
99 enum {
100 	UNALIGNED_ACTION_QUIET,
101 	UNALIGNED_ACTION_SIGNAL,
102 	UNALIGNED_ACTION_SHOW,
103 };
104 #ifdef CONFIG_DEBUG_FS
105 static u32 unaligned_instructions;
106 static u32 unaligned_action;
107 #else
108 #define unaligned_action UNALIGNED_ACTION_QUIET
109 #endif
110 extern void show_registers(struct pt_regs *regs);
111 
emulate_load_store_insn(struct pt_regs * regs,void __user * addr,unsigned int * pc)112 static void emulate_load_store_insn(struct pt_regs *regs,
113 	void __user *addr, unsigned int *pc)
114 {
115 	unsigned long origpc, orig31, value;
116 	union mips_instruction insn;
117 	unsigned int res;
118 	bool user = user_mode(regs);
119 
120 	origpc = (unsigned long)pc;
121 	orig31 = regs->regs[31];
122 
123 	perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, 0);
124 
125 	/*
126 	 * This load never faults.
127 	 */
128 	__get_inst32(&insn.word, pc, user);
129 
130 	switch (insn.i_format.opcode) {
131 		/*
132 		 * These are instructions that a compiler doesn't generate.  We
133 		 * can assume therefore that the code is MIPS-aware and
134 		 * really buggy.  Emulating these instructions would break the
135 		 * semantics anyway.
136 		 */
137 	case ll_op:
138 	case lld_op:
139 	case sc_op:
140 	case scd_op:
141 
142 		/*
143 		 * For these instructions the only way to create an address
144 		 * error is an attempted access to kernel/supervisor address
145 		 * space.
146 		 */
147 	case ldl_op:
148 	case ldr_op:
149 	case lwl_op:
150 	case lwr_op:
151 	case sdl_op:
152 	case sdr_op:
153 	case swl_op:
154 	case swr_op:
155 	case lb_op:
156 	case lbu_op:
157 	case sb_op:
158 		goto sigbus;
159 
160 		/*
161 		 * The remaining opcodes are the ones that are really of
162 		 * interest.
163 		 */
164 #ifdef CONFIG_MACH_INGENIC
165 	case spec2_op:
166 		if (insn.mxu_lx_format.func != mxu_lx_op)
167 			goto sigbus; /* other MXU instructions we don't care */
168 
169 		switch (insn.mxu_lx_format.op) {
170 		case mxu_lxw_op:
171 			if (user && !access_ok(addr, 4))
172 				goto sigbus;
173 			LoadW(addr, value, res);
174 			if (res)
175 				goto fault;
176 			compute_return_epc(regs);
177 			regs->regs[insn.mxu_lx_format.rd] = value;
178 			break;
179 		case mxu_lxh_op:
180 			if (user && !access_ok(addr, 2))
181 				goto sigbus;
182 			LoadHW(addr, value, res);
183 			if (res)
184 				goto fault;
185 			compute_return_epc(regs);
186 			regs->regs[insn.dsp_format.rd] = value;
187 			break;
188 		case mxu_lxhu_op:
189 			if (user && !access_ok(addr, 2))
190 				goto sigbus;
191 			LoadHWU(addr, value, res);
192 			if (res)
193 				goto fault;
194 			compute_return_epc(regs);
195 			regs->regs[insn.dsp_format.rd] = value;
196 			break;
197 		case mxu_lxb_op:
198 		case mxu_lxbu_op:
199 			goto sigbus;
200 		default:
201 			goto sigill;
202 		}
203 		break;
204 #endif
205 	case spec3_op:
206 		if (insn.dsp_format.func == lx_op) {
207 			switch (insn.dsp_format.op) {
208 			case lwx_op:
209 				if (user && !access_ok(addr, 4))
210 					goto sigbus;
211 				LoadW(addr, value, res);
212 				if (res)
213 					goto fault;
214 				compute_return_epc(regs);
215 				regs->regs[insn.dsp_format.rd] = value;
216 				break;
217 			case lhx_op:
218 				if (user && !access_ok(addr, 2))
219 					goto sigbus;
220 				LoadHW(addr, value, res);
221 				if (res)
222 					goto fault;
223 				compute_return_epc(regs);
224 				regs->regs[insn.dsp_format.rd] = value;
225 				break;
226 			default:
227 				goto sigill;
228 			}
229 		}
230 #ifdef CONFIG_EVA
231 		else {
232 			/*
233 			 * we can land here only from kernel accessing user
234 			 * memory, so we need to "switch" the address limit to
235 			 * user space, so that address check can work properly.
236 			 */
237 			switch (insn.spec3_format.func) {
238 			case lhe_op:
239 				if (!access_ok(addr, 2))
240 					goto sigbus;
241 				LoadHWE(addr, value, res);
242 				if (res)
243 					goto fault;
244 				compute_return_epc(regs);
245 				regs->regs[insn.spec3_format.rt] = value;
246 				break;
247 			case lwe_op:
248 				if (!access_ok(addr, 4))
249 					goto sigbus;
250 				LoadWE(addr, value, res);
251 				if (res)
252 					goto fault;
253 				compute_return_epc(regs);
254 				regs->regs[insn.spec3_format.rt] = value;
255 				break;
256 			case lhue_op:
257 				if (!access_ok(addr, 2))
258 					goto sigbus;
259 				LoadHWUE(addr, value, res);
260 				if (res)
261 					goto fault;
262 				compute_return_epc(regs);
263 				regs->regs[insn.spec3_format.rt] = value;
264 				break;
265 			case she_op:
266 				if (!access_ok(addr, 2))
267 					goto sigbus;
268 				compute_return_epc(regs);
269 				value = regs->regs[insn.spec3_format.rt];
270 				StoreHWE(addr, value, res);
271 				if (res)
272 					goto fault;
273 				break;
274 			case swe_op:
275 				if (!access_ok(addr, 4))
276 					goto sigbus;
277 				compute_return_epc(regs);
278 				value = regs->regs[insn.spec3_format.rt];
279 				StoreWE(addr, value, res);
280 				if (res)
281 					goto fault;
282 				break;
283 			default:
284 				goto sigill;
285 			}
286 		}
287 #endif
288 		break;
289 	case lh_op:
290 		if (user && !access_ok(addr, 2))
291 			goto sigbus;
292 
293 		if (IS_ENABLED(CONFIG_EVA) && user)
294 			LoadHWE(addr, value, res);
295 		else
296 			LoadHW(addr, value, res);
297 
298 		if (res)
299 			goto fault;
300 		compute_return_epc(regs);
301 		regs->regs[insn.i_format.rt] = value;
302 		break;
303 
304 	case lw_op:
305 		if (user && !access_ok(addr, 4))
306 			goto sigbus;
307 
308 		if (IS_ENABLED(CONFIG_EVA) && user)
309 			LoadWE(addr, value, res);
310 		else
311 			LoadW(addr, value, res);
312 
313 		if (res)
314 			goto fault;
315 		compute_return_epc(regs);
316 		regs->regs[insn.i_format.rt] = value;
317 		break;
318 
319 	case lhu_op:
320 		if (user && !access_ok(addr, 2))
321 			goto sigbus;
322 
323 		if (IS_ENABLED(CONFIG_EVA) && user)
324 			LoadHWUE(addr, value, res);
325 		else
326 			LoadHWU(addr, value, res);
327 
328 		if (res)
329 			goto fault;
330 		compute_return_epc(regs);
331 		regs->regs[insn.i_format.rt] = value;
332 		break;
333 
334 	case lwu_op:
335 #ifdef CONFIG_64BIT
336 		/*
337 		 * A 32-bit kernel might be running on a 64-bit processor.  But
338 		 * if we're on a 32-bit processor and an i-cache incoherency
339 		 * or race makes us see a 64-bit instruction here the sdl/sdr
340 		 * would blow up, so for now we don't handle unaligned 64-bit
341 		 * instructions on 32-bit kernels.
342 		 */
343 		if (user && !access_ok(addr, 4))
344 			goto sigbus;
345 
346 		LoadWU(addr, value, res);
347 		if (res)
348 			goto fault;
349 		compute_return_epc(regs);
350 		regs->regs[insn.i_format.rt] = value;
351 		break;
352 #endif /* CONFIG_64BIT */
353 
354 		/* Cannot handle 64-bit instructions in 32-bit kernel */
355 		goto sigill;
356 
357 	case ld_op:
358 #ifdef CONFIG_64BIT
359 		/*
360 		 * A 32-bit kernel might be running on a 64-bit processor.  But
361 		 * if we're on a 32-bit processor and an i-cache incoherency
362 		 * or race makes us see a 64-bit instruction here the sdl/sdr
363 		 * would blow up, so for now we don't handle unaligned 64-bit
364 		 * instructions on 32-bit kernels.
365 		 */
366 		if (user && !access_ok(addr, 8))
367 			goto sigbus;
368 
369 		LoadDW(addr, value, res);
370 		if (res)
371 			goto fault;
372 		compute_return_epc(regs);
373 		regs->regs[insn.i_format.rt] = value;
374 		break;
375 #endif /* CONFIG_64BIT */
376 
377 		/* Cannot handle 64-bit instructions in 32-bit kernel */
378 		goto sigill;
379 
380 	case sh_op:
381 		if (user && !access_ok(addr, 2))
382 			goto sigbus;
383 
384 		compute_return_epc(regs);
385 		value = regs->regs[insn.i_format.rt];
386 
387 		if (IS_ENABLED(CONFIG_EVA) && user)
388 			StoreHWE(addr, value, res);
389 		else
390 			StoreHW(addr, value, res);
391 
392 		if (res)
393 			goto fault;
394 		break;
395 
396 	case sw_op:
397 		if (user && !access_ok(addr, 4))
398 			goto sigbus;
399 
400 		compute_return_epc(regs);
401 		value = regs->regs[insn.i_format.rt];
402 
403 		if (IS_ENABLED(CONFIG_EVA) && user)
404 			StoreWE(addr, value, res);
405 		else
406 			StoreW(addr, value, res);
407 
408 		if (res)
409 			goto fault;
410 		break;
411 
412 	case sd_op:
413 #ifdef CONFIG_64BIT
414 		/*
415 		 * A 32-bit kernel might be running on a 64-bit processor.  But
416 		 * if we're on a 32-bit processor and an i-cache incoherency
417 		 * or race makes us see a 64-bit instruction here the sdl/sdr
418 		 * would blow up, so for now we don't handle unaligned 64-bit
419 		 * instructions on 32-bit kernels.
420 		 */
421 		if (user && !access_ok(addr, 8))
422 			goto sigbus;
423 
424 		compute_return_epc(regs);
425 		value = regs->regs[insn.i_format.rt];
426 		StoreDW(addr, value, res);
427 		if (res)
428 			goto fault;
429 		break;
430 #endif /* CONFIG_64BIT */
431 
432 		/* Cannot handle 64-bit instructions in 32-bit kernel */
433 		goto sigill;
434 
435 #ifdef CONFIG_MIPS_FP_SUPPORT
436 
437 	case lwc1_op:
438 	case ldc1_op:
439 	case swc1_op:
440 	case sdc1_op:
441 	case cop1x_op: {
442 		void __user *fault_addr = NULL;
443 
444 		die_if_kernel("Unaligned FP access in kernel code", regs);
445 		BUG_ON(!used_math());
446 
447 		res = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1,
448 					       &fault_addr);
449 		own_fpu(1);	/* Restore FPU state. */
450 
451 		/* Signal if something went wrong. */
452 		process_fpemu_return(res, fault_addr, 0);
453 
454 		if (res == 0)
455 			break;
456 		return;
457 	}
458 #endif /* CONFIG_MIPS_FP_SUPPORT */
459 
460 #ifdef CONFIG_CPU_HAS_MSA
461 
462 	case msa_op: {
463 		unsigned int wd, preempted;
464 		enum msa_2b_fmt df;
465 		union fpureg *fpr;
466 
467 		if (!cpu_has_msa)
468 			goto sigill;
469 
470 		/*
471 		 * If we've reached this point then userland should have taken
472 		 * the MSA disabled exception & initialised vector context at
473 		 * some point in the past.
474 		 */
475 		BUG_ON(!thread_msa_context_live());
476 
477 		df = insn.msa_mi10_format.df;
478 		wd = insn.msa_mi10_format.wd;
479 		fpr = &current->thread.fpu.fpr[wd];
480 
481 		switch (insn.msa_mi10_format.func) {
482 		case msa_ld_op:
483 			if (!access_ok(addr, sizeof(*fpr)))
484 				goto sigbus;
485 
486 			do {
487 				/*
488 				 * If we have live MSA context keep track of
489 				 * whether we get preempted in order to avoid
490 				 * the register context we load being clobbered
491 				 * by the live context as it's saved during
492 				 * preemption. If we don't have live context
493 				 * then it can't be saved to clobber the value
494 				 * we load.
495 				 */
496 				preempted = test_thread_flag(TIF_USEDMSA);
497 
498 				res = __copy_from_user_inatomic(fpr, addr,
499 								sizeof(*fpr));
500 				if (res)
501 					goto fault;
502 
503 				/*
504 				 * Update the hardware register if it is in use
505 				 * by the task in this quantum, in order to
506 				 * avoid having to save & restore the whole
507 				 * vector context.
508 				 */
509 				preempt_disable();
510 				if (test_thread_flag(TIF_USEDMSA)) {
511 					write_msa_wr(wd, fpr, df);
512 					preempted = 0;
513 				}
514 				preempt_enable();
515 			} while (preempted);
516 			break;
517 
518 		case msa_st_op:
519 			if (!access_ok(addr, sizeof(*fpr)))
520 				goto sigbus;
521 
522 			/*
523 			 * Update from the hardware register if it is in use by
524 			 * the task in this quantum, in order to avoid having to
525 			 * save & restore the whole vector context.
526 			 */
527 			preempt_disable();
528 			if (test_thread_flag(TIF_USEDMSA))
529 				read_msa_wr(wd, fpr, df);
530 			preempt_enable();
531 
532 			res = __copy_to_user_inatomic(addr, fpr, sizeof(*fpr));
533 			if (res)
534 				goto fault;
535 			break;
536 
537 		default:
538 			goto sigbus;
539 		}
540 
541 		compute_return_epc(regs);
542 		break;
543 	}
544 #endif /* CONFIG_CPU_HAS_MSA */
545 
546 #ifndef CONFIG_CPU_MIPSR6
547 	/*
548 	 * COP2 is available to implementor for application specific use.
549 	 * It's up to applications to register a notifier chain and do
550 	 * whatever they have to do, including possible sending of signals.
551 	 *
552 	 * This instruction has been reallocated in Release 6
553 	 */
554 	case lwc2_op:
555 		cu2_notifier_call_chain(CU2_LWC2_OP, regs);
556 		break;
557 
558 	case ldc2_op:
559 		cu2_notifier_call_chain(CU2_LDC2_OP, regs);
560 		break;
561 
562 	case swc2_op:
563 		cu2_notifier_call_chain(CU2_SWC2_OP, regs);
564 		break;
565 
566 	case sdc2_op:
567 		cu2_notifier_call_chain(CU2_SDC2_OP, regs);
568 		break;
569 #endif
570 	default:
571 		/*
572 		 * Pheeee...  We encountered an yet unknown instruction or
573 		 * cache coherence problem.  Die sucker, die ...
574 		 */
575 		goto sigill;
576 	}
577 
578 #ifdef CONFIG_DEBUG_FS
579 	unaligned_instructions++;
580 #endif
581 
582 	return;
583 
584 fault:
585 	/* roll back jump/branch */
586 	regs->cp0_epc = origpc;
587 	regs->regs[31] = orig31;
588 	/* Did we have an exception handler installed? */
589 	if (fixup_exception(regs))
590 		return;
591 
592 	die_if_kernel("Unhandled kernel unaligned access", regs);
593 	force_sig(SIGSEGV);
594 
595 	return;
596 
597 sigbus:
598 	die_if_kernel("Unhandled kernel unaligned access", regs);
599 	force_sig(SIGBUS);
600 
601 	return;
602 
603 sigill:
604 	die_if_kernel
605 	    ("Unhandled kernel unaligned access or invalid instruction", regs);
606 	force_sig(SIGILL);
607 }
608 
609 /* Recode table from 16-bit register notation to 32-bit GPR. */
610 const int reg16to32[] = { 16, 17, 2, 3, 4, 5, 6, 7 };
611 
612 /* Recode table from 16-bit STORE register notation to 32-bit GPR. */
613 static const int reg16to32st[] = { 0, 17, 2, 3, 4, 5, 6, 7 };
614 
emulate_load_store_microMIPS(struct pt_regs * regs,void __user * addr)615 static void emulate_load_store_microMIPS(struct pt_regs *regs,
616 					 void __user *addr)
617 {
618 	unsigned long value;
619 	unsigned int res;
620 	int i;
621 	unsigned int reg = 0, rvar;
622 	unsigned long orig31;
623 	u16 __user *pc16;
624 	u16 halfword;
625 	unsigned int word;
626 	unsigned long origpc, contpc;
627 	union mips_instruction insn;
628 	struct mm_decoded_insn mminsn;
629 	bool user = user_mode(regs);
630 
631 	origpc = regs->cp0_epc;
632 	orig31 = regs->regs[31];
633 
634 	mminsn.micro_mips_mode = 1;
635 
636 	/*
637 	 * This load never faults.
638 	 */
639 	pc16 = (unsigned short __user *)msk_isa16_mode(regs->cp0_epc);
640 	__get_user(halfword, pc16);
641 	pc16++;
642 	contpc = regs->cp0_epc + 2;
643 	word = ((unsigned int)halfword << 16);
644 	mminsn.pc_inc = 2;
645 
646 	if (!mm_insn_16bit(halfword)) {
647 		__get_user(halfword, pc16);
648 		pc16++;
649 		contpc = regs->cp0_epc + 4;
650 		mminsn.pc_inc = 4;
651 		word |= halfword;
652 	}
653 	mminsn.insn = word;
654 
655 	if (get_user(halfword, pc16))
656 		goto fault;
657 	mminsn.next_pc_inc = 2;
658 	word = ((unsigned int)halfword << 16);
659 
660 	if (!mm_insn_16bit(halfword)) {
661 		pc16++;
662 		if (get_user(halfword, pc16))
663 			goto fault;
664 		mminsn.next_pc_inc = 4;
665 		word |= halfword;
666 	}
667 	mminsn.next_insn = word;
668 
669 	insn = (union mips_instruction)(mminsn.insn);
670 	if (mm_isBranchInstr(regs, mminsn, &contpc))
671 		insn = (union mips_instruction)(mminsn.next_insn);
672 
673 	/*  Parse instruction to find what to do */
674 
675 	switch (insn.mm_i_format.opcode) {
676 
677 	case mm_pool32a_op:
678 		switch (insn.mm_x_format.func) {
679 		case mm_lwxs_op:
680 			reg = insn.mm_x_format.rd;
681 			goto loadW;
682 		}
683 
684 		goto sigbus;
685 
686 	case mm_pool32b_op:
687 		switch (insn.mm_m_format.func) {
688 		case mm_lwp_func:
689 			reg = insn.mm_m_format.rd;
690 			if (reg == 31)
691 				goto sigbus;
692 
693 			if (user && !access_ok(addr, 8))
694 				goto sigbus;
695 
696 			LoadW(addr, value, res);
697 			if (res)
698 				goto fault;
699 			regs->regs[reg] = value;
700 			addr += 4;
701 			LoadW(addr, value, res);
702 			if (res)
703 				goto fault;
704 			regs->regs[reg + 1] = value;
705 			goto success;
706 
707 		case mm_swp_func:
708 			reg = insn.mm_m_format.rd;
709 			if (reg == 31)
710 				goto sigbus;
711 
712 			if (user && !access_ok(addr, 8))
713 				goto sigbus;
714 
715 			value = regs->regs[reg];
716 			StoreW(addr, value, res);
717 			if (res)
718 				goto fault;
719 			addr += 4;
720 			value = regs->regs[reg + 1];
721 			StoreW(addr, value, res);
722 			if (res)
723 				goto fault;
724 			goto success;
725 
726 		case mm_ldp_func:
727 #ifdef CONFIG_64BIT
728 			reg = insn.mm_m_format.rd;
729 			if (reg == 31)
730 				goto sigbus;
731 
732 			if (user && !access_ok(addr, 16))
733 				goto sigbus;
734 
735 			LoadDW(addr, value, res);
736 			if (res)
737 				goto fault;
738 			regs->regs[reg] = value;
739 			addr += 8;
740 			LoadDW(addr, value, res);
741 			if (res)
742 				goto fault;
743 			regs->regs[reg + 1] = value;
744 			goto success;
745 #endif /* CONFIG_64BIT */
746 
747 			goto sigill;
748 
749 		case mm_sdp_func:
750 #ifdef CONFIG_64BIT
751 			reg = insn.mm_m_format.rd;
752 			if (reg == 31)
753 				goto sigbus;
754 
755 			if (user && !access_ok(addr, 16))
756 				goto sigbus;
757 
758 			value = regs->regs[reg];
759 			StoreDW(addr, value, res);
760 			if (res)
761 				goto fault;
762 			addr += 8;
763 			value = regs->regs[reg + 1];
764 			StoreDW(addr, value, res);
765 			if (res)
766 				goto fault;
767 			goto success;
768 #endif /* CONFIG_64BIT */
769 
770 			goto sigill;
771 
772 		case mm_lwm32_func:
773 			reg = insn.mm_m_format.rd;
774 			rvar = reg & 0xf;
775 			if ((rvar > 9) || !reg)
776 				goto sigill;
777 			if (reg & 0x10) {
778 				if (user && !access_ok(addr, 4 * (rvar + 1)))
779 					goto sigbus;
780 			} else {
781 				if (user && !access_ok(addr, 4 * rvar))
782 					goto sigbus;
783 			}
784 			if (rvar == 9)
785 				rvar = 8;
786 			for (i = 16; rvar; rvar--, i++) {
787 				LoadW(addr, value, res);
788 				if (res)
789 					goto fault;
790 				addr += 4;
791 				regs->regs[i] = value;
792 			}
793 			if ((reg & 0xf) == 9) {
794 				LoadW(addr, value, res);
795 				if (res)
796 					goto fault;
797 				addr += 4;
798 				regs->regs[30] = value;
799 			}
800 			if (reg & 0x10) {
801 				LoadW(addr, value, res);
802 				if (res)
803 					goto fault;
804 				regs->regs[31] = value;
805 			}
806 			goto success;
807 
808 		case mm_swm32_func:
809 			reg = insn.mm_m_format.rd;
810 			rvar = reg & 0xf;
811 			if ((rvar > 9) || !reg)
812 				goto sigill;
813 			if (reg & 0x10) {
814 				if (user && !access_ok(addr, 4 * (rvar + 1)))
815 					goto sigbus;
816 			} else {
817 				if (user && !access_ok(addr, 4 * rvar))
818 					goto sigbus;
819 			}
820 			if (rvar == 9)
821 				rvar = 8;
822 			for (i = 16; rvar; rvar--, i++) {
823 				value = regs->regs[i];
824 				StoreW(addr, value, res);
825 				if (res)
826 					goto fault;
827 				addr += 4;
828 			}
829 			if ((reg & 0xf) == 9) {
830 				value = regs->regs[30];
831 				StoreW(addr, value, res);
832 				if (res)
833 					goto fault;
834 				addr += 4;
835 			}
836 			if (reg & 0x10) {
837 				value = regs->regs[31];
838 				StoreW(addr, value, res);
839 				if (res)
840 					goto fault;
841 			}
842 			goto success;
843 
844 		case mm_ldm_func:
845 #ifdef CONFIG_64BIT
846 			reg = insn.mm_m_format.rd;
847 			rvar = reg & 0xf;
848 			if ((rvar > 9) || !reg)
849 				goto sigill;
850 			if (reg & 0x10) {
851 				if (user && !access_ok(addr, 8 * (rvar + 1)))
852 					goto sigbus;
853 			} else {
854 				if (user && !access_ok(addr, 8 * rvar))
855 					goto sigbus;
856 			}
857 			if (rvar == 9)
858 				rvar = 8;
859 
860 			for (i = 16; rvar; rvar--, i++) {
861 				LoadDW(addr, value, res);
862 				if (res)
863 					goto fault;
864 				addr += 4;
865 				regs->regs[i] = value;
866 			}
867 			if ((reg & 0xf) == 9) {
868 				LoadDW(addr, value, res);
869 				if (res)
870 					goto fault;
871 				addr += 8;
872 				regs->regs[30] = value;
873 			}
874 			if (reg & 0x10) {
875 				LoadDW(addr, value, res);
876 				if (res)
877 					goto fault;
878 				regs->regs[31] = value;
879 			}
880 			goto success;
881 #endif /* CONFIG_64BIT */
882 
883 			goto sigill;
884 
885 		case mm_sdm_func:
886 #ifdef CONFIG_64BIT
887 			reg = insn.mm_m_format.rd;
888 			rvar = reg & 0xf;
889 			if ((rvar > 9) || !reg)
890 				goto sigill;
891 			if (reg & 0x10) {
892 				if (user && !access_ok(addr, 8 * (rvar + 1)))
893 					goto sigbus;
894 			} else {
895 				if (user && !access_ok(addr, 8 * rvar))
896 					goto sigbus;
897 			}
898 			if (rvar == 9)
899 				rvar = 8;
900 
901 			for (i = 16; rvar; rvar--, i++) {
902 				value = regs->regs[i];
903 				StoreDW(addr, value, res);
904 				if (res)
905 					goto fault;
906 				addr += 8;
907 			}
908 			if ((reg & 0xf) == 9) {
909 				value = regs->regs[30];
910 				StoreDW(addr, value, res);
911 				if (res)
912 					goto fault;
913 				addr += 8;
914 			}
915 			if (reg & 0x10) {
916 				value = regs->regs[31];
917 				StoreDW(addr, value, res);
918 				if (res)
919 					goto fault;
920 			}
921 			goto success;
922 #endif /* CONFIG_64BIT */
923 
924 			goto sigill;
925 
926 			/*  LWC2, SWC2, LDC2, SDC2 are not serviced */
927 		}
928 
929 		goto sigbus;
930 
931 	case mm_pool32c_op:
932 		switch (insn.mm_m_format.func) {
933 		case mm_lwu_func:
934 			reg = insn.mm_m_format.rd;
935 			goto loadWU;
936 		}
937 
938 		/*  LL,SC,LLD,SCD are not serviced */
939 		goto sigbus;
940 
941 #ifdef CONFIG_MIPS_FP_SUPPORT
942 	case mm_pool32f_op:
943 		switch (insn.mm_x_format.func) {
944 		case mm_lwxc1_func:
945 		case mm_swxc1_func:
946 		case mm_ldxc1_func:
947 		case mm_sdxc1_func:
948 			goto fpu_emul;
949 		}
950 
951 		goto sigbus;
952 
953 	case mm_ldc132_op:
954 	case mm_sdc132_op:
955 	case mm_lwc132_op:
956 	case mm_swc132_op: {
957 		void __user *fault_addr = NULL;
958 
959 fpu_emul:
960 		/* roll back jump/branch */
961 		regs->cp0_epc = origpc;
962 		regs->regs[31] = orig31;
963 
964 		die_if_kernel("Unaligned FP access in kernel code", regs);
965 		BUG_ON(!used_math());
966 		BUG_ON(!is_fpu_owner());
967 
968 		res = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1,
969 					       &fault_addr);
970 		own_fpu(1);	/* restore FPU state */
971 
972 		/* If something went wrong, signal */
973 		process_fpemu_return(res, fault_addr, 0);
974 
975 		if (res == 0)
976 			goto success;
977 		return;
978 	}
979 #endif /* CONFIG_MIPS_FP_SUPPORT */
980 
981 	case mm_lh32_op:
982 		reg = insn.mm_i_format.rt;
983 		goto loadHW;
984 
985 	case mm_lhu32_op:
986 		reg = insn.mm_i_format.rt;
987 		goto loadHWU;
988 
989 	case mm_lw32_op:
990 		reg = insn.mm_i_format.rt;
991 		goto loadW;
992 
993 	case mm_sh32_op:
994 		reg = insn.mm_i_format.rt;
995 		goto storeHW;
996 
997 	case mm_sw32_op:
998 		reg = insn.mm_i_format.rt;
999 		goto storeW;
1000 
1001 	case mm_ld32_op:
1002 		reg = insn.mm_i_format.rt;
1003 		goto loadDW;
1004 
1005 	case mm_sd32_op:
1006 		reg = insn.mm_i_format.rt;
1007 		goto storeDW;
1008 
1009 	case mm_pool16c_op:
1010 		switch (insn.mm16_m_format.func) {
1011 		case mm_lwm16_op:
1012 			reg = insn.mm16_m_format.rlist;
1013 			rvar = reg + 1;
1014 			if (user && !access_ok(addr, 4 * rvar))
1015 				goto sigbus;
1016 
1017 			for (i = 16; rvar; rvar--, i++) {
1018 				LoadW(addr, value, res);
1019 				if (res)
1020 					goto fault;
1021 				addr += 4;
1022 				regs->regs[i] = value;
1023 			}
1024 			LoadW(addr, value, res);
1025 			if (res)
1026 				goto fault;
1027 			regs->regs[31] = value;
1028 
1029 			goto success;
1030 
1031 		case mm_swm16_op:
1032 			reg = insn.mm16_m_format.rlist;
1033 			rvar = reg + 1;
1034 			if (user && !access_ok(addr, 4 * rvar))
1035 				goto sigbus;
1036 
1037 			for (i = 16; rvar; rvar--, i++) {
1038 				value = regs->regs[i];
1039 				StoreW(addr, value, res);
1040 				if (res)
1041 					goto fault;
1042 				addr += 4;
1043 			}
1044 			value = regs->regs[31];
1045 			StoreW(addr, value, res);
1046 			if (res)
1047 				goto fault;
1048 
1049 			goto success;
1050 
1051 		}
1052 
1053 		goto sigbus;
1054 
1055 	case mm_lhu16_op:
1056 		reg = reg16to32[insn.mm16_rb_format.rt];
1057 		goto loadHWU;
1058 
1059 	case mm_lw16_op:
1060 		reg = reg16to32[insn.mm16_rb_format.rt];
1061 		goto loadW;
1062 
1063 	case mm_sh16_op:
1064 		reg = reg16to32st[insn.mm16_rb_format.rt];
1065 		goto storeHW;
1066 
1067 	case mm_sw16_op:
1068 		reg = reg16to32st[insn.mm16_rb_format.rt];
1069 		goto storeW;
1070 
1071 	case mm_lwsp16_op:
1072 		reg = insn.mm16_r5_format.rt;
1073 		goto loadW;
1074 
1075 	case mm_swsp16_op:
1076 		reg = insn.mm16_r5_format.rt;
1077 		goto storeW;
1078 
1079 	case mm_lwgp16_op:
1080 		reg = reg16to32[insn.mm16_r3_format.rt];
1081 		goto loadW;
1082 
1083 	default:
1084 		goto sigill;
1085 	}
1086 
1087 loadHW:
1088 	if (user && !access_ok(addr, 2))
1089 		goto sigbus;
1090 
1091 	LoadHW(addr, value, res);
1092 	if (res)
1093 		goto fault;
1094 	regs->regs[reg] = value;
1095 	goto success;
1096 
1097 loadHWU:
1098 	if (user && !access_ok(addr, 2))
1099 		goto sigbus;
1100 
1101 	LoadHWU(addr, value, res);
1102 	if (res)
1103 		goto fault;
1104 	regs->regs[reg] = value;
1105 	goto success;
1106 
1107 loadW:
1108 	if (user && !access_ok(addr, 4))
1109 		goto sigbus;
1110 
1111 	LoadW(addr, value, res);
1112 	if (res)
1113 		goto fault;
1114 	regs->regs[reg] = value;
1115 	goto success;
1116 
1117 loadWU:
1118 #ifdef CONFIG_64BIT
1119 	/*
1120 	 * A 32-bit kernel might be running on a 64-bit processor.  But
1121 	 * if we're on a 32-bit processor and an i-cache incoherency
1122 	 * or race makes us see a 64-bit instruction here the sdl/sdr
1123 	 * would blow up, so for now we don't handle unaligned 64-bit
1124 	 * instructions on 32-bit kernels.
1125 	 */
1126 	if (user && !access_ok(addr, 4))
1127 		goto sigbus;
1128 
1129 	LoadWU(addr, value, res);
1130 	if (res)
1131 		goto fault;
1132 	regs->regs[reg] = value;
1133 	goto success;
1134 #endif /* CONFIG_64BIT */
1135 
1136 	/* Cannot handle 64-bit instructions in 32-bit kernel */
1137 	goto sigill;
1138 
1139 loadDW:
1140 #ifdef CONFIG_64BIT
1141 	/*
1142 	 * A 32-bit kernel might be running on a 64-bit processor.  But
1143 	 * if we're on a 32-bit processor and an i-cache incoherency
1144 	 * or race makes us see a 64-bit instruction here the sdl/sdr
1145 	 * would blow up, so for now we don't handle unaligned 64-bit
1146 	 * instructions on 32-bit kernels.
1147 	 */
1148 	if (user && !access_ok(addr, 8))
1149 		goto sigbus;
1150 
1151 	LoadDW(addr, value, res);
1152 	if (res)
1153 		goto fault;
1154 	regs->regs[reg] = value;
1155 	goto success;
1156 #endif /* CONFIG_64BIT */
1157 
1158 	/* Cannot handle 64-bit instructions in 32-bit kernel */
1159 	goto sigill;
1160 
1161 storeHW:
1162 	if (user && !access_ok(addr, 2))
1163 		goto sigbus;
1164 
1165 	value = regs->regs[reg];
1166 	StoreHW(addr, value, res);
1167 	if (res)
1168 		goto fault;
1169 	goto success;
1170 
1171 storeW:
1172 	if (user && !access_ok(addr, 4))
1173 		goto sigbus;
1174 
1175 	value = regs->regs[reg];
1176 	StoreW(addr, value, res);
1177 	if (res)
1178 		goto fault;
1179 	goto success;
1180 
1181 storeDW:
1182 #ifdef CONFIG_64BIT
1183 	/*
1184 	 * A 32-bit kernel might be running on a 64-bit processor.  But
1185 	 * if we're on a 32-bit processor and an i-cache incoherency
1186 	 * or race makes us see a 64-bit instruction here the sdl/sdr
1187 	 * would blow up, so for now we don't handle unaligned 64-bit
1188 	 * instructions on 32-bit kernels.
1189 	 */
1190 	if (user && !access_ok(addr, 8))
1191 		goto sigbus;
1192 
1193 	value = regs->regs[reg];
1194 	StoreDW(addr, value, res);
1195 	if (res)
1196 		goto fault;
1197 	goto success;
1198 #endif /* CONFIG_64BIT */
1199 
1200 	/* Cannot handle 64-bit instructions in 32-bit kernel */
1201 	goto sigill;
1202 
1203 success:
1204 	regs->cp0_epc = contpc;	/* advance or branch */
1205 
1206 #ifdef CONFIG_DEBUG_FS
1207 	unaligned_instructions++;
1208 #endif
1209 	return;
1210 
1211 fault:
1212 	/* roll back jump/branch */
1213 	regs->cp0_epc = origpc;
1214 	regs->regs[31] = orig31;
1215 	/* Did we have an exception handler installed? */
1216 	if (fixup_exception(regs))
1217 		return;
1218 
1219 	die_if_kernel("Unhandled kernel unaligned access", regs);
1220 	force_sig(SIGSEGV);
1221 
1222 	return;
1223 
1224 sigbus:
1225 	die_if_kernel("Unhandled kernel unaligned access", regs);
1226 	force_sig(SIGBUS);
1227 
1228 	return;
1229 
1230 sigill:
1231 	die_if_kernel
1232 	    ("Unhandled kernel unaligned access or invalid instruction", regs);
1233 	force_sig(SIGILL);
1234 }
1235 
emulate_load_store_MIPS16e(struct pt_regs * regs,void __user * addr)1236 static void emulate_load_store_MIPS16e(struct pt_regs *regs, void __user * addr)
1237 {
1238 	unsigned long value;
1239 	unsigned int res;
1240 	int reg;
1241 	unsigned long orig31;
1242 	u16 __user *pc16;
1243 	unsigned long origpc;
1244 	union mips16e_instruction mips16inst, oldinst;
1245 	unsigned int opcode;
1246 	int extended = 0;
1247 	bool user = user_mode(regs);
1248 
1249 	origpc = regs->cp0_epc;
1250 	orig31 = regs->regs[31];
1251 	pc16 = (unsigned short __user *)msk_isa16_mode(origpc);
1252 	/*
1253 	 * This load never faults.
1254 	 */
1255 	__get_user(mips16inst.full, pc16);
1256 	oldinst = mips16inst;
1257 
1258 	/* skip EXTEND instruction */
1259 	if (mips16inst.ri.opcode == MIPS16e_extend_op) {
1260 		extended = 1;
1261 		pc16++;
1262 		__get_user(mips16inst.full, pc16);
1263 	} else if (delay_slot(regs)) {
1264 		/*  skip jump instructions */
1265 		/*  JAL/JALX are 32 bits but have OPCODE in first short int */
1266 		if (mips16inst.ri.opcode == MIPS16e_jal_op)
1267 			pc16++;
1268 		pc16++;
1269 		if (get_user(mips16inst.full, pc16))
1270 			goto sigbus;
1271 	}
1272 
1273 	opcode = mips16inst.ri.opcode;
1274 	switch (opcode) {
1275 	case MIPS16e_i64_op:	/* I64 or RI64 instruction */
1276 		switch (mips16inst.i64.func) {	/* I64/RI64 func field check */
1277 		case MIPS16e_ldpc_func:
1278 		case MIPS16e_ldsp_func:
1279 			reg = reg16to32[mips16inst.ri64.ry];
1280 			goto loadDW;
1281 
1282 		case MIPS16e_sdsp_func:
1283 			reg = reg16to32[mips16inst.ri64.ry];
1284 			goto writeDW;
1285 
1286 		case MIPS16e_sdrasp_func:
1287 			reg = 29;	/* GPRSP */
1288 			goto writeDW;
1289 		}
1290 
1291 		goto sigbus;
1292 
1293 	case MIPS16e_swsp_op:
1294 		reg = reg16to32[mips16inst.ri.rx];
1295 		if (extended && cpu_has_mips16e2)
1296 			switch (mips16inst.ri.imm >> 5) {
1297 			case 0:		/* SWSP */
1298 			case 1:		/* SWGP */
1299 				break;
1300 			case 2:		/* SHGP */
1301 				opcode = MIPS16e_sh_op;
1302 				break;
1303 			default:
1304 				goto sigbus;
1305 			}
1306 		break;
1307 
1308 	case MIPS16e_lwpc_op:
1309 		reg = reg16to32[mips16inst.ri.rx];
1310 		break;
1311 
1312 	case MIPS16e_lwsp_op:
1313 		reg = reg16to32[mips16inst.ri.rx];
1314 		if (extended && cpu_has_mips16e2)
1315 			switch (mips16inst.ri.imm >> 5) {
1316 			case 0:		/* LWSP */
1317 			case 1:		/* LWGP */
1318 				break;
1319 			case 2:		/* LHGP */
1320 				opcode = MIPS16e_lh_op;
1321 				break;
1322 			case 4:		/* LHUGP */
1323 				opcode = MIPS16e_lhu_op;
1324 				break;
1325 			default:
1326 				goto sigbus;
1327 			}
1328 		break;
1329 
1330 	case MIPS16e_i8_op:
1331 		if (mips16inst.i8.func != MIPS16e_swrasp_func)
1332 			goto sigbus;
1333 		reg = 29;	/* GPRSP */
1334 		break;
1335 
1336 	default:
1337 		reg = reg16to32[mips16inst.rri.ry];
1338 		break;
1339 	}
1340 
1341 	switch (opcode) {
1342 
1343 	case MIPS16e_lb_op:
1344 	case MIPS16e_lbu_op:
1345 	case MIPS16e_sb_op:
1346 		goto sigbus;
1347 
1348 	case MIPS16e_lh_op:
1349 		if (user && !access_ok(addr, 2))
1350 			goto sigbus;
1351 
1352 		LoadHW(addr, value, res);
1353 		if (res)
1354 			goto fault;
1355 		MIPS16e_compute_return_epc(regs, &oldinst);
1356 		regs->regs[reg] = value;
1357 		break;
1358 
1359 	case MIPS16e_lhu_op:
1360 		if (user && !access_ok(addr, 2))
1361 			goto sigbus;
1362 
1363 		LoadHWU(addr, value, res);
1364 		if (res)
1365 			goto fault;
1366 		MIPS16e_compute_return_epc(regs, &oldinst);
1367 		regs->regs[reg] = value;
1368 		break;
1369 
1370 	case MIPS16e_lw_op:
1371 	case MIPS16e_lwpc_op:
1372 	case MIPS16e_lwsp_op:
1373 		if (user && !access_ok(addr, 4))
1374 			goto sigbus;
1375 
1376 		LoadW(addr, value, res);
1377 		if (res)
1378 			goto fault;
1379 		MIPS16e_compute_return_epc(regs, &oldinst);
1380 		regs->regs[reg] = value;
1381 		break;
1382 
1383 	case MIPS16e_lwu_op:
1384 #ifdef CONFIG_64BIT
1385 		/*
1386 		 * A 32-bit kernel might be running on a 64-bit processor.  But
1387 		 * if we're on a 32-bit processor and an i-cache incoherency
1388 		 * or race makes us see a 64-bit instruction here the sdl/sdr
1389 		 * would blow up, so for now we don't handle unaligned 64-bit
1390 		 * instructions on 32-bit kernels.
1391 		 */
1392 		if (user && !access_ok(addr, 4))
1393 			goto sigbus;
1394 
1395 		LoadWU(addr, value, res);
1396 		if (res)
1397 			goto fault;
1398 		MIPS16e_compute_return_epc(regs, &oldinst);
1399 		regs->regs[reg] = value;
1400 		break;
1401 #endif /* CONFIG_64BIT */
1402 
1403 		/* Cannot handle 64-bit instructions in 32-bit kernel */
1404 		goto sigill;
1405 
1406 	case MIPS16e_ld_op:
1407 loadDW:
1408 #ifdef CONFIG_64BIT
1409 		/*
1410 		 * A 32-bit kernel might be running on a 64-bit processor.  But
1411 		 * if we're on a 32-bit processor and an i-cache incoherency
1412 		 * or race makes us see a 64-bit instruction here the sdl/sdr
1413 		 * would blow up, so for now we don't handle unaligned 64-bit
1414 		 * instructions on 32-bit kernels.
1415 		 */
1416 		if (user && !access_ok(addr, 8))
1417 			goto sigbus;
1418 
1419 		LoadDW(addr, value, res);
1420 		if (res)
1421 			goto fault;
1422 		MIPS16e_compute_return_epc(regs, &oldinst);
1423 		regs->regs[reg] = value;
1424 		break;
1425 #endif /* CONFIG_64BIT */
1426 
1427 		/* Cannot handle 64-bit instructions in 32-bit kernel */
1428 		goto sigill;
1429 
1430 	case MIPS16e_sh_op:
1431 		if (user && !access_ok(addr, 2))
1432 			goto sigbus;
1433 
1434 		MIPS16e_compute_return_epc(regs, &oldinst);
1435 		value = regs->regs[reg];
1436 		StoreHW(addr, value, res);
1437 		if (res)
1438 			goto fault;
1439 		break;
1440 
1441 	case MIPS16e_sw_op:
1442 	case MIPS16e_swsp_op:
1443 	case MIPS16e_i8_op:	/* actually - MIPS16e_swrasp_func */
1444 		if (user && !access_ok(addr, 4))
1445 			goto sigbus;
1446 
1447 		MIPS16e_compute_return_epc(regs, &oldinst);
1448 		value = regs->regs[reg];
1449 		StoreW(addr, value, res);
1450 		if (res)
1451 			goto fault;
1452 		break;
1453 
1454 	case MIPS16e_sd_op:
1455 writeDW:
1456 #ifdef CONFIG_64BIT
1457 		/*
1458 		 * A 32-bit kernel might be running on a 64-bit processor.  But
1459 		 * if we're on a 32-bit processor and an i-cache incoherency
1460 		 * or race makes us see a 64-bit instruction here the sdl/sdr
1461 		 * would blow up, so for now we don't handle unaligned 64-bit
1462 		 * instructions on 32-bit kernels.
1463 		 */
1464 		if (user && !access_ok(addr, 8))
1465 			goto sigbus;
1466 
1467 		MIPS16e_compute_return_epc(regs, &oldinst);
1468 		value = regs->regs[reg];
1469 		StoreDW(addr, value, res);
1470 		if (res)
1471 			goto fault;
1472 		break;
1473 #endif /* CONFIG_64BIT */
1474 
1475 		/* Cannot handle 64-bit instructions in 32-bit kernel */
1476 		goto sigill;
1477 
1478 	default:
1479 		/*
1480 		 * Pheeee...  We encountered an yet unknown instruction or
1481 		 * cache coherence problem.  Die sucker, die ...
1482 		 */
1483 		goto sigill;
1484 	}
1485 
1486 #ifdef CONFIG_DEBUG_FS
1487 	unaligned_instructions++;
1488 #endif
1489 
1490 	return;
1491 
1492 fault:
1493 	/* roll back jump/branch */
1494 	regs->cp0_epc = origpc;
1495 	regs->regs[31] = orig31;
1496 	/* Did we have an exception handler installed? */
1497 	if (fixup_exception(regs))
1498 		return;
1499 
1500 	die_if_kernel("Unhandled kernel unaligned access", regs);
1501 	force_sig(SIGSEGV);
1502 
1503 	return;
1504 
1505 sigbus:
1506 	die_if_kernel("Unhandled kernel unaligned access", regs);
1507 	force_sig(SIGBUS);
1508 
1509 	return;
1510 
1511 sigill:
1512 	die_if_kernel
1513 	    ("Unhandled kernel unaligned access or invalid instruction", regs);
1514 	force_sig(SIGILL);
1515 }
1516 
do_ade(struct pt_regs * regs)1517 asmlinkage void do_ade(struct pt_regs *regs)
1518 {
1519 	enum ctx_state prev_state;
1520 	unsigned int *pc;
1521 
1522 	prev_state = exception_enter();
1523 	perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS,
1524 			1, regs, regs->cp0_badvaddr);
1525 
1526 #ifdef CONFIG_64BIT
1527 	/*
1528 	 * check, if we are hitting space between CPU implemented maximum
1529 	 * virtual user address and 64bit maximum virtual user address
1530 	 * and do exception handling to get EFAULTs for get_user/put_user
1531 	 */
1532 	if ((regs->cp0_badvaddr >= (1UL << cpu_vmbits)) &&
1533 	    (regs->cp0_badvaddr < XKSSEG)) {
1534 		if (fixup_exception(regs)) {
1535 			current->thread.cp0_baduaddr = regs->cp0_badvaddr;
1536 			return;
1537 		}
1538 		goto sigbus;
1539 	}
1540 #endif
1541 
1542 	/*
1543 	 * Did we catch a fault trying to load an instruction?
1544 	 */
1545 	if (regs->cp0_badvaddr == regs->cp0_epc)
1546 		goto sigbus;
1547 
1548 	if (user_mode(regs) && !test_thread_flag(TIF_FIXADE))
1549 		goto sigbus;
1550 	if (unaligned_action == UNALIGNED_ACTION_SIGNAL)
1551 		goto sigbus;
1552 
1553 	/*
1554 	 * Do branch emulation only if we didn't forward the exception.
1555 	 * This is all so but ugly ...
1556 	 */
1557 
1558 	/*
1559 	 * Are we running in microMIPS mode?
1560 	 */
1561 	if (get_isa16_mode(regs->cp0_epc)) {
1562 		/*
1563 		 * Did we catch a fault trying to load an instruction in
1564 		 * 16-bit mode?
1565 		 */
1566 		if (regs->cp0_badvaddr == msk_isa16_mode(regs->cp0_epc))
1567 			goto sigbus;
1568 		if (unaligned_action == UNALIGNED_ACTION_SHOW)
1569 			show_registers(regs);
1570 
1571 		if (cpu_has_mmips) {
1572 			emulate_load_store_microMIPS(regs,
1573 				(void __user *)regs->cp0_badvaddr);
1574 			return;
1575 		}
1576 
1577 		if (cpu_has_mips16) {
1578 			emulate_load_store_MIPS16e(regs,
1579 				(void __user *)regs->cp0_badvaddr);
1580 			return;
1581 		}
1582 
1583 		goto sigbus;
1584 	}
1585 
1586 	if (unaligned_action == UNALIGNED_ACTION_SHOW)
1587 		show_registers(regs);
1588 	pc = (unsigned int *)exception_epc(regs);
1589 
1590 	emulate_load_store_insn(regs, (void __user *)regs->cp0_badvaddr, pc);
1591 
1592 	return;
1593 
1594 sigbus:
1595 	die_if_kernel("Kernel unaligned instruction access", regs);
1596 	force_sig(SIGBUS);
1597 
1598 	/*
1599 	 * XXX On return from the signal handler we should advance the epc
1600 	 */
1601 	exception_exit(prev_state);
1602 }
1603 
1604 #ifdef CONFIG_DEBUG_FS
debugfs_unaligned(void)1605 static int __init debugfs_unaligned(void)
1606 {
1607 	debugfs_create_u32("unaligned_instructions", S_IRUGO, mips_debugfs_dir,
1608 			   &unaligned_instructions);
1609 	debugfs_create_u32("unaligned_action", S_IRUGO | S_IWUSR,
1610 			   mips_debugfs_dir, &unaligned_action);
1611 	return 0;
1612 }
1613 arch_initcall(debugfs_unaligned);
1614 #endif
1615