Драйверы и иже с ними. Linux.

Добрый день, форумчане! Возникла тут задачка одна, непростая. Надеюсь, знатоки найдутся. Если нет - ну что ж… Пойду на stackoverflow.

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

Дальше уже более специфичная информация.

При реализации расшаренных прерываний с передачей dev_id происходит kernel panic при доступе к валидным ресурсам. Почему валидным - потому, что много где еще используются, и вполне успешно. Точнее, очевидно, невалидным, но причину этого мне выяснить не удалось.

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

Собственно, вопрос. Как канонично обработать подобную ситуацию в Линуксе(одна линия прерываний, много устройств на ней)?