Возвращаемое значение обработчиков прерываний в ядре Linux - PullRequest
2 голосов
/ 19 января 2011

Обработчики прерываний происходят асинхронно и, следовательно, не могут быть вызваны другими функциями. Тогда почему обработчики прерываний в ядре Linux возвращают значение? Как ему передаются входные аргументы?

Ответы [ 3 ]

4 голосов
/ 28 апреля 2011

Обработчики прерываний имеют возвращаемое значение по нескольким причинам.

  1. Векторы прерываний могут совместно использоваться несколькими устройствами.Возвращая IRQ_NONE / IRQ_HANDLED, обработчик прерываний может указать, что прерывание было / не было от устройства, которое его особенно интересует. Если возвращается IRQ_NONE, должен вызываться следующий обработчик в списке.
  2. Даже еслиIRQ не используется совместно, обработчик прерываний может указать подсистеме прерываний, что были проблемы с обработкой прерывания, и что его следует отключить, чтобы предотвратить зависание системы из цикла irq.
1 голос
/ 19 января 2011

Обработчики прерываний не являются вектором прерываний. Вектор прерывания - это код, к которому процессор переходит при срабатывании прерывания. Это грубое упрощение, но вот как это выглядит:

  interrupt_vector {
    num = check_interrupt_number()
    f = get_interrupt_handler_func(num);
    d = get_interrupt_handler_data(num);
    /* call interrupt handler */
    ret = f(d);
  }

Таким образом, обработчик и данные регистрируются вместе, а код вектора прерывания вызывает обработчик registererd, передавая зарегистрированные данные, и проверяет возвращаемое значение. Конечно, здесь у нас есть один уровень обработчика, но у вас может быть несколько, например, один обработчик для всех PCI Irq, который по очереди проверяет зарегистрированный обработчик для определенного PCI irq и в конечном итоге вызывает itn, передавая зарегистрированные данные и т. .

Конечно, реальный код, как правило, намного сложнее. Вы можете попробовать эту ссылку lxr для навигации по источникам ядра Linux

0 голосов
/ 07 октября 2017

Векторный код прерывания в сравнении с несколькими подключенными обработчиками прерываний (в зависимости от ОС) до прерывания - обработчики могут возвращать значение (которое обычно входит в регистр, такой как EAX на x86), поэтому векторный код можетуправлять цепочкой обработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...