我已经注册了一个线程中断处理程序,如下所示:
ret = devm_request_threaded_irq(dev,
data->irq,
&abc_handle_irq,
&abc_thread_irq,
IRQF_SHARED,
DEVICE_NAME,
(void *)pdev);
abc_thread_irq()是线程函数,在此机制中充当下半部分。此线程与进程上下文共享资源,因此需要锁定。现在问题1.这个锁是否可以是mutex_lock()(struct mutex lock),或者它必须使用spin_lock_bh()。我正在研究一个使用mutex_lock的代码,在我看来这是不行的,因为它可以让BH进入睡眠状态,如果BH线程在原子上下文中运行,那么反过来会引起内核恐慌。线程中断机制对我来说是新的,所以需要帮助。
感谢。