本文共 913 字,大约阅读时间需要 3 分钟。
workqueue是一种中断的下半部机制,其可以提供一个进程上下文来推迟工作。主要有两种使用方法,一种是使用系统默认提供的workqueue,即system_wq其使用的方法如下: if (remove) { INIT_WORK(&entry->delete_netdev, delete_netdev); schedule_work(&entry->delete_netdev); }从schedule_work的源码可以看出是使用的system_wqstatic inline bool schedule_work(struct work_struct *work){ return queue_work(system_wq, work);}通过cancel_work_sync()来取消一个workqueue在int __init workqueue_init_early(void)中有申请system_wq和system_highpri_wq而每个cpu都有这两个workqueue,所以percpu定义如下:static DEFINE_PER_CPU_SHARED_ALIGNED(struct worker_pool [NR_STD_WORKER_POOLS], cpu_worker_pools);除了提供INIT_WORK外,其他使用system_wq的函数为INIT_DELAYED_WORK,INIT_DEFERRABLE_WORK第二种是自己通过alloc_workqueue()来自己创建一个workqueue.例如:创建一个自己的workqueue iommu_wq = alloc_workqueue("amd_iommu_v2", WQ_MEM_RECLAIM, 0); if (iommu_wq == NULL) goto out;flush queue: flush_workqueue(iommu_wq);运行这个queue queue_work(iommu_wq, &fault->work); 销毁queue destroy_workqueue(iommu_wq);
转载地址:http://lnnmi.baihongyu.com/