Existem três funções spin_lock no kernel com as quais estou ocupado atualmente.
- spin_lock
- spin_lock_irq
- spin_lock_irqsave
Eu só encontro contribuições cobrindo apenas dois deles (incluindo a documentação do Linux).
Em seguida, as respostas ou explicações são formuladas de forma ambígua ou contrárias umas às outras ou mesmo contêm comentários dizendo que a explicação está errada. Isso torna difícil obter uma visão geral.
Alguns conceitos básicos são claros para mim, como por exemplo, no contexto de interrupção, um simples spin_lock() pode resultar em um deadlock. Mas eu realmente apreciaria uma imagem completa sobre este assunto.
Eu preciso entender:
- Quando devemos ou devemos usar qual versão, quando não devemos?
- Quando não é necessário usar uma versão mais segura, mas não prejudica (exceto para desempenho)?
- Qual é o motivo para usar uma versão em uma situação específica?