172 похожих чатов

О, товарищи линуксодевы (кхм... сам не понял что написал), короче,

есть такой вопрос насчёт драйверов.
Понимаю, что проще проверить на живом железе, но пока возможности нет.
Вот допустим, я в драйвере заявил, что он умеет обрабатывать IRQ прерывания. Допустим, PCI-ная плата дёрнула какую-то INT# ногу, сообщив компу, что у неё возникло прерывание, и надо бы его обработать. Как я понимаю, комп +- в этот момент вызовет обработчик прерывания, зарегенный в драйвере.

Вопрос в том: Что случится дальше, если плата не "отпустит" INT#? Комп будет дёргать обработчик прерывания "до победного" и зависнит к хренам? Или это как-то штатно разруливается?

4 ответов

10 просмотров

В общем, именно так. Если к моменту подачи команду EOI в APIC сигнал прерывания ещё висит -- то он вызовет следующее прерывание сразу (ну, сразу как только процэссор скажэт STI, поскольку EOI в APIC обычно подают при заблокированных прерываниях, разблокируют их только по IRET из вектора).

И да, правильная последовательность действий -- внутриядерный обработчик обнаружывает номер прерывания в APIC, по очереди вызывает каждый из драйверов-обработчиков такого прерывания (в PCI они могли мультиплексироваться между несколькими устройствами, потому заранее неизвестно, какое устройство его вызвало), каждый обработчик проверяет свою плату, сбрасывает состояние прерывания (если есть) и делает всё, что ему интересно. После всех обработчиков ядро посылает EOI в APIC.

S.E.- Автор вопроса
Ilya Anfimov
И да, правильная последовательность действий -- вн...

А, то есть у меня может вызваться обработчик просто так? Еще лучше

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Карта сайта