*参照元 [#nfbde2cd]
#backlinks

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

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


**引数 [#rb0cff3c]
-ktime_t *expires
--
--[[linux-2.6.33/ktime_t]]
-unsigned long delta
--
-const enum hrtimer_mode mode
--
--[[linux-2.6.33/hrtimer_mode]]


**返り値 [#k8e1a8fd]
-int
--


**参考 [#n00b834d]


*実装 [#u0d4c447]
 /**
  * schedule_hrtimeout_range - sleep until timeout
  * @expires:	timeout value (ktime_t)
  * @delta:	slack in expires timeout (ktime_t)
  * @mode:	timer mode, HRTIMER_MODE_ABS or HRTIMER_MODE_REL
  *
  * Make the current task sleep until the given expiry time has
  * elapsed. The routine will return immediately unless
  * the current task state has been set (see set_current_state()).
  *
  * The @delta argument gives the kernel the freedom to schedule the
  * actual wakeup to a time that is both power and performance friendly.
  * The kernel give the normal best effort behavior for "@expires+@delta",
  * but may decide to fire the timer earlier, but no earlier than @expires.
  *
  * You can set the task state as follows -
  *
  * %TASK_UNINTERRUPTIBLE - at least @timeout time is guaranteed to
  * pass before the routine returns.
  *
  * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
  * delivered to the current task.
  *
  * The current task state is guaranteed to be TASK_RUNNING when this
  * routine returns.
  *
  * Returns 0 when the timer has expired otherwise -EINTR
  */
 int __sched schedule_hrtimeout_range(ktime_t *expires, unsigned long delta,
 			       const enum hrtimer_mode mode)
 {
 	struct hrtimer_sleeper t;
 
-
--[[linux-2.6.33/hrtimer_sleeper]]

 	/*
 	 * Optimize when a zero timeout value is given. It does not
 	 * matter whether this is an absolute or a relative time.
 	 */
 	if (expires && !expires->tv64) {
 		__set_current_state(TASK_RUNNING);
 		return 0;
 	}
 
-
--[[linux-2.6.33/__set_current_state()]]
-
--[[linux-2.6.33/TASK_RUNNING]]

 	/*
 	 * A NULL parameter means "inifinte"
 	 */
 	if (!expires) {
 		schedule();
 		__set_current_state(TASK_RUNNING);
 		return -EINTR;
 	}
 
-
--[[linux-2.6.33/schedule()]]

 	hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, mode);
 	hrtimer_set_expires_range_ns(&t.timer, *expires, delta);
 
-
--[[linux-2.6.33/hrtimer_init_on_stack()]]
-
--[[linux-2.6.33/CLOCK_MONOTONIC]]

 	hrtimer_init_sleeper(&t, current);
 
-
--[[linux-2.6.33/hrtimer_init_sleeper()]]
-
--[[linux-2.6.33/current(global)]]

 	hrtimer_start_expires(&t.timer, mode);
 	if (!hrtimer_active(&t.timer))
 		t.task = NULL;
 
-
--[[linux-2.6.33/hrtimer_start_expires()]]
-
--[[linux-2.6.33/hrtimer_active()]]

 	if (likely(t.task))
 		schedule();
 
-
--[[linux-2.6.33/likely()]]

 	hrtimer_cancel(&t.timer);
 	destroy_hrtimer_on_stack(&t.timer);
 
-
--[[linux-2.6.33/hrtimer_cancel()]]
-
--[[linux-2.6.33/destroy_hrtimer_on_stack()]]

 	__set_current_state(TASK_RUNNING);
 
 	return !t.task ? 0 : -EINTR;
 }
 EXPORT_SYMBOL_GPL(schedule_hrtimeout_range);
-GPL ライセンスのモジュールにのみシンボルを公開する。
-GPL のモジュールにのみシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL_GPL()]]


*コメント [#g6f3fd2e]

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