*参照元 [#u5b83244] #backlinks *説明 [#jae5907d] -パス: [[linux-2.6.33/include/linux/preempt.h]] -FIXME: これは何? --説明 -FIXME: プリエンプションカウントをデクリメントし、 プリエンプションを許可状態にする。 -もしスケジュールする必要があればスケジュールを行う。 --プリエンプションカウント 0 でプリエンプション許可、 1 以上でプリエンプション禁止 --つまり preempt_disable()/preempt_enable() はネスト可能。 ネストの例 ---------- preempt_disable(); プリエンプションカウント 0(許可) -> 1(禁止) ... preempt_disable(); プリエンプションカウント 1(禁止) -> 2(禁止) ... ... preempt_enable(); プリエンプションカウント 2(禁止) -> 1(禁止) ... preempt_enable(); プリエンプションカウント 1(禁止) -> 0(許可) --[[linux-2.6.33/preempt_disable()]] **引数 [#j9539c89] -なし **返り値 [#q34d3a0e] -なし **参考 [#k0eb1fa2] *実装 [#j8d4268f] #ifdef CONFIG_PREEMPT -プリエンプトが有効の場合 --[[linux-2.6.33/CONFIG_PREEMPT]] (略) #define preempt_enable() \ do { \ preempt_enable_no_resched(); \ - -プリエンプションカウントをデクリメントする。 --[[linux-2.6.33/preempt_enable_no_resched()]] barrier(); \ -メモリバリア。 --バリアの後に続く命令にて、 変更後のプリエンプションカウントを読み出せることを保証する。 --[[linux-2.6.33/barrier()]] preempt_check_resched(); \ - --[[linux-2.6.33/preempt_check_resched()]] } while (0) (略) #else -プリエンプトが無効の場合 #define preempt_disable() do { } while (0) -何もしない (略) #endif *コメント [#k80f0e79]