C'è una variante raw di ogni spin lock disponibile nel kernel di Linux, voglio sapere il suo utilizzo? es:Qual è la differenza tra spin_lock e raw_spin_lock()?
raw_spin_lock(), raw_spin_lock_irqsave() ecc
C'è una variante raw di ogni spin lock disponibile nel kernel di Linux, voglio sapere il suo utilizzo? es:Qual è la differenza tra spin_lock e raw_spin_lock()?
raw_spin_lock(), raw_spin_lock_irqsave() ecc
spin_lock*
funzioni fare lo stesso come raw_spin_lock*
quelli più, quando il debugging blocco è abilitato (CONFIG_DEBUG_LOCK_ALLOC), effettuare alcuni controlli runtime aggiuntivi per le operazioni di bloccaggio, come assegni per deadlock. Questi controlli vengono eseguiti dal sottosistema lockdep
.
Di norma, le funzioni spin_lock*
devono essere utilizzate ogni volta che è possibile.
Solo in rari casi di politica di blocco molto complicata, quando lockdep
è in grado di produrre falsi avvisi, è possibile utilizzare le funzioni raw_spin_lock*
.
Inoltre, le funzioni raw_*
possono essere preferite a quelle comuni per ridurre l'utilizzo della memoria o ragioni di prestazioni. Ma dovrebbe essere misurazioni tempo/spazio effettive , riflettendo le vittorie significative dall'utilizzo di queste ottimizzazioni.
La differenza principale è spin_lock
varianti di mappa a raw_spin_lock
varianti per non RT, mentre se è impostato CONFIG_PREEMPT_RT
, quindi mappano a rt_spin_lock che può ospitare.
Dissociando lo spin_lock dalle variazioni di sonno e non di sonno a seconda che sia RT o meno, l'API di spin_lock può essere mantenuta coerente attraverso il codice del kernel.
quando lockdep può generare falsi avvisi? e in -rt normale spin_lock può dormire mentre raw_spin_lock no, è vero? –