2012-09-26 38 views

回答

0

是的,该规则包括softirq上下文。事实上,你认为你需要从softirq上下文中调用free_irq(),这表明你的设计有点不同寻常 - 在正常情况下,当设备关闭时使用free_irq(),这几乎总是来自进程上下文。

但是,如果您真的需要这样做,那么要做的事情是推迟它通过schedule_work()或一些类似的工作队列函数来处理上下文。当然,你不能等待你的softirq完成这个延期工作,所以你必须推迟解除IRQ之后的任何其他工作。

可能可以给出更好的答案,如果你给了,为什么你要叫free_irq()从中断上下文更多的信息。

+0

我提出了一种解决方法,可以通过de'schedule_work()'操作进行改进。由于'schedule_work()'对于[本文档]是非阻塞的(http://www.ibm.com/developerworks/linux/library/l-tasklets/index.html),所以我的softirq不必等待,wouldn是吗?我唯一的约束是确保free_irq在下一次打开之前运行,我认为这可以通过open函数中的'flush_work'来完成。 – Oswin

+0

当然,schedule_work()是非阻塞的 - 我的意思是如果你需要释放IRQ,那么你必须等待它。至于“de”schedule_work()'operation“,是否是cancel_scheduled_work()之后的内容? – Roland

+0

我不使用默认的工作队列,所以相应的函数是queue_work()和flush_work() – Oswin

相关问题