work_struct的数据结构如下,暂时我们还无法关注其原理,只关注如何去开启一个work #include<linux/include/workqueue.h>typedefvoid(*work_func_t)(structwork_struct *work);structwork_struct{atomic_long_tdata;structlist_headentry;work_func_tfunc;#ifdefCONFIG_LOCKDEPstructlockdep_maplockdep_map;#endif}; 通...
flush_work(struct work_struct *work); flush_scheduled_work() flush_workqueue(struct workqueue_struct *_wq) 四、工作队列demo(使用系统自带的工作队列) 以下驱动demo,特意使用了schedule_work_on的API,证明一个work是可以指定CPU运行的,通过写/dev/work_queue设备节点,触发调度work,在work回调里执行计算密集型...
static struct work_struct test_work; static struct delayed_work test_delayed_work; static void test_func(struct work_struct *work) { printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); } static void test_delayed_func(struct work_struct *work) { printk("%s, %d, %ld\n", __...
struct work_struct *current_work; /* L: work being processed */ //当前正在处理的work work_func_t current_func; /* L: current_work's fn */ //当前正在执行的work回调函数 struct pool_workqueue *current_pwq; /* L: current_work's pwq */ //指向当前work所属的pool_workqueue struct list...
schedule_work_on(int cpu, struct work_struct *work) 一个work可以被调度到系统的任意一个CPU,也可以被调度在指定的CPU,这就是以上两个API的区别。 取消一个work_struct cancel_work(struct work_struct *work); cancel_work_sync(struct work_struct *work); ...
TP中断的处理,一般有种固定模式,两种实现方法,采用work_struct和work_struct workqueue_struct混合都可以处理。 (1)work_struct 定义报点函数 AI检测代码解析 static struct work_struct msg21xx_wq; 1. AI检测代码解析 static int touch_event_handler(void *unused) ...
编写Linux驱动的时候对于work_struct的使用还是很普遍的,很早之前就在阅读驱动源码的时候就看到了它的踪影,根据其命名大概知道了它的具体作用,但是仍然不知所以,同时,伴随出现的还有delayed_work以及workqueue_struct,抱着知其然并知其所以然的态度,在这里归纳总结一下work_struct,以及如何在驱动中使用,因为工作队列相对...
这样就会静态地创建一个名为name,待执行函数为func,参数为data的work_struct结构。 同样,也可以在运行时通过指针创建一个工作: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 INIT_WORK(struct work_struct*work,woid(*func)(void*),void*data); ...
static struct work_struct test_work; static struct delayed_work test_delayed_work; static void test_func(struct work_struct *work) { printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); } static void test_delayed_func(struct work_struct *work) ...
struct work_struct{atomic_long_t data;//低比特存放状态位,高比特存放worker_pool的ID或者pool_workqueue的指针struct list_head entry;//用于添加到其他队列上work_func_t func;//工作任务的处理函数,在内核线程中回调#ifdefCONFIG_LOCKDEPstruct lockdep_map lockdep_map;#endif}; ...