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

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