*参照元 [#vc13d7ef]
#backlinks

*説明 [#oabdaa3a]
-パス: [[linux-2.6.33/kernel/sched.c]]

-FIXME: これは何?
--説明


**引数 [#nd66bb7d]
-なし


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


**参考 [#e4725b51]


*実装 [#w93312dc]
 /*
  * this is the entry point to schedule() from in-kernel preemption
  * off of preempt_enable. Kernel preemptions off return from interrupt
  * occur there and call schedule directly.
  */
 asmlinkage void __sched preempt_schedule(void)
 {
-
--[[linux-2.6.33/]]
--[[linux-2.6.33/__sched]]

 	struct thread_info *ti = current_thread_info();
 
-
--[[linux-2.6.33/]]
--[[linux-2.6.33/thread_info]]
-
--[[linux-2.6.33/]]
--[[linux-2.6.33/current_thread_info()]]

 	/*
 	 * If there is a non-zero preempt_count or interrupts are disabled,
 	 * we do not want to preempt the current task. Just return..
 	 */
 	if (likely(ti->preempt_count || irqs_disabled()))
 		return;
 
-
-プリエンプションが無効、
あるいは割り込みハンドラの内部だった場合は、
スケジューラを動作させない
--[[linux-2.6.33/likely()]]
-
--[[linux-2.6.33/irqs_disabled()]]

 	do {
 		add_preempt_count(PREEMPT_ACTIVE);
 		schedule();
 		sub_preempt_count(PREEMPT_ACTIVE);
 
-
--[[linux-2.6.33/add_preempt_count()]]
-
--[[linux-2.6.33/schedule()]]
-
--[[linux-2.6.33/sub_preempt_count()]]

 		/*
 		 * Check again in case we missed a preemption opportunity
 		 * between schedule and now.
 		 */
 		barrier();
-メモリバリア
--FIXME: スケジュールを要求するフラグに変化があった場合、
変更を確実に得るため?
--[[linux-2.6.33/barrier()]]

 	} while (need_resched());
-
--[[linux-2.6.33/need_resched()]]

 }
 EXPORT_SYMBOL(preempt_schedule);
-特にライセンスを区別せずにシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]


*コメント [#r256364f]

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