HI_SOFTIRQ类型的tasklet和上面基本对称,只是tasklet_vec换成了tasklet_hi_vec,TASKLET_SOFTIRQ换成了HI_SOFTIRQ。 static inline void tasklet_hi_schedule(struct tasklet_struct *t) { if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) __tasklet_hi_schedule(t); } void __tasklet_hi_schedule(...
这种行为也允许tasklet重新调度自身。 void tasklet_hi_schedule(struct tasklet_struct *t); 调度指定的tasklet以高优先级执行。当软件中断处理例程运行时,它会在处理其他软件中断任务(包括”通常“的tasklet)之前处理高优先级的tasklet。理想状态下,只有具备低延迟需求的任务(比如填充音频缓冲区)才能使用这个函数,这样可...
ADF_VINTSOU_OFFSET);/* Check for PF2VF interrupt */if(v_int & ADF_VINTSOU_PF2VF) {/* Disable PF to VF interrupt */adf_disable_pf2vf_interrupts(accel_dev);/* Schedule tasklet to handle interrupt BH */tasklet_hi_schedule(&accel_dev->vf.pf2...
tasklet_schedule:将tasklet加入到调度链表里面,tasklet就能得到执行,每调用这个函数一次,tasklet只能执行一次,要再次执行需要重新调用这个函数。 tasklet_hi_schedule:比tasklet_schedule优先级更高,可以得到更快处理。 tasklet_hi_schedule_first:和tasklet_hi_schedule差不多,只是更安全。 tasklet_disable:禁止tasklet,即使...
tasklet_hi_vec(高优先级的tasklet) 这两个数据结构都是由tasklet_struct结构体构成的链表。链表中的每个tasklet_struct代表一个不同的tasklet tasklet由tasklet_schedule()和tasklet_hi_schedule()函数进行调度,它们接受一个指向tasklet_ struct结构的指针作为参数。两个函数非常类似(区别在于一个...
tasklet_hi_schedule_first:和tasklet_hi_schedule差不多,只是更安全。 tasklet_disable:禁止tasklet,即使tasklet_schedule已经把tasklet调度链表里,也得不到执行,必须要用tasklet_enable使能才可以。如果当前tasklet正在运行,tasklet_disable会等待执行完,然后禁止,返回。
第5章 Linux中断机制内核API 上QQ阅读看本书,第一时间看更新 登录订阅本章 > 5.1 函数:__tasklet_hi_schedule( ) 上QQ阅读看本书,第一时间看更新 登录订阅本章 >上翻页区 功能呼出区 下翻页区上QQ阅读 APP听书 浏览器可能消耗较大流量, 点我立即省流量 ...
static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);如何使用tasklet使用tasklet比较简单,只需要初始化一个tasklet_struct结构体,然后调用tasklet_schedule,就能利用tasklet机制执行初始化的func函数。1 2 3 4 5 static inline void tasklet_schedule(struct tasklet_struct *t)...
tasklet是由tasklet_schedule()和tasklet_hi_shedule()函数进行调度的,它们接受一个指向tasklet_struct结构的指针作为参数。两个函数非常相似(区别在于一个使用TASKLET_SOFTIRQ,一个使用HI_SOFTIRQ()),接下来我们来看下tasklet_schedule()的内核源码: static inline voidtasklet_schedule(struct tasklet_struct *t) ...