*参照元 [#v74e2b41] #backlinks *説明 [#z24fbecd] -パス: 複数あり --プリエンプションのデバッグが有効: [[linux-2.6.33/kernel/sched.c]] --プリエンプションのデバッグが無効: [[linux-2.6.33/include/linux/preempt.h]] -FIXME: これは何? --説明 **引数 [#u9047e01] -なし **返り値 [#hedb6c2f] -なし **参考 [#i688edaa] *実装 [#w1ae4717] **kernel/sched.c [#zb5f8206] -プリエンプションのデバッグが有効の場合、こちらが実行される void __kprobes sub_preempt_count(int val) { #ifdef CONFIG_DEBUG_PREEMPT /* * Underflow? */ if (DEBUG_LOCKS_WARN_ON(val > preempt_count())) return; /* * Is the spinlock portion underflowing? */ if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) && !(preempt_count() & PREEMPT_MASK))) return; #endif if (preempt_count() == val) trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1)); preempt_count() -= val; } EXPORT_SYMBOL(sub_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 sub_preempt_count(int val); -kernel/sched.c の実装を見てください。 (略) #else -プリエンプションのデバッグが無効かつ、 あるいはプリエンプションの追跡が無効の場合 # define sub_preempt_count(val) do { preempt_count() -= (val); } while (0) - --[[linux-2.6.33/preempt_count()]] (略) #endif *コメント [#h975707a]