Я отслеживаю «планирование при атомарной» ошибке в одном из наших драйверов, и мне интересно, является ли ioctl атомарным контекстом. Кроме того, если у кого-то есть что-то, что можно было бы рассказать о том, как попасть в атомарный контекст и из него, а также об общих местах, которые они встречают, было бы полезно.Являются ли функции драйвера ioctl выполненными из атомного контекста под Linux 2.6?
3
A
ответ
8
Нет, ioctls обычно работают в контексте процесса. Если во время обработки ioctl драйвер захватывает спин-блокировку, драйвер войдет в атомный контекст и останется в атомном контексте до тех пор, пока он не освободит спин-блокировку.
См: http://lwn.net/Articles/274695/ для хорошей дискуссии на атомарном контексте в Linux
2
Вы превратили в CONFIG_DEBUG_SPINLOCK_SLEEP
, что может дать вам больше информации, в том числе трассировки стека, в котором ошибка.
Другой угол, на который нужно смотреть, - это функции сна, которые вы вызываете. Примерами являются msleep()
, mutex_lock()
, copy_to_user()
и т.д.