2017-01-13 10 views
2

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

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

Что верно в приведенном выше заявлении?

ответ

1

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^