*参照元 [#ed6dc97d]
#backlinks

*説明 [#f53ad7ad]
-パス: [[linux-2.6.33/lib/kernel_lock.c]]

-FIXME: これは何?
-BKL(Big Kernel Lock)のアンロック関数の本体
--最後のアンロックではない場合: ロックカウントを減算する
--最後のアンロック: __unlock_kernel() を呼んで
--最後のアンロック: __unlock_kernel() を呼んで、
BKL 用のスピンロック等を解放する


**引数 [#bb2ce7a7]
-const char *func
--関数の呼び出し元の関数名
-const char *file
--関数の呼び出し元のソースコード名
-int line
--関数の呼び出し元の行数


**返り値 [#z6349327]
-なし


**参考 [#m945b790]


*実装 [#x4f4c233]
 void __lockfunc _unlock_kernel(const char *func, const char *file, int line)
 {
-
--[[linux-2.6.33/__lockfunc]]

 	BUG_ON(current->lock_depth < 0);
-既にアンロック状態(ロックカウントが -1)であれば、
異常事態とみなす。
--[[linux-2.6.33/BUG_ON()]]
--[[linux-2.6.33/current(global)]]

 	if (likely(--current->lock_depth < 0))
 		__unlock_kernel();
 
-ロックカウントを減算する。
-減算後、BKL がアンロック状態(ロックカウントが -1)であれば、
__unlock_kernel() を呼んで、BKL 用のスピンロック等を解放する。
--[[linux-2.6.33/likely()]]
--[[linux-2.6.33/__unlock_kernel()]]

 	trace_unlock_kernel(func, file, line);
-
--[[linux-2.6.33/trace_unlock_kernel()]]

 }
 (略)
 EXPORT_SYMBOL(_unlock_kernel);
-ライセンスに関わらずシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]


*コメント [#t376e218]

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