Ожидание в критическом разделе модуля ядра Linux (драйвера) для ввода пользовательского пространства - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в программировании ядра и вносил изменения в драйвер Linux. Я хочу заблокировать / подождать в критическом разделе для пользовательского ввода (связь между драйвером и приложением пространства пользователя работает). Проблема в том, что когда я использовал wait_event_timeout (), система рушится, и я получаю BUG: scheduling while atomic: swapper. Кто-нибудь есть идеи, как решить эту проблему и может дать мне несколько советов, с чего начать?

1 Ответ

0 голосов
/ 05 сентября 2018

Как объяснено в других вопросах , вы вызываете wait_event_timeout в контексте, когда у вас уже получена некоторая блокировка (в критической секции). В этот момент ваш процесс может потенциально зайти в тупик с другими процессами, и планировщик жалуется на это. Пожалуйста, просмотрите точку, где вы вызываете wait_event_timeout, и проверьте, выполняется ли ввод-вывод в правильном месте и разблокировали ли вы все примитивы синхронизации, прежде чем отправлять ваш процесс в спящий режим.

...