Пишу драйвер для чипа, общающегося с SoC'ом (i.MX233) по SPI. Изучив исходники этой подсистемы пришёл к не очень радостным выводам.
1) Обработка сообщений происходит в отдельном системном потоке (Workqueue)
2) Возможность получить DEADLOCK в ситуации вызова spi_sync в функции обратного вызова spi_async. spi_sync использует wait_for_completion для текущего процесса, а если этот процесс является обработчиком сообщений spi, то получается выстрел себе в ногу.
3) Если в момент обработки сообщения, а именно в момент передачи данных между процессором и spi-мастером (в нём есть спинлоки) произойдёт прерывание, в котором есть вызов spi_sync, также произойдёт DEADLOCK
Кто знает, не упустил ли я чего? Есть ли выход из ситуации?