Istnieje surowy wariant każdej blokady spin dostępnej w jądrze Linux, chcę poznać jej użycie? npJaka jest różnica między spin_lock a raw_spin_lock()?
raw_spin_lock(), raw_spin_lock_irqsave() itp
Istnieje surowy wariant każdej blokady spin dostępnej w jądrze Linux, chcę poznać jej użycie? npJaka jest różnica między spin_lock a raw_spin_lock()?
raw_spin_lock(), raw_spin_lock_irqsave() itp
spin_lock*
funkcjonuje tak samo jak raw_spin_lock*
te plusem, gdy blokada debugowanie jest włączone (CONFIG_DEBUG_LOCK_ALLOC), należy wykonać pewne dodatkowe kontrole uruchomieniowe dla operacji zamek, takich jak czeki w przypadku impasu . Te kontrole są wykonywane przez podsystem lockdep
.
Z zasady należy używać funkcji spin_lock*
, gdy tylko jest to możliwe,.
Tylko w rzadkich przypadkach bardzo trudnych zasad blokowania, gdy lockdep
może generować fałszywe ostrzeżenia, można użyć funkcji raw_spin_lock*
.
Również funkcje raw_*
mogą być preferowane w stosunku do zwykłych w celu zmniejszenia użycia pamięci lub przyczyn wydajności. Ale powinny być rzeczywiste czas/przestrzeń pomiarów, odzwierciedlenie znaczące wygrywa z korzystania z tych optymalizacji.
Główna różnica to spin_lock
wariantów map na raw_spin_lock
wariantów dla nie-RT, natomiast jeśli ustawiono CONFIG_PREEMPT_RT
, mapują one do rt_spin_lock, która może być uśpiona.
Odłączenie blokady spin_lock od wariacji spania vs nie spania w zależności od tego, czy jesteśmy RT, czy nie, pozwala zachować spójność API spin_lock w całym kodzie jądra.
kiedy lockdep może generować fałszywe ostrzeżenia? i w -rt normalny spin_lock może spać, gdy raw_spin_lock nie, czy to prawda? –