2015-11-02 16 views

Odpowiedz

6

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.

+0

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? –

3

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.

Powiązane problemy