Может ли SoftIRQ предотвращать запуск того же SoftIRQ с ядром Linux?

Я работаю над улучшением производительности драйвера и должен рассмотреть возможность тупика. В контексте SoftIRQ, spin_lock будет удерживаться и защищать некоторую переменную. В этом случае я должен использовать spin_lock или spin_lock_bh? spin_lock_bh звучит как безопаснее, но у меня есть общий вопрос о реализации SoftIRQ.

  • та же функция softIRQ может быть запланирована на том же процессоре во время выполнения SoftIRQ -> нам нужно использовать spin_lock_bh в SoftIRQ
  • та же функция softIRQ может быть запланирована на другом процессоре, но не на том же процессоре -> мы можем использовать spin_lock в SoftIRQ

Что верно из приведенного выше утверждения?

1 ответ

Решение

Из Linux Kernel Development (2-е издание):

Softirq никогда не вытесняет другой softirq.

Причина проста: во время программного обеспечения softIRQ прерывания отключены.

Так что достаточно использовать обычный spin_lock() в функции softIRQ.

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