我们有一个ISR可以在任何可用的内核上执行,并且可能根据内核是忙还是空闲而导致成功或失败条件。在处理程序中,我们使用queue_work_on()函数对每个核心的工作队列进行排队。对于每个核心,queue_work_on()函数将被调用,并且基于queue_work_on()的返回值,我们如何通过ISR返回值IRQ_HANDLED,IRQ_NONE由于多核系统中的调度程序超时导致进程挂起
如何处理queue_work_on函数中的任何一个失败以及如何返回ISR值。
希望我提供了足够的上下文来获得一些观点。
编辑:
情景更像是: 我们有例如由多个进程消耗的1024个队列用于由主机驱动程序执行一些卸载功能。在提交卸载后,进程会被wait_for_completion()调用阻塞,理想情况下应该通过完成通知来唤醒进程。在驱动程序卸载的环中排队并基于卸载成功,isr会通知工作线程使队列作业出列并触发完成事件。 现在我们看到更多的完成事件,而不是等待进程导致挂起TASK_UNITERRUPTIBLE状态的进程导致计划程序超时。需要一些指针来在多核系统中部署可能的同步
感谢您的回复。我尝试了这个建议,但没有什么区别:( 方案更像是:我们有1024个队列,这些队列被多个进程用于执行主驱动程序的卸载功能 – 2014-12-02 15:42:44
感谢您的回应,我尝试了这个建议,但没有任何区别: ( 请参阅编辑后的查询,详细了解场景和相关问题。 希望能够帮助您提供更多相关指示,以进一步探索。 – 2014-12-02 15:54:36