Выполняются ли функции драйвера ioctl из атомарного контекста в Linux 2.6? - PullRequest
3 голосов
/ 02 сентября 2010

Я отслеживаю ошибку "планирование в то время как атомарную" в одном из наших драйверов, и мне интересно, являются ли ioctl атомарным контекстом.Также, если кому-то есть что рассказать о том, как входить и выходить из атомного контекста, и в каких местах они встречаются, это было бы полезно.

Ответы [ 2 ]

8 голосов
/ 02 сентября 2010

Нет, ioctls обычно запускаются в контексте процесса. Если во время обработки ioctl драйвер получает спин-блокировку, то драйвер входит в атомарный контекст и остается в атомарном контексте, пока не освободит спин-блокировку.

См. http://lwn.net/Articles/274695/ для хорошего обсуждения атомарного контекста в Linux

2 голосов
/ 08 сентября 2010

Включили ли вы CONFIG_DEBUG_SPINLOCK_SLEEP, что может дать вам больше информации, включая трассировку стека, о том, где находится ошибка.

Другой угол, на который нужно смотреть, это то, какие спящие функции вы вызываете. Примеры msleep(), mutex_lock(), copy_to_user() и т. Д.

...