*参照元 [#q276e33b] #backlinks *説明 [#xe7b8e44] -パス: 複数あり --プリエンプションのデバッグが有効: [[linux-2.6.33/kernel/sched.c]] --プリエンプションのデバッグが無効: [[linux-2.6.33/include/linux/preempt.h]] -FIXME: これは何? --説明 **引数 [#u9047e01] -なし **返り値 [#hedb6c2f] -なし **参考 [#i688edaa] *実装 [#meee966e] **kernel/sched.c [#zb5f8206] -プリエンプションのデバッグが有効の場合、こちらが実行される void __kprobes add_preempt_count(int val) { #ifdef CONFIG_DEBUG_PREEMPT - --[[linux-2.6.33/CONFIG_DEBUG_PREEMPT]] /* * Underflow? */ if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0))) return; - --[[linux-2.6.33/DEBUG_LOCKS_WARN_ON()]] - --[[linux-2.6.33/preempt_count()]] #endif preempt_count() += val; #ifdef CONFIG_DEBUG_PREEMPT /* * Spinlock count overflowing soon? */ DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >= PREEMPT_MASK - 10); - --[[linux-2.6.33/PREEMPT_MASK]] #endif if (preempt_count() == val) trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1)); - --[[linux-2.6.33/trace_preempt_off()]] - --[[linux-2.6.33/CALLER_ADDR0]] - --[[linux-2.6.33/get_parent_ip()]] - --[[linux-2.6.33/CALLER_ADDR1]] } EXPORT_SYMBOL(add_preempt_count); -特にライセンスを区別せずシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] **include/linux/preempt.h [#g85c266b] #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER) -プリエンプションのデバッグが有効、 あるいはプリエンプションの追跡が有効の場合 --[[linux-2.6.33/CONFIG_DEBUG_PREEMPT]] --[[linux-2.6.33/CONFIG_PREEMPT_TRACER]] extern void add_preempt_count(int val); -kernel/sched.c の実装を見てください。 (略) #else -プリエンプションのデバッグが無効かつ、 あるいはプリエンプションの追跡が無効の場合 # define add_preempt_count(val) do { preempt_count() += (val); } while (0) - --[[linux-2.6.33/preempt_count()]] (略) #endif *コメント [#wf76b0f3]