2012-08-22 119 views
1

我在看一些使用add_timerdel_timer啓動和停止計時器的Linux內核模塊代碼。del_timer可以在處理程序運行時返回嗎?

有時,實施繼續調用del_timer後立即刪除計時器「對象」(簡稱struct timer_list)。

我想知道如果這是安全的。請注意,這是一個單處理器實現,禁用了SMP(它將強制使用del_timer_sync代替)。

del_timer_sync實現會檢查定時器是否正在被處理,但del_timer不會。在UP系統中,是否有可能在沒有del_timer知道的情況下處理定時器,即定時器是否已從掛起的定時器列表中刪除並正在處理?

+1

只要使用'del_timer_sync()',這樣,當您或旁邊的人決定他們真正想SMP系統也不會斷裂:) – mpe

回答

1

UP使事情變得相當簡單,但我認爲答案仍然「取決於」。

如果您在進程環境中執行del_timer,那麼在UP上,我認爲您可以安全地假設計時器在此之後沒有運行任何地方:定時器從待處理列表中移除並從定時器中斷運行,如果該中斷開始,它將在允許進程上下文代碼繼續之前運行到完成。

但是,如果你是在中斷上下文,那麼你的中斷可能已中斷定時器中斷,所以定時器可能是在正在運行的中間。

+0

優秀上使用此代碼。謝謝。 – alkalinity

相關問題