Използвайте функцията mutex_lock_interruptible , за да позволите на вашия драйвер да бъде прекъснат от всеки сигнал. Това означава, че вашето системно извикване трябва да бъде написано, така че да може да бъде рестартирано. (Вижте също ERESTARTSYS.)
Мога ли да заключа централно заключване в един процесор и да го отключа друг процесор?
Използването на spinlocks в система с едно ядро/единичен процесор обикновено няма смисъл, тъй като докато анкетата за спинблокиране блокира единственото налично ядро на процесора, никоя друга нишка не може да работи и тъй като никоя друга нишка не може да се изпълнява, заключването също няма да бъде отключено.
Мога ли да се обадя на Kmalloc Gfp_kernel, докато задържам spinlock?
Не можете, обаче, да правите нещо, което ще заспи, докато държите заключване. Например, никога не извиквайте функция, която докосва паметта на потребителя, kmalloc с флага GFP_KERNEL, която и да е функция на семафора или която и да е от функциите на графика, докато държите заключване. … Семафорите в Linux са спящи ключалки.
Какво е Spinlock_t?
int spin_trylock(spinlock_t lock) Заключва заключването на въртене ако вече не е заключено. Ако не може да получи заключването, той излиза с грешка и не се завърта. spin_lock_irq: spin_lock_irq(spinlock_t lock)
Какво е мютекс на ядрото?
В ядрото на Linux мютексите се отнасят до специфичен заключващ примитив, който налага сериализация на споделени памети, а не само до общия термин, отнасящ се до "взаимно изключване", намерен в академични или подобни теоретични учебници.