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