Как ядро отключает softirq в локальном процессоре при запуске обработчика softirq
Недавно я изучал Linux-Kernel-Development Роберта Лава.
Существует параграф, описывающий механизм размягчения.
Обработчики softirq работают с включенными прерываниями и не могут спать. В то время как обработчик работает, softirqs на текущем процессоре отключены. Однако другой процессор может выполнять другие программы.
Я не понимаю значения слова "softirqs на текущем процессоре отключены".
Означает ли это, что при запуске __do_softirq, даже если часть бита в softirq_pending снова повышается, функция __do_softirq не может быть прервана? Если да, то какие утверждения в __do_softirq обеспечивают такую защиту?
Прослеживая код в __do_softirq, я обнаружил, что есть пара функций __local_bh_disable и __local_bh_enable.
Они отключают локальный софтирк?
Благодарю.
1 ответ
Да, __local_bh_disable
а также __local_bh_enable
отключить и включить обработку программ на текущем процессоре. Softirq также известны как "нижние половины", что означает "bh" в этих именах.