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);


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值