Функция потока в поточном IRQ выполняется в атомарном контексте?
Я зарегистрировал обработчик прерываний с резьбой, как показано ниже:
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 работает в атомарном контексте, то это, в свою очередь, вызывает панику ядра. Механизм прерывания с резьбой является новым для меня, поэтому нужна помощь.
Благодарю.