Обработчик прерываний срабатывает при вызове free_irq
Моя проблема: обработчик прерываний запускается при вызове free_irq. В сообщениях ядра я заметил, что обработчик вызывается, но, поскольку наше устройство не запрашивало прерывания, оно запросило, что прерывание не получено. Это ожидаемое поведение? Кто-нибудь может помочь?
2 ответа
Когда вы регистрируете обработчик для (возможно) общего прерывания (с IRQF_SHARED), прерывание может быть инициировано другими устройствами, над которыми ваш драйвер не имеет никакого контроля, поэтому ваш драйвер должен быть готов к получению прерывания в любое время.
Чтобы помочь с отладкой драйверов, ядро (когда установлено CONFIG_DEBUG_SHIRQ) подделывает некоторые прерывания, чтобы проверить, что ваш драйвер работает правильно.
[ исходный код]
Если я правильно понял ваш пост - вы должны отключить выдачу прерываний на вашем оборудовании, прежде чем вызывать free_irq(), тогда вы не будете получать прерывания, пока free_irq().