我有一个带有 request_threaded_irq 的处理函数和线程函数的驱动程序代码,类似于:
irq-handler fn()
{
/*disable device interrupt*/
i2c read from register;
set disable bit to client-device-interrupt
i2c write back;
return IRQ_WAKe_THREAD;
}
irq-thread fn()
{
i2c read from register;
....
....
/*enable device interrupt*/
i2c read from register;
set enable bit to client-device-interrupt
i2c write back;
/*Rest of the operation*/
..........
..........
return IRQ_HANDLED;
}
我对上述实施几乎没有疑问。
“handler fn”中的 2 i2c 操作会花费大量时间吗?
我是否需要在“handler fn”原子中进行位操作?
我是否应该将执行到“启用设备中断”的操作从“线程 fn”移动到“处理程序 fn”(这将花费我 4 次 i2c 操作和一位操作)?- 有可能我可能会根据上述代码实现错过中断。
如果我这样做(根据问题 3)。它如何影响其他设备中断。(因为我基本怀疑硬 IRQ 上下文中的“处理程序 fn”是否在禁用中断的情况下运行)
请为我提供上述情况的最佳解决方案。
提前致谢。