TIPS/linux/kernel/add_timer関係

Last-modified: 2007-11-24 (土) 21:25:26

add_timer

  • すでにpenging状態(timer-listに登録されている状態)の場合はエラーとなる
  • 中でmod_timer()を呼ぶ

__mod_timer

  • 基本動作は、del_timer() -> internal_add_timer() (timer-listに登録)
  • 次にどのCPUのtimer-list(base)に登録するかをみつけ、lockする( lock_timer_base() )
  • penging状態の場合、
  • (コメントより)なるべくmod_timer()関数を呼んだCPUのtimer-listに登録するが、
    1.現在動作中のtimerであったり、
    2.del_timer_sync()で(他のCPUに登録されたtimerをdel_timerをする場合で)
    そのtimerが終了したかどうかわからない場合、
    そのtimerのbase(動作するtimer-list)を変更しない(=>もとのままのtimer-list(base)に登録する)。
    これは、そのtimerがシリアライズに動作することを保証するためである。

lock_timer_base()

  • CPUごとにあるtimer-list(base)をspinlockする
    • returnしてきた場合、base->lockをlockした状態で戻る