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; |