天天看點

中斷API之tasklet_disable_nosync/tasklet_trylock/tasklet_unlock

static inline void tasklet_disable_nosync(struct tasklet_struct *t)通過增加tasklet_struct結構體
變量中的count字段的值,使的軟中斷不能被調用執行。和tasklet_disable 相比,不用等待形參的
tasklet_struct 執行完成。
其源碼分析如下:
static inline void tasklet_disable_nosync(struct tasklet_struct *t)
{
	#僅僅增大tasklet_struct結構體變量中的count字段的值。
	#從這裡可以知道增大count字段的值,可以讓tasklet不被排程執行.
	atomic_inc(&t->count);
	smp_mb__after_atomic();
}
tasklet_trylock函數用于用于傳回tasklet_struct字段的值,并将這個字段的值設定為TASKLET_STATE_RUN
static inline int tasklet_trylock(struct tasklet_struct *t)
{
	return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state);
}
與之對應的
static inline void tasklet_unlock(struct tasklet_struct *t)
{
	smp_mb__before_atomic();
	clear_bit(TASKLET_STATE_RUN, &(t)->state);
}
僅僅對應的unlock操作會将tasklet_struct 字段的TASKLET_STATE_RUN 位清零.