Книга: Разработка ядра Linux
Освобождение обработчика прерывания
Освобождение обработчика прерывания
Для освобождения линии прерывания необходимо вызвать функцию
void free_irq(unsigned int irq, void *dev_id);
Если указанная линия не является совместно используемой, то эта функция удаляет обработчик и запрещает линию прерывания. Если линия запроса на прерывание является совместно используемой, то удаляется обработчик, соответствующий параметру dev_id
. Линия запроса на прерывание также запрещается, когда удаляется последний обработчик. Теперь понятно, почему важно передавать уникальное значение параметра dev_id
. При использовании совместно используемых прерываний требуется уникальный идентификатор для того, чтобы отличать друг от друга различные обработчики, связанные с одним номером прерывания, и позволить функции free_irq()
удалять правильный обработчик. В любом случае, если параметр dev_id
не равен значению NULL
, то он должен соответствовать тому обработчику, который удаляется.
Вызов функции free_irq()
должен производиться из контекста процесса.
Таблица 6.1. Список функций управления регистрацией прерываний
Функция | Описание |
---|---|
request_irq() |
Зарегистрировать заданный обработчик прерывания для заданной линии прерывания |
free_irq() |
Освободить указанный обработчик прерывания. Если с линией прерывания больше не связан ни один обработчик, то запретить указанную линию прерывания |
- 4.10.2. Прерывания
- Прерывания
- 12.8. Сервисы и прерывания BIOS
- Подпрограмма обработки прерывания
- Освобождение места на диске
- 6 Раздражающие прерывания
- 3.2.1.3. Освобождение памяти: free()
- 10.6.6. Создание возможности для прерывания функций: siginterrupt()
- Подсистема прерывания контроллера msCAN12.
- Глава 6 Прерывания и обработка прерываний
- Регистрация обработчика прерывания
- Написание обработчика прерывания