我是 Linux 设备驱动程序编写的新手,我正在尝试制作一个处理 UART 芯片的设备驱动程序。为此,我决定使用工作查询作为我的下半部分处理,因为在处理从 UART 芯片获得的数据时,我必须使用一些信号量。之前在中断中安排的工作队列处理程序现在被执行,并且在执行期间它将在信号量处休眠。在此期间,再次调用中断处理程序并调度相同的工作队列处理程序。工作队列处理程序会在第一次执行完成之前再次执行吗?
谢谢。
我是 Linux 设备驱动程序编写的新手,我正在尝试制作一个处理 UART 芯片的设备驱动程序。为此,我决定使用工作查询作为我的下半部分处理,因为在处理从 UART 芯片获得的数据时,我必须使用一些信号量。之前在中断中安排的工作队列处理程序现在被执行,并且在执行期间它将在信号量处休眠。在此期间,再次调用中断处理程序并调度相同的工作队列处理程序。工作队列处理程序会在第一次执行完成之前再次执行吗?
谢谢。
工作队列的默认行为是允许在不同的 CPU 上并发执行。有一个标志 WQ_NON_REENTRANT 可以改变这种行为。更多信息可以在这篇文章中找到http://lwn.net/Articles/403891/
但似乎在最近的内核中,工作队列默认是不可重入的 - 请参阅 http://lwn.net/Articles/511190