aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/traps_32.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-01-26 13:12:08 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-01-26 13:12:08 -0500
commit37f5fed55559a030c430550bcacec75e6a833f1b (patch)
treeef20187783d784a1106d287bb4bb7805bf3a6ca3 /arch/sh/kernel/traps_32.c
parenta1c70a756f8d756668acdbfd61dfc14de12fbaea (diff)
parent0609697eab9775564845d4c94f9e3780fb791ffd (diff)
Merge branch 'sh/for-2.6.29' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* 'sh/for-2.6.29' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (22 commits) dma-coherent: Restore dma_alloc_from_coherent() large alloc fall back policy. dma-coherent: per-device coherent area is in pages, not bytes. sh: fix unaligned and nonexistent address handling nommu: Stub in vm_map_ram()/vm_unmap_ram()/vm_unmap_aliases(). sh: fix sh-sci / early printk build on sh7723 sh: export the sh7343 JPU to user space sh: update defconfigs. serial: sh-sci: Fix up SH7720/SH7721 SCI build. sh: Kill off obsolete busses from arch/sh/Kconfig. sh: sh7785lcr/highlander/hp6xx need linux/irq.h. sh: Migo-R MMC support using spi_gpio and mmc_spi. sh: ap325rxa MMC support using spi_gpio and mmc_spi sh: mach-x3proto: needs linux/irq.h. sh: Drop the BKL from sys_execve() on SH-5. sh: convert rsk7203 to use smsc911x. sh: convert magicpanelr2 platform to use smsc911x. sh: convert ap325rxa platform to use smsc911x. sh: mach-migor: Add tw9910 support. sh: mach-migor: Delete soc_camera_platform setup. sh: mach-migor: Add ov772x support. ...
Diffstat (limited to 'arch/sh/kernel/traps_32.c')
-rw-r--r--arch/sh/kernel/traps_32.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index c0aa3d83ec0e..60dcf87ed019 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -125,20 +125,18 @@ static inline void die_if_kernel(const char *str, struct pt_regs *regs,
125 * - userspace errors just cause EFAULT to be returned, resulting in SEGV 125 * - userspace errors just cause EFAULT to be returned, resulting in SEGV
126 * - kernel/userspace interfaces cause a jump to an appropriate handler 126 * - kernel/userspace interfaces cause a jump to an appropriate handler
127 * - other kernel errors are bad 127 * - other kernel errors are bad
128 * - return 0 if fixed-up, -EFAULT if non-fatal (to the kernel) fault
129 */ 128 */
130static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) 129static void die_if_no_fixup(const char * str, struct pt_regs * regs, long err)
131{ 130{
132 if (!user_mode(regs)) { 131 if (!user_mode(regs)) {
133 const struct exception_table_entry *fixup; 132 const struct exception_table_entry *fixup;
134 fixup = search_exception_tables(regs->pc); 133 fixup = search_exception_tables(regs->pc);
135 if (fixup) { 134 if (fixup) {
136 regs->pc = fixup->fixup; 135 regs->pc = fixup->fixup;
137 return 0; 136 return;
138 } 137 }
139 die(str, regs, err); 138 die(str, regs, err);
140 } 139 }
141 return -EFAULT;
142} 140}
143 141
144static inline void sign_extend(unsigned int count, unsigned char *dst) 142static inline void sign_extend(unsigned int count, unsigned char *dst)
@@ -314,7 +312,8 @@ static int handle_unaligned_ins(opcode_t instruction, struct pt_regs *regs,
314 /* Argh. Address not only misaligned but also non-existent. 312 /* Argh. Address not only misaligned but also non-existent.
315 * Raise an EFAULT and see if it's trapped 313 * Raise an EFAULT and see if it's trapped
316 */ 314 */
317 return die_if_no_fixup("Fault in unaligned fixup", regs, 0); 315 die_if_no_fixup("Fault in unaligned fixup", regs, 0);
316 return -EFAULT;
318} 317}
319 318
320/* 319/*