Skip to content

Commit

Permalink
ARC: entry.S: move some code around for cache locality in return path
Browse files Browse the repository at this point in the history
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
  • Loading branch information
Vineet Gupta committed Jun 19, 2015
1 parent 6d1a20b commit c7e6d79
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 48 deletions.
2 changes: 2 additions & 0 deletions arch/arc/kernel/entry-compact.S
Original file line number Diff line number Diff line change
Expand Up @@ -391,3 +391,5 @@ not_level1_interrupt:
EXCEPTION_EPILOGUE
debug_marker_syscall:
rtie

END(ret_from_exception)
98 changes: 50 additions & 48 deletions arch/arc/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,55 @@
*------------------------------------------------------------------
*/

;################### Special Sys Call Wrappers ##########################

ENTRY(sys_clone_wrapper)
SAVE_CALLEE_SAVED_USER
bl @sys_clone
DISCARD_CALLEE_SAVED_USER

GET_CURR_THR_INFO_FLAGS r10
btst r10, TIF_SYSCALL_TRACE
bnz tracesys_exit

b ret_from_system_call
END(sys_clone_wrapper)

ENTRY(ret_from_fork)
; when the forked child comes here from the __switch_to function
; r0 has the last task pointer.
; put last task in scheduler queue
bl @schedule_tail

ld r9, [sp, PT_status32]
brne r9, 0, 1f

jl.d [r14] ; kernel thread entry point
mov r0, r13 ; (see PF_KTHREAD block in copy_thread)

1:
; Return to user space
; 1. Any forked task (Reach here via BRne above)
; 2. First ever init task (Reach here via return from JL above)
; This is the historic "kernel_execve" use-case, to return to init
; user mode, in a round about way since that is always done from
; a kernel thread which is executed via JL above but always returns
; out whenever kernel_execve (now inline do_fork()) is involved
b ret_from_exception
END(ret_from_fork)

#ifdef CONFIG_ARC_DW2_UNWIND
; Workaround for bug 94179 (STAR ):
; Despite -fasynchronous-unwind-tables, linker is not making dwarf2 unwinder
; section (.debug_frame) as loadable. So we force it here.
; This also fixes STAR 9000487933 where the prev-workaround (objcopy --setflag)
; would not work after a clean build due to kernel build system dependencies.
.section .debug_frame, "wa",@progbits

; Reset to .text as this file is included in entry-<isa>.S
.section .text, "ax",@progbits
#endif

;################### Non TLB Exception Handling #############################

; ---------------------------------------------
Expand Down Expand Up @@ -338,53 +387,6 @@ resume_kernel_mode:
#endif

b .Lrestore_regs
END(ret_from_exception)

ENTRY(ret_from_fork)
; when the forked child comes here from the __switch_to function
; r0 has the last task pointer.
; put last task in scheduler queue
bl @schedule_tail

ld r9, [sp, PT_status32]
brne r9, 0, 1f

jl.d [r14] ; kernel thread entry point
mov r0, r13 ; (see PF_KTHREAD block in copy_thread)

1:
; Return to user space
; 1. Any forked task (Reach here via BRne above)
; 2. First ever init task (Reach here via return from JL above)
; This is the historic "kernel_execve" use-case, to return to init
; user mode, in a round about way since that is always done from
; a kernel thread which is executed via JL above but always returns
; out whenever kernel_execve (now inline do_fork()) is involved
b ret_from_exception
END(ret_from_fork)

;################### Special Sys Call Wrappers ##########################

ENTRY(sys_clone_wrapper)
SAVE_CALLEE_SAVED_USER
bl @sys_clone
DISCARD_CALLEE_SAVED_USER

GET_CURR_THR_INFO_FLAGS r10
btst r10, TIF_SYSCALL_TRACE
bnz tracesys_exit

b ret_from_system_call
END(sys_clone_wrapper)

#ifdef CONFIG_ARC_DW2_UNWIND
; Workaround for bug 94179 (STAR ):
; Despite -fasynchronous-unwind-tables, linker is not making dwarf2 unwinder
; section (.debug_frame) as loadable. So we force it here.
; This also fixes STAR 9000487933 where the prev-workaround (objcopy --setflag)
; would not work after a clean build due to kernel build system dependencies.
.section .debug_frame, "wa",@progbits
##### DONT ADD CODE HERE - .Lrestore_regs actually follows in entry-<isa>.S

; Reset to .text as this file is included in entry-<isa>.S
.section .text, "ax",@progbits
#endif

0 comments on commit c7e6d79

Please sign in to comment.