Utilice la función mutex_lock_interruptible para permitir que su conductor sea interrumpido por cualquier señal. Esto implica que su llamada al sistema debe escribirse para que pueda reiniciarse. (Véase también ERESTARTSYS.)
¿Puedo bloquear un spinlock en una CPU y desbloquearlo en otra CPU?
Usar spinlocks en un sistema de un solo núcleo/CPU única generalmente no tiene sentido, ya que mientras el sondeo de spinlock bloquee el único núcleo de CPU disponible, ningún otro subproceso puede ejecutarse y dado que ningún otro subproceso puede ejecutarse, la cerradura tampoco se desbloqueará.
¿Puedo llamar a Kmalloc Gfp_kernel mientras sostengo un spinlock?
No puedes, sin embargo, hacer nada que duerma mientras sostienes un spinlock. Por ejemplo, nunca llame a ninguna función que toque la memoria del usuario, kmalloc con el indicador GFP_KERNEL, ninguna función de semáforo o cualquiera de las funciones de programación mientras mantiene presionado un spinlock. … Los semáforos en Linux son bloqueos durmientes.
¿Qué es Spinlock_t?
int spin_trylock(spinlock_t lock) Bloquea el spinlock si aún no está bloqueado. Si no puede obtener el bloqueo, sale con un error y no gira el bloqueo. spin_lock_irq: spin_lock_irq(spinlock_t bloqueo)
¿Qué es un kernel mutex?
En el kernel de Linux, los mutex se refieren a una primitiva de bloqueo particular que impone la serialización en los sistemas de memoria compartida, y no solo al término genérico que se refiere a la 'exclusión mutua' que se encuentra en academia o libros de texto teóricos similares.