Usa la funzione mutex_lock_interruptible per consentire al tuo pilota di essere interrotto da qualsiasi segnale. Ciò implica che la chiamata di sistema deve essere scritta in modo che possa essere riavviata. (Vedi anche ERESTARTSYS.)
Posso bloccare uno spinlock in una CPU e sbloccarlo in un' altra?
L'uso degli spinlock su un sistema single-core/single-CPU di solito non ha senso, dal momento che il polling spinlock sta bloccando l'unico core CPU disponibile, nessun altro thread può essere eseguito e poiché nessun altro thread può essere eseguito, neanche il lucchetto verrà sbloccato.
Posso chiamare Kmalloc Gfp_kernel tenendo premuto uno spinlock?
Non puoi, tuttavia, fare qualsiasi cosa che possa dormire tenendo premuto uno spinlock. Ad esempio, non chiamare mai nessuna funzione che tocca la memoria dell'utente, kmalloc con il flag GFP_KERNEL, nessuna funzione semaforo o nessuna delle funzioni di pianificazione tenendo premuto uno spinlock. … I semafori in Linux sono lucchetti dormienti.
Cos'è Spinlock_t?
int spin_trylock(spinlock_t lock) Blocca lo spinlock se non è già bloccato. Se non è in grado di ottenere il blocco, esce con un errore e non esegue il blocco in rotazione. spin_lock_irq: spin_lock_irq(spinlock_t lock)
Cos'è un mutex del kernel?
Nel kernel Linux, i mutex si riferiscono a una particolare primitiva di blocco che impone la serializzazione sui sistemi di memoria condivisa, e non solo al termine generico che si riferisce alla 'mutua esclusione' che si trova in accademici o libri di testo teorici simili.