Я выполняю какую-то работу с модулем, и у меня возникают сбои, которые происходят случайным образом (обычно в течение 10 часов после загрузки).
Сообщения журнала ядра могут варьироваться от одного сбоя к другому, но вв некоторых случаях я получаю это:
<4>huh, entered c90390a8 with preempt_count 0000010d, exited with c0340000?
Код, который генерирует этот журнал, взят из ядра 2.6.14, kernel / timer.c:
int preempt_count = preempt_count();
fn(data);
if (preempt_count != preempt_count()) {
printk(KERN_WARNING "huh, entered %p "
"with preempt_count %08x, exited"
" with %08x?\n",
fn, preempt_count,
preempt_count());
BUG();
}
Чтобы это условие произошло,что должно было произойти (очевидно, preempt_count изменилось, но что может это вызвать)?
Другой признак сбоя заключается в том, что я вижу scheduling while atomic
при выполнении i2c из рабочей очереди (которая должнаконечно не быть атомным, верно?).Что может быть причиной этого?
Я полагаю, что этот пост - длинный путь, но я действительно просто ищу что-то, что можно устранить в этой точке.