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}; 通...
#include<linux/workqueue.h>structdemo_type{char*name;structworkqueue_struct*wq;//一个工作队列structwork_structwk;//一份工作};staticvoiddemo_work(structwork_struct*work){structdemo_type*dm=container_of(work,structdemo_type,wk);printk(KERN_INFO"demo work begin\n");//用于调试验证msleep(1000);...
TP中断的处理,一般有种固定模式,两种实现方法,采用work_struct和work_struct workqueue_struct混合都可以处理。 (1)work_struct 定义报点函数 static struct work_struct msg21xx_wq; 1. static int touch_event_handler(void *unused) 1. probe中初始化 INIT_WORK( &msg21xx_wq, touch_event_handler ); 注...
1. struct work_struct 2. struct cpu_workqueue_struct 3. struct workqueue_struct 4. 这三个数据结构之间的关系 5. 工作队列实现框架(singlethread) 二、创建并初始化工作队列 三、工作者线程 四、调度一个任务到工作队列中 五、销毁工作队列 六、Linux内核维护的工作队列 双向链表操作函数 一、核心数据结构 ...
workqueue机制最小的调度单元是work_struct,即工作任务。 struct work_struct { atomic_long_t data;---低比特位部分是work的标志位,剩余比特位通常用于存放上一次运行的worker_pool ID或pool_workqueue的指针。存放的内容有WORK_STRUCT_PWQ标志位来决定 struct list_head entry...
struct work_struct work;INIT_WORK(&work,work_func);初始化一个work结构,work_func工作函数的参数就是指向work结构。 2.3 初始化宏 代码语言:javascript 复制 1)初始化一个work结构:INIT_WORK(_work,_func)_work:struct work_struct work结构指针。
内核使用工作项保存需要异步执行的函数,工作项的数据接口是work_struct,其定义如下: include/linux/workqueue.h struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; /* 异步执行的函数 */ }; typedef void (*work_func_t)(struct work_struct *work); /* 异步执行的函...
queue_work是一个inline函数,内核中很多接口采用这种用法,在头文件中定义一个inline函数包装一下实际业务的函数,这样过度一下可以有效的降低代码的耦合度。实际执行的函数是queue_work_on,代码如下: 1455行,1462行,关闭/打开本地中断,防止work的data并发设置。1457行,设置work->data的WORK_STRUCT_PENDING_BIT,表示任...
struct softirq_action{ void (*action)(struct softirq_action *);}; 描述每一种类型的软中断,其中void(*action)是软中断触发时的执行函数。 软中断全局数据和类型 staticstruct softirq_action softirq_vec[NR_SOFTIRQS]__cacheline_aligned_in_smp;enum{HI_SOFTIRQ=0,/*用于高优先级的tasklet*/TIMER_SOFTIRQ...
struct work_struct用来描述work,初始化一个work并添加到工作队列后,将会将其传递到合适的内核线程来进行处理,它是用于调度的最小单位。 关键字段描述如下: struct work_struct{atomic_long_t data;//低比特存放状态位,高比特存放worker_pool的ID或者pool_workqueue的指针struct list_head entry;//用于添加到其他队列...