Используйте функцию mutex_lock_interruptible , чтобы ваш драйвер мог быть прерван любым сигналом. Это означает, что ваш системный вызов должен быть написан так, чтобы его можно было перезапустить. (Также см. ERESTARTSYS.)
Могу ли я заблокировать спин-блокировку на одном ЦП и разблокировать ее на другом ЦП?
Использование спин-блокировок в одноядерной/однопроцессорной системе обычно не имеет смысла, поскольку пока опрос спин-блокировки блокирует единственное доступное ядро ЦП, ни один другой поток не может выполняться, а поскольку никакой другой поток не может выполняться, замок тоже не откроется.
Могу ли я вызвать Kmalloc Gfp_kernel, удерживая спин-блокировку?
Вы не можете, однако, делать что-либо, что будет засыпать, удерживая спин-блокировку. Например, никогда не вызывайте любую функцию, которая касается пользовательской памяти, kmalloc с флагом GFP_KERNEL, любые функции семафора или любые функции расписания, удерживая спин-блокировку. … Семафоры в Linux - это спящие блокировки.
Что такое Spinlock_t?
int spin_trylock(spinlock_t lock) Блокирует спин-блокировку , если она еще не заблокирована. Если не удается получить блокировку, она завершается с ошибкой и не закрывает блокировку. spin_lock_irq: spin_lock_irq(spinlock_t lock)
Что такое мьютекс ядра?
В ядре Linux мьютексы относятся к конкретному блокирующему примитиву, обеспечивающему сериализацию в системах с разделяемой памятью, а не только к общему термину, относящемуся к «взаимному исключению», найденному в академические круги или аналогичные теоретические учебники.