workqueue使用小结

workqueue是一种中断的下半部机制,其可以提供一个进程上下文来推迟工作。
主要有两种使用方法,一种是使用系统默认提供的workqueue,即system_wq
其使用的方法如下:
		if (remove) {
			INIT_WORK(&entry->delete_netdev, delete_netdev);
			schedule_work(&entry->delete_netdev);
		}
从schedule_work的源码可以看出是使用的system_wq
static 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);


猜你喜欢

转载自blog.csdn.net/tiantao2012/article/details/80648187