queue_work是一个inline函数,内核中很多接口采用这种用法,在头文件中定义一个inline函数包装一下实际业务的函数,这样过度一下可以有效的降低代码的耦合度。实际执行的函数是queue_work_on,代码如下: 1455行,1462行,关闭/打开本地中断,防止work的data并发设置。1457行,设置work->data的WORK_STRUCT_PENDING_BIT,表示任...
intqueue_work_on(intcpu,structworkqueue_struct*wq,structwork_struct*work); 3.3 queue_delayed_work queue_delayed_work会在任务提交到工作队列之前等待一段时间,由delay参数来指定。 ]intqueue_delayed_work(structworkqueue_struct*wq,structdelayed_work*dwork,unsignedlongdelay); 3.4 queue_delayed_work_on que...
INIT_WORK() schedule_work() flush_work() cancel_work_sync() INIT_DELAYED_WORK() schedule_delayed_work() flush_delayed_work() cancel_delayed_work() cancel_delayed_work_sync() create_workqueue() queue_work() queue_delayed_work() queue_work_on() flush_workqueue() destroy_workqueue() create...
5、cancel_delayed_work_sync():取消延时工作任务并等待它完成 6、create_workqueue():对于多CPU系统,内核会在每个CPU上创建一个工作队列,使线程处理并行化 7、create_singlethread_workqueue():内核只在一个CPU上创建一个工作队列 8、queue_work_on():在指定CPU上添加工作任务,queue_work()调用queue_work_on()...
queue_work是一个inline函数,内核中很多接口采用这种用法,在头文件中定义一个inline函数包装一下实际业务的函数,这样过度一下可以有效的降低代码的耦合度。实际执行的函数是queue_work_on,代码如下: 1455行,1462行,关闭/打开本地中断,防止work的data并发设置。1457行,设置work->data的WORK_STRUCT_PENDING_BIT,表示任...
struct delayed_work work; void worker_func(struct work_struct *work); INIT_DELAYED_WORK(&work, worker_func); queue_work_on() 函数queue_work_on()将work放入workqueue队列,其定义如下: extern bool queue_work_on(int cpu, struct workqueue_struct *wq, ...
8、queue_work_on():在指定CPU上添加工作任务,queue_work()调用queue_work_on()在所有CPU上添加工作任务 三、接口使用举例 1、共享工作队列 文件:drivers/gpu/drm/drm_fb_helper.c,举例如下: ## 3、工作任务的具体实现staticvoiddrm_fb_helper_restore_work_fn(structwork_struct*ignored){...}## 1、定义...
默认情况下,会选择当前 CPU,即调用 queue_work_on() 时的 CPU,但是前提是当前 CPU 在 @wq_unbound_cpumask 内,@wq_unbound_cpumask 全局参数描述了当前系统中所有 unbound worker pool 默认的 CPU affinity (即 workqueue_attr->cpumask),用户可以通过/sys/devices/virtual/workqueue/cpumask修改该参数的值,该...
void worker_func(struct work_struct *work); INIT_DELAYED_WORK(&work, worker_func); queue_work_on() 函数queue_work_on()将work放入workqueue队列,其定义如下: extern bool queue_work_on(int cpu, struct workqueue_struct *wq, struct work_struct *work); ...
function: queue_work 163int queue_work(struct workqueue_struct *wq, struct work_struct *work) 164{ 165int ret; 166 167ret = queue_work_on(get_cpu(), wq, work); 168put_cpu(); 169 170return ret; 171} function: queue_work_on ...