参照元†
- プリエンプションカウントに指定された値を加算する。
返り値†
プリエンプションのデバッグが有効: kernel/sched.c†
- プリエンプションのデバッグが有効の場合、こちらが実行される
void __kprobes add_preempt_count(int val)
{
#ifdef CONFIG_DEBUG_PREEMPT
/*
* Underflow?
*/
if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))
return;
- プリエンプションカウントがアンダーフローしていたら警告する。
#endif
preempt_count() += val;
- プリエンプションカウントに指定された値を加算する。
#ifdef CONFIG_DEBUG_PREEMPT
/*
* Spinlock count overflowing soon?
*/
DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
PREEMPT_MASK - 10);
- プリエンプションカウントがオーバーフローしそうなときに警告する。
(preemption_disable() をネストさせすぎているときなど)
#endif
if (preempt_count() == val)
trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
- プリエンプションが有効から無効になったとき、
トレースポイントとして記録しておく。
}
EXPORT_SYMBOL(add_preempt_count);
プリエンプションのデバッグが無効: include/linux/preempt.h†
#if defined(CONFIG_DEBUG_PREEMPT) || defined(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)
- プリエンプションカウントに指定された値を加算する。
(略)
#endif
コメント†