diff options
Diffstat (limited to 'arch/m32r')
| -rw-r--r-- | arch/m32r/Makefile | 2 | ||||
| -rw-r--r-- | arch/m32r/kernel/entry.S | 9 | ||||
| -rw-r--r-- | arch/m32r/kernel/smp.c | 12 | ||||
| -rw-r--r-- | arch/m32r/kernel/traps.c | 33 | ||||
| -rw-r--r-- | arch/m32r/lib/usercopy.c | 16 |
5 files changed, 42 insertions, 30 deletions
diff --git a/arch/m32r/Makefile b/arch/m32r/Makefile index dd4418d846e9..983d438b14b6 100644 --- a/arch/m32r/Makefile +++ b/arch/m32r/Makefile | |||
| @@ -24,7 +24,7 @@ aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst | |||
| 24 | CFLAGS += $(cflags-y) | 24 | CFLAGS += $(cflags-y) |
| 25 | AFLAGS += $(aflags-y) | 25 | AFLAGS += $(aflags-y) |
| 26 | 26 | ||
| 27 | CHECKFLAGS := $(CHECK) -D__m32r__ | 27 | CHECKFLAGS += -D__m32r__ -D__BIG_ENDIAN__=1 |
| 28 | 28 | ||
| 29 | head-y := arch/m32r/kernel/head.o arch/m32r/kernel/init_task.o | 29 | head-y := arch/m32r/kernel/head.o arch/m32r/kernel/init_task.o |
| 30 | 30 | ||
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S index dddbf6b5ed2c..85920fb8d08c 100644 --- a/arch/m32r/kernel/entry.S +++ b/arch/m32r/kernel/entry.S | |||
| @@ -681,6 +681,15 @@ ENTRY(debug_trap) | |||
| 681 | bl do_debug_trap | 681 | bl do_debug_trap |
| 682 | bra error_code | 682 | bra error_code |
| 683 | 683 | ||
| 684 | ENTRY(ill_trap) | ||
| 685 | /* void ill_trap(void) */ | ||
| 686 | SWITCH_TO_KERNEL_STACK | ||
| 687 | SAVE_ALL | ||
| 688 | ldi r1, #0 ; error_code ; FIXME | ||
| 689 | mv r0, sp ; pt_regs | ||
| 690 | bl do_ill_trap | ||
| 691 | bra error_code | ||
| 692 | |||
| 684 | 693 | ||
| 685 | /* Cache flushing handler */ | 694 | /* Cache flushing handler */ |
| 686 | ENTRY(cache_flushing_handler) | 695 | ENTRY(cache_flushing_handler) |
diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index a4576ac7e870..8b1f6eb76870 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c | |||
| @@ -275,12 +275,14 @@ static void flush_tlb_all_ipi(void *info) | |||
| 275 | *==========================================================================*/ | 275 | *==========================================================================*/ |
| 276 | void smp_flush_tlb_mm(struct mm_struct *mm) | 276 | void smp_flush_tlb_mm(struct mm_struct *mm) |
| 277 | { | 277 | { |
| 278 | int cpu_id = smp_processor_id(); | 278 | int cpu_id; |
| 279 | cpumask_t cpu_mask; | 279 | cpumask_t cpu_mask; |
| 280 | unsigned long *mmc = &mm->context[cpu_id]; | 280 | unsigned long *mmc; |
| 281 | unsigned long flags; | 281 | unsigned long flags; |
| 282 | 282 | ||
| 283 | preempt_disable(); | 283 | preempt_disable(); |
| 284 | cpu_id = smp_processor_id(); | ||
| 285 | mmc = &mm->context[cpu_id]; | ||
| 284 | cpu_mask = mm->cpu_vm_mask; | 286 | cpu_mask = mm->cpu_vm_mask; |
| 285 | cpu_clear(cpu_id, cpu_mask); | 287 | cpu_clear(cpu_id, cpu_mask); |
| 286 | 288 | ||
| @@ -343,12 +345,14 @@ void smp_flush_tlb_range(struct vm_area_struct *vma, unsigned long start, | |||
| 343 | void smp_flush_tlb_page(struct vm_area_struct *vma, unsigned long va) | 345 | void smp_flush_tlb_page(struct vm_area_struct *vma, unsigned long va) |
| 344 | { | 346 | { |
| 345 | struct mm_struct *mm = vma->vm_mm; | 347 | struct mm_struct *mm = vma->vm_mm; |
| 346 | int cpu_id = smp_processor_id(); | 348 | int cpu_id; |
| 347 | cpumask_t cpu_mask; | 349 | cpumask_t cpu_mask; |
| 348 | unsigned long *mmc = &mm->context[cpu_id]; | 350 | unsigned long *mmc; |
| 349 | unsigned long flags; | 351 | unsigned long flags; |
| 350 | 352 | ||
| 351 | preempt_disable(); | 353 | preempt_disable(); |
| 354 | cpu_id = smp_processor_id(); | ||
| 355 | mmc = &mm->context[cpu_id]; | ||
| 352 | cpu_mask = mm->cpu_vm_mask; | 356 | cpu_mask = mm->cpu_vm_mask; |
| 353 | cpu_clear(cpu_id, cpu_mask); | 357 | cpu_clear(cpu_id, cpu_mask); |
| 354 | 358 | ||
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c index 01922271d17e..5fe8ed6d62dc 100644 --- a/arch/m32r/kernel/traps.c +++ b/arch/m32r/kernel/traps.c | |||
| @@ -5,8 +5,6 @@ | |||
| 5 | * Hitoshi Yamamoto | 5 | * Hitoshi Yamamoto |
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | /* $Id$ */ | ||
| 9 | |||
| 10 | /* | 8 | /* |
| 11 | * 'traps.c' handles hardware traps and faults after we have saved some | 9 | * 'traps.c' handles hardware traps and faults after we have saved some |
| 12 | * state in 'entry.S'. | 10 | * state in 'entry.S'. |
| @@ -35,6 +33,7 @@ asmlinkage void ei_handler(void); | |||
| 35 | asmlinkage void rie_handler(void); | 33 | asmlinkage void rie_handler(void); |
| 36 | asmlinkage void debug_trap(void); | 34 | asmlinkage void debug_trap(void); |
| 37 | asmlinkage void cache_flushing_handler(void); | 35 | asmlinkage void cache_flushing_handler(void); |
| 36 | asmlinkage void ill_trap(void); | ||
| 38 | 37 | ||
| 39 | #ifdef CONFIG_SMP | 38 | #ifdef CONFIG_SMP |
| 40 | extern void smp_reschedule_interrupt(void); | 39 | extern void smp_reschedule_interrupt(void); |
| @@ -77,22 +76,22 @@ void set_eit_vector_entries(void) | |||
| 77 | eit_vector[5] = BRA_INSN(default_eit_handler, 5); | 76 | eit_vector[5] = BRA_INSN(default_eit_handler, 5); |
| 78 | eit_vector[8] = BRA_INSN(rie_handler, 8); | 77 | eit_vector[8] = BRA_INSN(rie_handler, 8); |
| 79 | eit_vector[12] = BRA_INSN(alignment_check, 12); | 78 | eit_vector[12] = BRA_INSN(alignment_check, 12); |
| 80 | eit_vector[16] = 0xff000000UL; | 79 | eit_vector[16] = BRA_INSN(ill_trap, 16); |
| 81 | eit_vector[17] = BRA_INSN(debug_trap, 17); | 80 | eit_vector[17] = BRA_INSN(debug_trap, 17); |
| 82 | eit_vector[18] = BRA_INSN(system_call, 18); | 81 | eit_vector[18] = BRA_INSN(system_call, 18); |
| 83 | eit_vector[19] = 0xff000000UL; | 82 | eit_vector[19] = BRA_INSN(ill_trap, 19); |
| 84 | eit_vector[20] = 0xff000000UL; | 83 | eit_vector[20] = BRA_INSN(ill_trap, 20); |
| 85 | eit_vector[21] = 0xff000000UL; | 84 | eit_vector[21] = BRA_INSN(ill_trap, 21); |
| 86 | eit_vector[22] = 0xff000000UL; | 85 | eit_vector[22] = BRA_INSN(ill_trap, 22); |
| 87 | eit_vector[23] = 0xff000000UL; | 86 | eit_vector[23] = BRA_INSN(ill_trap, 23); |
| 88 | eit_vector[24] = 0xff000000UL; | 87 | eit_vector[24] = BRA_INSN(ill_trap, 24); |
| 89 | eit_vector[25] = 0xff000000UL; | 88 | eit_vector[25] = BRA_INSN(ill_trap, 25); |
| 90 | eit_vector[26] = 0xff000000UL; | 89 | eit_vector[26] = BRA_INSN(ill_trap, 26); |
| 91 | eit_vector[27] = 0xff000000UL; | 90 | eit_vector[27] = BRA_INSN(ill_trap, 27); |
| 92 | eit_vector[28] = BRA_INSN(cache_flushing_handler, 28); | 91 | eit_vector[28] = BRA_INSN(cache_flushing_handler, 28); |
| 93 | eit_vector[29] = 0xff000000UL; | 92 | eit_vector[29] = BRA_INSN(ill_trap, 29); |
| 94 | eit_vector[30] = 0xff000000UL; | 93 | eit_vector[30] = BRA_INSN(ill_trap, 30); |
| 95 | eit_vector[31] = 0xff000000UL; | 94 | eit_vector[31] = BRA_INSN(ill_trap, 31); |
| 96 | eit_vector[32] = BRA_INSN(ei_handler, 32); | 95 | eit_vector[32] = BRA_INSN(ei_handler, 32); |
| 97 | eit_vector[64] = BRA_INSN(pie_handler, 64); | 96 | eit_vector[64] = BRA_INSN(pie_handler, 64); |
| 98 | #ifdef CONFIG_MMU | 97 | #ifdef CONFIG_MMU |
| @@ -286,7 +285,8 @@ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ | |||
| 286 | 285 | ||
| 287 | DO_ERROR( 1, SIGTRAP, "debug trap", debug_trap) | 286 | DO_ERROR( 1, SIGTRAP, "debug trap", debug_trap) |
| 288 | DO_ERROR_INFO(0x20, SIGILL, "reserved instruction ", rie_handler, ILL_ILLOPC, regs->bpc) | 287 | DO_ERROR_INFO(0x20, SIGILL, "reserved instruction ", rie_handler, ILL_ILLOPC, regs->bpc) |
| 289 | DO_ERROR_INFO(0x100, SIGILL, "privilege instruction", pie_handler, ILL_PRVOPC, regs->bpc) | 288 | DO_ERROR_INFO(0x100, SIGILL, "privileged instruction", pie_handler, ILL_PRVOPC, regs->bpc) |
| 289 | DO_ERROR_INFO(-1, SIGILL, "illegal trap", ill_trap, ILL_ILLTRP, regs->bpc) | ||
| 290 | 290 | ||
| 291 | extern int handle_unaligned_access(unsigned long, struct pt_regs *); | 291 | extern int handle_unaligned_access(unsigned long, struct pt_regs *); |
| 292 | 292 | ||
| @@ -329,4 +329,3 @@ asmlinkage void do_alignment_check(struct pt_regs *regs, long error_code) | |||
| 329 | set_fs(oldfs); | 329 | set_fs(oldfs); |
| 330 | } | 330 | } |
| 331 | } | 331 | } |
| 332 | |||
diff --git a/arch/m32r/lib/usercopy.c b/arch/m32r/lib/usercopy.c index 6c6855f1aa05..ce16bbe26a52 100644 --- a/arch/m32r/lib/usercopy.c +++ b/arch/m32r/lib/usercopy.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #include <asm/uaccess.h> | 13 | #include <asm/uaccess.h> |
| 14 | 14 | ||
| 15 | unsigned long | 15 | unsigned long |
| 16 | __generic_copy_to_user(void *to, const void *from, unsigned long n) | 16 | __generic_copy_to_user(void __user *to, const void *from, unsigned long n) |
| 17 | { | 17 | { |
| 18 | prefetch(from); | 18 | prefetch(from); |
| 19 | if (access_ok(VERIFY_WRITE, to, n)) | 19 | if (access_ok(VERIFY_WRITE, to, n)) |
| @@ -22,7 +22,7 @@ __generic_copy_to_user(void *to, const void *from, unsigned long n) | |||
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | unsigned long | 24 | unsigned long |
| 25 | __generic_copy_from_user(void *to, const void *from, unsigned long n) | 25 | __generic_copy_from_user(void *to, const void __user *from, unsigned long n) |
| 26 | { | 26 | { |
| 27 | prefetchw(to); | 27 | prefetchw(to); |
| 28 | if (access_ok(VERIFY_READ, from, n)) | 28 | if (access_ok(VERIFY_READ, from, n)) |
| @@ -111,7 +111,7 @@ do { \ | |||
| 111 | #endif /* CONFIG_ISA_DUAL_ISSUE */ | 111 | #endif /* CONFIG_ISA_DUAL_ISSUE */ |
| 112 | 112 | ||
| 113 | long | 113 | long |
| 114 | __strncpy_from_user(char *dst, const char *src, long count) | 114 | __strncpy_from_user(char *dst, const char __user *src, long count) |
| 115 | { | 115 | { |
| 116 | long res; | 116 | long res; |
| 117 | __do_strncpy_from_user(dst, src, count, res); | 117 | __do_strncpy_from_user(dst, src, count, res); |
| @@ -119,7 +119,7 @@ __strncpy_from_user(char *dst, const char *src, long count) | |||
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | long | 121 | long |
| 122 | strncpy_from_user(char *dst, const char *src, long count) | 122 | strncpy_from_user(char *dst, const char __user *src, long count) |
| 123 | { | 123 | { |
| 124 | long res = -EFAULT; | 124 | long res = -EFAULT; |
| 125 | if (access_ok(VERIFY_READ, src, 1)) | 125 | if (access_ok(VERIFY_READ, src, 1)) |
| @@ -222,7 +222,7 @@ do { \ | |||
| 222 | #endif /* not CONFIG_ISA_DUAL_ISSUE */ | 222 | #endif /* not CONFIG_ISA_DUAL_ISSUE */ |
| 223 | 223 | ||
| 224 | unsigned long | 224 | unsigned long |
| 225 | clear_user(void *to, unsigned long n) | 225 | clear_user(void __user *to, unsigned long n) |
| 226 | { | 226 | { |
| 227 | if (access_ok(VERIFY_WRITE, to, n)) | 227 | if (access_ok(VERIFY_WRITE, to, n)) |
| 228 | __do_clear_user(to, n); | 228 | __do_clear_user(to, n); |
| @@ -230,7 +230,7 @@ clear_user(void *to, unsigned long n) | |||
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | unsigned long | 232 | unsigned long |
| 233 | __clear_user(void *to, unsigned long n) | 233 | __clear_user(void __user *to, unsigned long n) |
| 234 | { | 234 | { |
| 235 | __do_clear_user(to, n); | 235 | __do_clear_user(to, n); |
| 236 | return n; | 236 | return n; |
| @@ -244,7 +244,7 @@ __clear_user(void *to, unsigned long n) | |||
| 244 | 244 | ||
| 245 | #ifdef CONFIG_ISA_DUAL_ISSUE | 245 | #ifdef CONFIG_ISA_DUAL_ISSUE |
| 246 | 246 | ||
| 247 | long strnlen_user(const char *s, long n) | 247 | long strnlen_user(const char __user *s, long n) |
| 248 | { | 248 | { |
| 249 | unsigned long mask = -__addr_ok(s); | 249 | unsigned long mask = -__addr_ok(s); |
| 250 | unsigned long res; | 250 | unsigned long res; |
| @@ -313,7 +313,7 @@ long strnlen_user(const char *s, long n) | |||
| 313 | 313 | ||
| 314 | #else /* not CONFIG_ISA_DUAL_ISSUE */ | 314 | #else /* not CONFIG_ISA_DUAL_ISSUE */ |
| 315 | 315 | ||
| 316 | long strnlen_user(const char *s, long n) | 316 | long strnlen_user(const char __user *s, long n) |
| 317 | { | 317 | { |
| 318 | unsigned long mask = -__addr_ok(s); | 318 | unsigned long mask = -__addr_ok(s); |
| 319 | unsigned long res; | 319 | unsigned long res; |
