*参照元 [#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 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/TI_FLAGS]]
--[[linux-2.6.33/_TIF_WORK_MASK]]
--[[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/S_OFF]]
--[[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/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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS