linux-2.6.33/ret_fast_syscall()(arm)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#re495ec0]
#backlinks
*説明 [#r62ab32a]
-パス: [[linux-2.6.33/arch/arm/kernel/entry-common.S]]
-FIXME: これは何?
--説明
**引数 [#de2367c2]
-
--
**返り値 [#q4954290]
-
--
**参考 [#q7662905]
*実装 [#jc8c2a63]
.align 5
/*
* This is the fast syscall return path. We do as littl...
* possible here, and this includes saving r0 back into ...
* 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/TI_FLAGS]]
--[[linux-2.6.33/_TIF_WORK_MASK]]
--[[linux-2.6.33/fast_work_pending()]]
/* perform architecture specific actions before user re...
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/S_OFF]]
--[[linux-2.6.33/restore_user_regs()]]
/*
* Ok, we need to do extra processing, enter the slow pa...
*/
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/S_R0]]
--[[linux-2.6.33/_TIF_NEED_RESCHED]]
--[[linux-2.6.33/work_resched()]]
tst r1, #_TIF_SIGPENDING|_TIF_NOTIFY_RESUME
beq no_work_pending
-
--[[linux-2.6.33/_TIF_SIGPENDING]]
--[[linux-2.6.33/_TIF_NOTIFY_RESUME]]
--[[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]
終了行:
*参照元 [#re495ec0]
#backlinks
*説明 [#r62ab32a]
-パス: [[linux-2.6.33/arch/arm/kernel/entry-common.S]]
-FIXME: これは何?
--説明
**引数 [#de2367c2]
-
--
**返り値 [#q4954290]
-
--
**参考 [#q7662905]
*実装 [#jc8c2a63]
.align 5
/*
* This is the fast syscall return path. We do as littl...
* possible here, and this includes saving r0 back into ...
* 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/TI_FLAGS]]
--[[linux-2.6.33/_TIF_WORK_MASK]]
--[[linux-2.6.33/fast_work_pending()]]
/* perform architecture specific actions before user re...
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/S_OFF]]
--[[linux-2.6.33/restore_user_regs()]]
/*
* Ok, we need to do extra processing, enter the slow pa...
*/
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/S_R0]]
--[[linux-2.6.33/_TIF_NEED_RESCHED]]
--[[linux-2.6.33/work_resched()]]
tst r1, #_TIF_SIGPENDING|_TIF_NOTIFY_RESUME
beq no_work_pending
-
--[[linux-2.6.33/_TIF_SIGPENDING]]
--[[linux-2.6.33/_TIF_NOTIFY_RESUME]]
--[[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]
ページ名: