Как прикрепить прерывание к процессору в драйвере

Можно ли прикрепить программный процессор или любую другую нижнюю половину к процессору. У меня есть сомнения, что это можно сделать из кода softirq. Но тогда внутри драйвера можно привязать конкретный IRQ к ядру.

1 ответ

Решение

Из пользовательского режима вы можете легко сделать это, написав /proc/irq/N/smp_affinity контролировать, на какой процессор (ы) направлено прерывание. Символы для кода, реализующего это, не экспортируются, поэтому это трудно сделать из ядра (по крайней мере, для загружаемого модуля, который структурирован в большинстве драйверов).

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

Итак, чтобы ответить на ваш вопрос, да, это возможно, но это не рекомендуется, и вам нужно сделать одну из нескольких "уродливых" вещей для его реализации ((a) изменить экспорт ядра, (b) связать ваш драйвер статически с основным ядром или (c) открыть / написать в proc файл из режима ядра).

Обычный способ достичь этого - написать программу в пользовательском режиме (может даже быть сценарием оболочки), которая программирует номера / маски ядра в соответствующие proc файл. Увидеть Documentation/IRQ-affinity.txt в исходном каталоге ядра для деталей.