Как прикрепить прерывание к процессору в драйвере
Можно ли прикрепить программный процессор или любую другую нижнюю половину к процессору. У меня есть сомнения, что это можно сделать из кода softirq. Но тогда внутри драйвера можно привязать конкретный IRQ к ядру.
1 ответ
Из пользовательского режима вы можете легко сделать это, написав /proc/irq/N/smp_affinity
контролировать, на какой процессор (ы) направлено прерывание. Символы для кода, реализующего это, не экспортируются, поэтому это трудно сделать из ядра (по крайней мере, для загружаемого модуля, который структурирован в большинстве драйверов).
Тот факт, что символы реализующей функции не экспортируются, является признаком того, что разработчики ядра не хотят поощрять это. Предположительно, это потому, что это отнимает у пользователя контроль. А также встраивает предположения о количестве процессоров и пр. В драйвер.
Итак, чтобы ответить на ваш вопрос, да, это возможно, но это не рекомендуется, и вам нужно сделать одну из нескольких "уродливых" вещей для его реализации ((a) изменить экспорт ядра, (b) связать ваш драйвер статически с основным ядром или (c) открыть / написать в proc
файл из режима ядра).
Обычный способ достичь этого - написать программу в пользовательском режиме (может даже быть сценарием оболочки), которая программирует номера / маски ядра в соответствующие proc
файл. Увидеть Documentation/IRQ-affinity.txt
в исходном каталоге ядра для деталей.