queue is called workqueue and the thread is called worker. While there are work items on the workqueue the worker executes the functions associated with the work items one after the other. When there is no work item left on the workqueue the worker becomes idle. When a new work item gets ...
__irq_work_queue_local(work); preempt_enable(); return true; } EXPORT_SYMBOL_GPL(irq_work_queue); 在queue之前,先调用 irq_work_claim() 判断此 work 此时是否可以使用,若别人事先已经对其 flag 标注了 IRQ_WORK_PENDING,则表示此 work 已经被 enqueue 过了,还没来得及处理,是不允许重复对其进行 enq...
可以在中断服务函数中调用schedule_work(&yd_sync_work_queue); 现在工作已经被创建,我们可以调度它了。想要把给定工作的待处理函数提交给缺省的events工作线程,只需调用schedule_work(&work); work马上就会被调度,一旦其所在的处理器上的工作者线程被唤醒,它就会被执行。 有时候并不希望工作马上就被执行,而是希望...
Linux 2.6.30里,在ingo molnar的RT tree里存在有一段时间的interrupt thread终于merge到mainline了。此时如果使用request_threaded_irq申请的中断,handler 不是在中断环境里执行,而是在新创建的线程里执行,这样该handler非常像执行workqueue,拥有所有work queue的特性,但是省掉了创建、初始化、调度workqueue的步骤,处理起来...
为此Linux中断子系统将中断分为了中断上文和中断下文,中断上文用来执行一些紧迫的程序,中断下文用来执行一些不紧急的可延后执行的程序。Linux提供了三种机制来处理中断下文:Soft irq(软中断)、Tasklet、work_queue(工作队列)。 Ø 软中断 Ø Tasklet Ø Work_queue...
__smp_call_single_queue(cpu, &work->llnode); } else { __irq_work_queue_local(work); } @@ -131,6 +130,31 @@ bool irq_work_needs_cpu(void) return true; } void irq_work_single(void *arg) { struct irq_work *work = arg; int flags; /* * Clear the PENDING bit, after this...
为此Linux中断子系统将中断分为了中断上文和中断下文,中断上文用来执行一些紧迫的程序,中断下文用来执行一些不紧急的可延后执行的程序。Linux提供了三种机制来处理中断下文:Soft irq(软中断)、Tasklet、work_queue(工作队列)。 Ø 软中断 Ø Tasklet Ø Work_queue...
soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,主要为一些subsystem用,一般driver基本上用不上。 tasklet和work queue在普通的driver里用的相对较多,主要区别是tasklet是在中断上下文执行,而work queue是在process上下文,因此可以执行可能sleep的操作。
The irq work queue is a per cpu object and it is sufficient for synchronization if per cpu atomics are used. Doing so simplifies the code and reduces the overhead of the code. Before: christoph@linux-2.6$ size kernel/irq_work.o text data bss dec hex filename 451 8 1 460 1cc kernel...
soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,主要为一些subsystem用,一般driver基本上用不上。tasklet和work queue在普通的driver里用的相对较多,主要区别是tasklet是在中断上下文执行,而workqueue是在process上下文,因此可以执行可能sleep的操作。