Я пишу драйвер устройства Linux и довольно новичок в этом, поэтому я быстро изучаю, как НЕ делать что-то. В настоящее время я использую пару мьютексов для предотвращения одновременного чтения некоторых функций с устройства и включения в deadlocks при возобновлении с приостановки. Моя проблема в два раза:Защита ресурсов драйвера Linux
1) Обработчик прерываний назначает рабочее время для чтения из FIFO устройства и данных процесса. FIFO нужно читать без перерыва другими чтениями, поэтому я поместил блокировку/разблокировку мьютекса (A) в функции чтения и записи.
2) Конфигурация устройства - это последовательность чтения и записи с использованием тех же функций чтения и записи, что и выше, которые должны выполняться без прерывания другими чтениями или записью, поэтому я установил блокировку/разблокировку мьютекса (B) в конфиге функции. Функции конфигурации устройства вызывают узлы SYSFS.
Проблема возникает, когда система возобновляет работу с приостановки, прерывание запускает вызов FIFO, и в то же время более высокие уровни записывают на узлы SYSFS для установки параметров конфигурации, и система, похоже, зашла в тупик во время последовательности конфигурации. Моя проблема только в том, что я использую мьютекс, который спит, где я должен использовать спин-блокировку? Или я об этом ошибаюсь?
Привет - Я не уверен в конкретной проблеме, но эти две ссылки могут помочь: [API-интерфейсы ядра, часть 2: Отложенные функции, ящики-задачи и рабочие очереди: введение в нижние половины] (http: // www.ibm.com/developerworks/library/l-tasklets/) и [Верхние и нижние половинки] (http://www.makelinux.net/ldd3/chp-10-sect-4) – paulsm4