Как ядро ​​отключает 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" в этих именах.

Другие вопросы по тегам