Use a função mutex_lock_interruptible para permitir que seu driver seja interrompido por qualquer sinal. Isso implica que sua chamada de sistema deve ser escrita para que possa ser reiniciada. (Veja também ERESTARTSYS.)
Posso bloquear um spinlock em uma CPU e desbloqueá-lo em outra CPU?
Usar spinlocks em um sistema single-core/single-CPU geralmente não faz sentido, desde que o polling spinlock esteja bloqueando o único núcleo de CPU disponível, nenhum outro thread pode ser executado e como nenhum outro thread pode ser executado, a fechadura também não será desbloqueada.
Posso chamar Kmalloc Gfp_kernel mantendo um spinlock?
Você não pode, no entanto, faça qualquer coisa que durma enquanto segura um spinlock. Por exemplo, nunca chame qualquer função que toque a memória do usuário, kmalloc com o sinalizador GFP_KERNEL, nenhuma função de semáforo ou qualquer uma das funções de agendamento enquanto mantém um spinlock. … Semáforos no Linux são travas adormecidas.
O que é Spinlock_t?
int spin_trylock(spinlock_t lock) Bloqueia o spinlock se ainda não estiver bloqueado. Se não for possível obter o bloqueio, ele sai com um erro e não gira o bloqueio. spin_lock_irq: spin_lock_irq(spinlock_t lock)
O que é um mutex de kernel?
No kernel do Linux, mutexes referem-se a uma primitiva de bloqueio particular que impõe a serialização em sistemas de memória compartilhada, e não apenas ao termo genérico referente a 'exclusão mútua' encontrado em academia ou livros teóricos semelhantes.