Tasklet
Tasklet主要是用於中斷管理,執行時機發生在中斷時期,會在當初註冊的CPU上運作,會收到一個unsigned long引數。但是無法指定tasklet於特定時間點執行,只能將tasklet送入排程系統,然後由核心自主決定應該於何時執行。 tasklet是以tasklet_struct結構來表示,該結構必須先經過初始化之後才可使用。可以使用tasklet_init()函式來初始化工作,或使用特殊的巨集來宣告該結構:
#include <linux/interrupt.h>
struct tasklet{
void (*func)(unsigned long);
unsigned long data;
};
void tasklet_init(struct tasklet_struct *t,void (*func)(unsigned long),unsigned long data);
DECLARE_TASKLET(name,func,data);
DECLARE_TASKLET_DISABLED(name,func,data);
當初始化好一個tasklet_struct結構之後,就可以利用API來操作:
void tasklet_disable(struct tasklet_struct *t);
使指定的tasklet失效。
void tasklet_disable_nosync(struct tasklet_struct *t);
使指定的tasklet失效,但是不等待當時正在執行的tasklet結束。
void tasklet_enable(struct tasklet_struct *t);
使先前失效的tasklet恢復效用。
void tasklet_schedule(struct tasklet_struct *t);
將tasklet排入流程。若它還沒有機會執行的話,就會再被排程一次。
void tasklet_hi_schedule(struct tasklet_struct *t);
將tasklet排入優先執行名單。
void tasklet_kill(struct tasklet_struct *t);
此函式保證tasklet不會再進入排程系統。通常只有在關閉裝置或卸載模組時,才會呼叫此函式。呼叫此函式時,若tasklet已進入排程,本函式會先等待到它執行完畢才返回。