diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-26 13:12:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-26 13:12:08 -0500 |
commit | 37f5fed55559a030c430550bcacec75e6a833f1b (patch) | |
tree | ef20187783d784a1106d287bb4bb7805bf3a6ca3 /arch/sh/kernel/traps_32.c | |
parent | a1c70a756f8d756668acdbfd61dfc14de12fbaea (diff) | |
parent | 0609697eab9775564845d4c94f9e3780fb791ffd (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.c | 9 |
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 | */ |
130 | static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) | 129 | static 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 | ||
144 | static inline void sign_extend(unsigned int count, unsigned char *dst) | 142 | static 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 | /* |