*参照元 [#ge0a7502] #backlinks *説明 [#s3ce4cb1] -パス: [[linux-2.6.33/arch/arm/entry-armv.S]] -パス: [[linux-2.6.33/arch/arm/kernel/entry-armv.S]] -FIXME: これは何? --説明 **引数 [#oc5fcff5] - -- **返り値 [#p62b0bbd] - -- **参考 [#lb47c036] *実装 [#b136b67c] .align 5 __irq_svc: svc_entry - --[[linux-2.6.33/svc_entry()]] #ifdef CONFIG_PREEMPT - --[[linux-2.6.33/CONFIG_PREEMPT]] get_thread_info tsk - --[[linux-2.6.33/get_thread_info()]] ldr r8, [tsk, #TI_PREEMPT] @ get preempt count add r7, r8, #1 @ increment it str r7, [tsk, #TI_PREEMPT] #endif irq_handler - --[[linux-2.6.33/irq_handler()]] #ifdef CONFIG_PREEMPT str r8, [tsk, #TI_PREEMPT] @ restore preempt count ldr r0, [tsk, #TI_FLAGS] @ get flags teq r8, #0 @ if preempt count != 0 movne r0, #0 @ force flags to 0 tst r0, #_TIF_NEED_RESCHED blne svc_preempt - --[[linux-2.6.33/svc_preempt()]] #endif ldr r4, [sp, #S_PSR] @ irqs are already disabled #ifdef CONFIG_TRACE_IRQFLAGS - --[[linux-2.6.33/CONFIG_TRACE_IRQFLAGS]] tst r4, #PSR_I_BIT bleq trace_hardirqs_on - --[[linux-2.6.33/trace_hardirqs_on()]] #endif svc_exit r4 @ return from exception - --[[linux-2.6.33/svc_exit()]] UNWIND(.fnend ) - --[[linux-2.6.33/UNWIND()]] ENDPROC(__irq_svc) - --[[linux-2.6.33/ENDPROC()]] *コメント [#db72e16a]