diff options
-rw-r--r-- | arch/cris/arch-v32/kernel/cacheflush.S | 5 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/entry.S | 25 |
2 files changed, 29 insertions, 1 deletions
diff --git a/arch/cris/arch-v32/kernel/cacheflush.S b/arch/cris/arch-v32/kernel/cacheflush.S index 956e8fb82f01..6fc3d95d7029 100644 --- a/arch/cris/arch-v32/kernel/cacheflush.S +++ b/arch/cris/arch-v32/kernel/cacheflush.S | |||
@@ -1,4 +1,5 @@ | |||
1 | .global cris_flush_cache_range | 1 | .global cris_flush_cache_range |
2 | .type cris_flush_cache_range, @function | ||
2 | cris_flush_cache_range: | 3 | cris_flush_cache_range: |
3 | move.d 1024, $r12 | 4 | move.d 1024, $r12 |
4 | cmp.d $r11, $r12 | 5 | cmp.d $r11, $r12 |
@@ -80,8 +81,10 @@ cris_flush_1KB: | |||
80 | addq 32, $r10 | 81 | addq 32, $r10 |
81 | ba cris_flush_cache_range | 82 | ba cris_flush_cache_range |
82 | sub.d $r12, $r11 | 83 | sub.d $r12, $r11 |
84 | .size cris_flush_cache_range, . - cris_flush_cache_range | ||
83 | 85 | ||
84 | .global cris_flush_cache | 86 | .global cris_flush_cache |
87 | .type cris_flush_cache, @function | ||
85 | cris_flush_cache: | 88 | cris_flush_cache: |
86 | moveq 0, $r10 | 89 | moveq 0, $r10 |
87 | cris_flush_line: | 90 | cris_flush_line: |
@@ -92,3 +95,5 @@ cris_flush_line: | |||
92 | fidxd [$r10] | 95 | fidxd [$r10] |
93 | ret | 96 | ret |
94 | nop | 97 | nop |
98 | .size cris_flush_cache, . - cris_flush_cache | ||
99 | |||
diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S index 1f39861eac8c..7c14acb754a1 100644 --- a/arch/cris/arch-v32/kernel/entry.S +++ b/arch/cris/arch-v32/kernel/entry.S | |||
@@ -76,12 +76,15 @@ _need_resched: | |||
76 | 76 | ||
77 | ; Called at exit from fork. schedule_tail must be called to drop | 77 | ; Called at exit from fork. schedule_tail must be called to drop |
78 | ; spinlock if CONFIG_PREEMPT. | 78 | ; spinlock if CONFIG_PREEMPT. |
79 | .type ret_from_fork,@function | ||
79 | ret_from_fork: | 80 | ret_from_fork: |
80 | jsr schedule_tail | 81 | jsr schedule_tail |
81 | nop | 82 | nop |
82 | ba ret_from_sys_call | 83 | ba ret_from_sys_call |
83 | nop | 84 | nop |
85 | .size ret_from_fork, . - ret_from_fork | ||
84 | 86 | ||
87 | .type ret_from_intr,@function | ||
85 | ret_from_intr: | 88 | ret_from_intr: |
86 | ;; Check for resched if preemptive kernel, or if we're going back to | 89 | ;; Check for resched if preemptive kernel, or if we're going back to |
87 | ;; user-mode. This test matches the user_regs(regs) macro. Don't simply | 90 | ;; user-mode. This test matches the user_regs(regs) macro. Don't simply |
@@ -91,9 +94,10 @@ ret_from_intr: | |||
91 | move.d [$acr], $r0 | 94 | move.d [$acr], $r0 |
92 | btstq 16, $r0 ; User-mode flag. | 95 | btstq 16, $r0 ; User-mode flag. |
93 | bpl _resume_kernel | 96 | bpl _resume_kernel |
97 | .size ret_from_intr, . - ret_from_intr + 2 ; +2 includes the dslot. | ||
94 | 98 | ||
95 | ; Note that di below is in delay slot. | 99 | ; Note that di below is in delay slot. |
96 | 100 | .type _resume_userspace,@function | |
97 | _resume_userspace: | 101 | _resume_userspace: |
98 | di ; So need_resched and sigpending don't change. | 102 | di ; So need_resched and sigpending don't change. |
99 | 103 | ||
@@ -107,6 +111,7 @@ _resume_userspace: | |||
107 | nop | 111 | nop |
108 | ba _Rexit | 112 | ba _Rexit |
109 | nop | 113 | nop |
114 | .size _resume_userspace, . - _resume_userspace | ||
110 | 115 | ||
111 | ;; The system_call is called by a BREAK instruction, which looks pretty | 116 | ;; The system_call is called by a BREAK instruction, which looks pretty |
112 | ;; much like any other exception. | 117 | ;; much like any other exception. |
@@ -122,6 +127,7 @@ _resume_userspace: | |||
122 | ;; non-used instructions. Only the non-common cases cause the outlined code | 127 | ;; non-used instructions. Only the non-common cases cause the outlined code |
123 | ;; to run.. | 128 | ;; to run.. |
124 | 129 | ||
130 | .type system_call,@function | ||
125 | system_call: | 131 | system_call: |
126 | ;; Stack-frame similar to the irq heads, which is reversed in | 132 | ;; Stack-frame similar to the irq heads, which is reversed in |
127 | ;; ret_from_sys_call. | 133 | ;; ret_from_sys_call. |
@@ -217,7 +223,9 @@ ret_from_sys_call: | |||
217 | and.d _TIF_ALLWORK_MASK, $r1 | 223 | and.d _TIF_ALLWORK_MASK, $r1 |
218 | bne _syscall_exit_work | 224 | bne _syscall_exit_work |
219 | nop | 225 | nop |
226 | .size system_call, . - system_call | ||
220 | 227 | ||
228 | .type _Rexit,@function | ||
221 | _Rexit: | 229 | _Rexit: |
222 | ;; This epilogue MUST match the prologues in multiple_interrupt, irq.h | 230 | ;; This epilogue MUST match the prologues in multiple_interrupt, irq.h |
223 | ;; and ptregs.h. | 231 | ;; and ptregs.h. |
@@ -234,10 +242,12 @@ _Rexit: | |||
234 | addq 8, $sp ; Skip EXS, EDA. | 242 | addq 8, $sp ; Skip EXS, EDA. |
235 | jump $erp | 243 | jump $erp |
236 | rfe ; Restore condition code stack in delay-slot. | 244 | rfe ; Restore condition code stack in delay-slot. |
245 | .size _Rexit, . - _Rexit | ||
237 | 246 | ||
238 | ;; We get here after doing a syscall if extra work might need to be done | 247 | ;; We get here after doing a syscall if extra work might need to be done |
239 | ;; perform syscall exit tracing if needed. | 248 | ;; perform syscall exit tracing if needed. |
240 | 249 | ||
250 | .type _syscall_exit_work,@function | ||
241 | _syscall_exit_work: | 251 | _syscall_exit_work: |
242 | ;; R0 contains current at this point and irq's are disabled. | 252 | ;; R0 contains current at this point and irq's are disabled. |
243 | 253 | ||
@@ -253,14 +263,18 @@ _syscall_exit_work: | |||
253 | move.d $r1, $r9 | 263 | move.d $r1, $r9 |
254 | ba _resume_userspace | 264 | ba _resume_userspace |
255 | nop | 265 | nop |
266 | .size _syscall_exit_work, . - _syscall_exit_work | ||
256 | 267 | ||
268 | .type _work_pending,@function | ||
257 | _work_pending: | 269 | _work_pending: |
258 | addoq +TI_flags, $r0, $acr | 270 | addoq +TI_flags, $r0, $acr |
259 | move.d [$acr], $r10 | 271 | move.d [$acr], $r10 |
260 | btstq TIF_NEED_RESCHED, $r10 ; Need resched? | 272 | btstq TIF_NEED_RESCHED, $r10 ; Need resched? |
261 | bpl _work_notifysig ; No, must be signal/notify. | 273 | bpl _work_notifysig ; No, must be signal/notify. |
262 | nop | 274 | nop |
275 | .size _work_pending, . - _work_pending | ||
263 | 276 | ||
277 | .type _work_resched,@function | ||
264 | _work_resched: | 278 | _work_resched: |
265 | move.d $r9, $r1 ; Preserve R9. | 279 | move.d $r9, $r1 ; Preserve R9. |
266 | jsr schedule | 280 | jsr schedule |
@@ -276,7 +290,9 @@ _work_resched: | |||
276 | btstq TIF_NEED_RESCHED, $r1 | 290 | btstq TIF_NEED_RESCHED, $r1 |
277 | bmi _work_resched ; current->work.need_resched. | 291 | bmi _work_resched ; current->work.need_resched. |
278 | nop | 292 | nop |
293 | .size _work_resched, . - _work_resched | ||
279 | 294 | ||
295 | .type _work_notifysig,@function | ||
280 | _work_notifysig: | 296 | _work_notifysig: |
281 | ;; Deal with pending signals and notify-resume requests. | 297 | ;; Deal with pending signals and notify-resume requests. |
282 | 298 | ||
@@ -288,6 +304,7 @@ _work_notifysig: | |||
288 | 304 | ||
289 | ba _Rexit | 305 | ba _Rexit |
290 | nop | 306 | nop |
307 | .size _work_notifysig, . - _work_notifysig | ||
291 | 308 | ||
292 | ;; We get here as a sidetrack when we've entered a syscall with the | 309 | ;; We get here as a sidetrack when we've entered a syscall with the |
293 | ;; trace-bit set. We need to call do_syscall_trace and then continue | 310 | ;; trace-bit set. We need to call do_syscall_trace and then continue |
@@ -329,6 +346,7 @@ _syscall_trace_entry: | |||
329 | ;; | 346 | ;; |
330 | ;; Returns old current in R10. | 347 | ;; Returns old current in R10. |
331 | 348 | ||
349 | .type resume,@function | ||
332 | resume: | 350 | resume: |
333 | subq 4, $sp | 351 | subq 4, $sp |
334 | move $srp, [$sp] ; Keep old/new PC on the stack. | 352 | move $srp, [$sp] ; Keep old/new PC on the stack. |
@@ -364,6 +382,7 @@ resume: | |||
364 | move.d [$sp+], $acr | 382 | move.d [$sp+], $acr |
365 | jump $acr ; Restore PC. | 383 | jump $acr ; Restore PC. |
366 | nop | 384 | nop |
385 | .size resume, . - resume | ||
367 | 386 | ||
368 | nmi_interrupt: | 387 | nmi_interrupt: |
369 | 388 | ||
@@ -426,6 +445,7 @@ spurious_interrupt: | |||
426 | ;; time. Jump to the first set interrupt bit in a priotiry fashion. The | 445 | ;; time. Jump to the first set interrupt bit in a priotiry fashion. The |
427 | ;; hardware will call the unserved interrupts after the handler | 446 | ;; hardware will call the unserved interrupts after the handler |
428 | ;; finishes. | 447 | ;; finishes. |
448 | .type multiple_interrupt, @function | ||
429 | multiple_interrupt: | 449 | multiple_interrupt: |
430 | ;; This prologue MUST match the one in irq.h and the struct in ptregs.h! | 450 | ;; This prologue MUST match the one in irq.h and the struct in ptregs.h! |
431 | subq 12, $sp ; Skip EXS, EDA. | 451 | subq 12, $sp ; Skip EXS, EDA. |
@@ -458,6 +478,7 @@ multiple_interrupt: | |||
458 | move.d $sp, $r10 | 478 | move.d $sp, $r10 |
459 | jump ret_from_intr | 479 | jump ret_from_intr |
460 | nop | 480 | nop |
481 | .size multiple_interrupt, . - multiple_interrupt | ||
461 | 482 | ||
462 | do_sigtrap: | 483 | do_sigtrap: |
463 | ;; Sigtraps the process that executed the BREAK instruction. Creates a | 484 | ;; Sigtraps the process that executed the BREAK instruction. Creates a |
@@ -514,11 +535,13 @@ _ugdb_handle_exception: | |||
514 | move.d [$sp+], $r0 ; Restore R0 in delay slot. | 535 | move.d [$sp+], $r0 ; Restore R0 in delay slot. |
515 | 536 | ||
516 | .global kernel_execve | 537 | .global kernel_execve |
538 | .type kernel_execve,@function | ||
517 | kernel_execve: | 539 | kernel_execve: |
518 | move.d __NR_execve, $r9 | 540 | move.d __NR_execve, $r9 |
519 | break 13 | 541 | break 13 |
520 | ret | 542 | ret |
521 | nop | 543 | nop |
544 | .size kernel_execve, . - kernel_execve | ||
522 | 545 | ||
523 | .data | 546 | .data |
524 | 547 | ||