О IRQF_DISABLED флагах

Это часть стандартов кодирования GNU, поэтому все программы GNU (и многие программы, не относящиеся к GNU) следуют им. Однако это отнюдь не абсолютный стандарт; есть и другие способы реализации, например:

  • -Wlong-option: зародился в компиляторе C и указан как таковой в POSIX.
  • -long-option (т.е. одинарное тире): поддерживается большинством приложений (обычно как альтернатива версии с двойным тире), которые не имеют коротких опций.
  • +long-option: это уже выходит из моды, но есть несколько старых программных пакетов, которые резервировали тире для коротких опций, а знак плюс - для длинных. Сегодня используется редко, в основном потому, что большинство реализаций getopt() его не поддерживают
  • long-option: к сожалению, есть приложения, которые путают опции с аргументами. Я полагаю, что MegaCLI является одним из таких нарушителей (впрочем, он является нарушителем практически во всем остальном).
0
27.12.2018, 14:26
1 ответ

К вашему сведению, флаг IRQF _DISABLED был полностью удален из ядра Linux, см. это обновление .

Основными двумя причинами, которые привели к полному исключению флага, были

  1. Если несколько устройств используют одну физическую линию прерывания (из-за аппаратной стоимости ), он не только позволяет обрабатывать прерывания, но и также другие сигналы прерывания, которые используют одно и то же физическое прерывание линия.
  2. Кроме того, если прерывание происходит во время обработки одного прерывания. обрабатывается, он может выйти за пределы стека ядра, поскольку текущий контекст прерывания должен быть сохранен в стеке ядра для обработки другое прерывание.

Кроме того, важно, чтобы 99,999% обработчиков прерываний ядра завершались как можно раньше, и обратите внимание, что помогает некоторый механизм отсрочки. Следовательно, наличие флага IRQF _DISABLED в зависимости от характеристик прерывания (, является ли оно быстрым или медленным ), не имеет смысла.

И чтобы ответить на ваш вопрос, он не обрабатывает прерывания одно за другим, когда вы сбрасываете флаг IRQF _DISABLED, потому что другое прерывание может прервать выполнение вашего обработчика прерывания; и это было причиной того, что переполнение может произойти, когда флаг не установлен. Кроме того, пожалуйста, обратитесь к этой статье для получения дополнительной информации

0
28.01.2020, 04:06

Теги

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