- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#re495ec0]
#backlinks
*説明 [#r62ab32a]
-パス: [[linux-2.6.33/]]
-FIXME: これは何?
--説明
**引数 [#de2367c2]
-
--
**返り値 [#q4954290]
-
--
**参考 [#q7662905]
*実装 [#jc8c2a63]
.align 5
/*
* This is the fast syscall return path. We do as little as
* possible here, and this includes saving r0 back into the SVC
* stack.
*/
ret_fast_syscall:
UNWIND(.fnstart )
UNWIND(.cantunwind )
-
--[[linux-2.6.33/UNWIND()]]
disable_irq @ disable interrupts
-
--[[linux-2.6.33/disable_irq()]]
ldr r1, [tsk, #TI_FLAGS]
tst r1, #_TIF_WORK_MASK
bne fast_work_pending
-
--[[linux-2.6.33/fast_work_pending()]]
/* perform architecture specific actions before user return */
arch_ret_to_user r1, lr
-
--[[linux-2.6.33/arch_ret_to_user()]]
restore_user_regs fast = 1, offset = S_OFF
UNWIND(.fnend )
-
--[[linux-2.6.33/restore_user_regs()]]
/*
* Ok, we need to do extra processing, enter the slow path.
*/
fast_work_pending:
str r0, [sp, #S_R0+S_OFF]! @ returned r0
work_pending:
tst r1, #_TIF_NEED_RESCHED
bne work_resched
-
--[[linux-2.6.33/work_resched()]]
tst r1, #_TIF_SIGPENDING|_TIF_NOTIFY_RESUME
beq no_work_pending
-
--[[linux-2.6.33/no_work_pending()]]
mov r0, sp @ 'regs'
mov r2, why @ 'syscall'
bl do_notify_resume
-
--[[linux-2.6.33/do_notify_resume()]]
b ret_slow_syscall @ Check work again
-
--[[linux-2.6.33/ret_slow_syscall()]]
work_resched:
bl schedule
-
--[[linux-2.6.33/schedule()]]
*コメント [#k3d01376]