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已進入排程,本函式會先等待到它執行完畢才返回。

results matching ""

    No results matching ""