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

Благодарю.

0 ответов

Другие вопросы по тегам