2017-01-13 3 views
2

Je travaille sur une amélioration de la performance d'un pilote et devrait envisager la possibilité de blocage. Dans un contexte SoftIRQ, spin_lock sera conservé et protégera certaines variables. Dans ce cas, devrais-je utiliser spin_lock ou spin_lock_bh? spin_lock_bh semble plus sûr, mais j'ai une question générale sur l'implémentation de SoftIRQ.Le SoftIRQ peut-il exécuter le même SoftIRQ avec le noyau Linux?

  • la même fonction de softirq peut être programmée sur le même CPU lors de l'exécution du softirq -> nous devons utiliser spin_lock_bh dans le softirq
  • la même fonction de softirq peut être programmée sur l'autre CPU, mais pas le même CPU -> nous pouvons utiliser spin_lock dans le SoftIRQ

Qu'est-ce qui est vrai à partir de l'instruction ci-dessus?

Répondre

1

De Linux Kernel Development (2e édition):

Un softirq ne préempte une autre softirq.

La raison est simple: pendant les interruptions logicielles softirq sont désactivées.

Il suffit donc d'utiliser spin_lock() dans une fonction softIRQ.