Обработчик прерываний срабатывает при вызове free_irq

Моя проблема: обработчик прерываний запускается при вызове free_irq. В сообщениях ядра я заметил, что обработчик вызывается, но, поскольку наше устройство не запрашивало прерывания, оно запросило, что прерывание не получено. Это ожидаемое поведение? Кто-нибудь может помочь?

2 ответа

Решение

Когда вы регистрируете обработчик для (возможно) общего прерывания (с IRQF_SHARED), прерывание может быть инициировано другими устройствами, над которыми ваш драйвер не имеет никакого контроля, поэтому ваш драйвер должен быть готов к получению прерывания в любое время.

Чтобы помочь с отладкой драйверов, ядро ​​(когда установлено CONFIG_DEBUG_SHIRQ) подделывает некоторые прерывания, чтобы проверить, что ваш драйвер работает правильно.
[ исходный код]

Если я правильно понял ваш пост - вы должны отключить выдачу прерываний на вашем оборудовании, прежде чем вызывать free_irq(), тогда вы не будете получать прерывания, пока free_irq().

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