[mdk-re] Multiple Ethernet interfaces
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_mivlgu=2Emurom=2Eru?=
Вт Апр 10 17:52:33 MSD 2001
On Tue, 10 Apr 2001 13:07:02 +0400
cornet <cornet на zmail.ru> wrote:
> Я не слишком понимаю, как два девайса работая одновременно и
> независимо
> могут разделять одно прерывание! :-/
> Поясните, pls.
У шины PCI это стандартная возможность. В ядре Linux реализуется
следующим образом: для каждого IRQ формируется цепочка обработчиков, и
при поступлении прерывания все они вызываются по очереди. Каждый из
обработчиков опрашивает свое устройство, и если запрос пришел от него,
обслуживает. Поскольку запрос выставляется по уровню, а не по фронту,
как на ISA, если даже в процессе такой обработки придет еще один
запрос по тому же IRQ, он не пропадет - после возврата из прерывания
сразу произойдет новое.
Есть, правда, фокус: дело в том, что обработчиков два типа - обычный
(работает при разрешенных других прерываниях) и SA_INTERRUPT (при его
выполнении все прерывания запрещены). Так вот, на одном IRQ могут
висеть только обработчики одного типа. Из-за этого сетевые и звуковые
карты не могут жить на одном прерывании, например, со SCSI (или HPT3xx
IDE). Решение проблемы в случае материнской платы с HPT3xx -
переставить карточку в другой слот (наблюдал такую проблему на Abit
BX133 RAID, у нее в книжечке расписано, какой слот с чем делит
прерывание, надо только почитать :-).
ISA - другое дело, там разделяемые прерывания не работают в принципе -
просто аппаратно не предусмотрено.
Подробная информация о списке рассылки community