*参照元 [#qa9526ef] #backlinks *説明 [#m800b621] -パス: [[linux-2.6.33/lib/kernel_lock.c]] -FIXME: これは何? --説明 -BKL(Big Kernel Lock)のロック関数の本体 --1回目のロック: __lock_kernel() を呼んで、 BKL 用のスピンロックなどを獲得する --2回目以降のロック: ロックカウントを加算する **引数 [#hc60c6cd] -const char *func --関数の呼び出し元の関数名 -const char *file --関数の呼び出し元のソースコード名 -int line --関数の呼び出し元の行数 **返り値 [#scc45189] -なし **参考 [#v8e6957e] *実装 [#pb405c87] /* * Getting the big kernel lock. * * This cannot happen asynchronously, so we only need to * worry about other CPU's. */ void __lockfunc _lock_kernel(const char *func, const char *file, int line) - --[[linux-2.6.33/__lockfunc]] { int depth = current->lock_depth + 1; -BKL のネスト数 + 1 を得る。 --[[linux-2.6.33/current(global)]] trace_lock_kernel(func, file, line); - --[[linux-2.6.33/trace_lock_kernel()]] if (likely(!depth)) { -初回のロック(BKL のネスト数が負数 -> 0)の場合、 ロック処理を実行する。 might_sleep(); __lock_kernel(); } - --[[linux-2.6.33/likely()]] - --[[linux-2.6.33/might_sleep()]] - --[[linux-2.6.33/__lock_kernel()]] current->lock_depth = depth; -BKL のネスト数を更新する。 } (略) EXPORT_SYMBOL(_lock_kernel); -ライセンスに関わらずシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] *コメント [#tac14e84]