очистить ожидающие прерывания в linux ядре - PullRequest
0 голосов
/ 07 августа 2020

скажем, у меня есть следующий код:

local_irq_disable();
...  // some interrupts come during this time
local_irq_enable();

после того, как я вызвал local_irq_enable (), все заблокированные прерывания (ожидающие прерывания) все еще существуют и заставляют процессор отвечать. Есть ли что-нибудь, что очистит ожидающие прерывания? мой код работает на машине ARM aarch64.

1 Ответ

0 голосов
/ 08 августа 2020

Типичная цепочка состоит в том, что вывод прерывания процессора мультиплексируется через контроллер прерываний (например, GI C) на набор устройств.

Отключение прерываний просто шунтирует вывод на ЦП, прерывание контроллер по-прежнему поддерживает состояние ожидания. Вы можете использовать функцию на контроллере прерываний для маскировки всех прерываний, что позволит вам затем разрешить прерывания ЦП без их получения. Не совсем уверен, что смысл в этом, когда вы могли бы просто оставить процессор игнорировать прерывания.

Чтобы по-настоящему очистить ожидающие прерывания, вам нужно вызвать код устройства c (ie. Обработчик прерываний) для каждого устройства с ожидающим прерыванием. Вы можете просмотреть биты состояния GI C, идентифицировать каждое ожидающее прерывание, затем просмотреть структуру прерывания ядра, чтобы определить соответствующее устройство и вызвать его обработчик. Намного проще просто снова включить прерывания.

...