Użyj funkcji mutex_lock_interruptible aby zezwolić na przerwanie sterownika przez dowolny sygnał. Oznacza to, że wywołanie systemowe powinno być napisane, aby można było je ponownie uruchomić. (Zobacz także ERESTARTSYS.)
Czy mogę zablokować spinlock w jednym procesorze i odblokować go w innym?
Korzystanie z blokad spinlock w systemie jednordzeniowym/jednoprocesorowym zwykle nie ma sensu, ponieważ tak długo, jak odpytywanie blokad spinlock blokuje jedyny dostępny rdzeń procesora, żaden inny wątek nie może działać, a ponieważ żaden inny wątek nie może działać, zamek również nie zostanie odblokowany.
Czy mogę zadzwonić do Kmalloc Gfp_kernel trzymając spinlock?
Nie możesz jednak robić niczego, co spowoduje uśpienie podczas trzymania spinlocka. Na przykład nigdy nie wywołuj żadnej funkcji, która dotyka pamięci użytkownika, kmalloc z flagą GFP_KERNEL, żadnych funkcji semaforów ani żadnej z funkcji harmonogramu, gdy trzymasz blokadę spinlock. … Semafory w Linuksie to blokady usypiające.
Co to jest Spinlock_t?
int spin_trylock(spinlock_t lock) Blokuje blokadę spinlock jeśli nie jest jeszcze zablokowana. Jeśli nie można uzyskać blokady, kończy działanie z błędem i nie obraca blokady. spin_lock_irq: spin_lock_irq(spinlock_t lock)
Co to jest muteks jądra?
W jądrze Linuksa muteksy odnoszą się do konkretnego prymitywu blokującego, który wymusza serializację w systemach pamięci współdzielonej, a nie tylko do ogólnego terminu odnoszącego się do „wzajemnego wykluczania” znajdującego się w akademickie lub podobne podręczniki teoretyczne.