*参照元 [#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS