|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Gleb Smirnoff 2:5020/400 27 Jan 2005 12:24:41 To : "Igor A. Valcov" Subject : Re: FreeBSD module programming & panic -------------------------------------------------------------------------------- Igor A. Valcov <viaprog@lic1.vsi.ru> wrote: IAV> Пытаюсь написать один дравер, и возникла проблема. IAV> Если просто символьное устройство создать, то всё нормально работает. Hо IAV> как только добавляю kthread. Сразу возникает проблема. IAV> kthread даже работает, всё нормально. Hо как дело доходит до kldunload, IAV> сразу же Fatal trap 12: page fault. Hадо зайти в дебаггер и посмотреть что именно. Это общий совет на все случаи жизни. IAV> Изучил множество драйверов из sys/dev. Вроде нигде криминально не IAV> ошибся. Всё так. А вот почему такое происходит, никак н пойму. Если бы ядро было собрано с INVARIANTS, то оно спаниковало бы еще на load, вот так: "sleeping without a mutex". То есть msleep() используется не правильно. IAV> И ещё вопрос. Я так понял, что функция, которую выполняет kthread не IAV> диспетчеризируется, то есть пока она работает и не вызывается никаких IAV> tsleep и ему подобных, sheduler не передаст управление никакому другому IAV> процессу (на UP системе). Поскольку если там вставить бесконечный цикл, IAV> то всё виснет намертво. Так и есть. Возможно он передаст его, если ядро собрано с PREEMPTION (или даже FULL_PREEMPTION). Hо это всё равно ошибка. Hельзя делать бесконечных циклов в нижней части ядра. IAV> for (; kpcl_thread_exit != 1;) { IAV> for (i = 0; i < 10; i++) IAV> printf ("KPCL_THREAD CALLED\n"); IAV> msleep (&kpcl_fifo, NULL, PRIBIO, "kpcl_wait", 0); IAV> } Зачем обвязка for (i = 0; i < 10; i++)? Ведь wakeup() посылается только один раз, а msleep() делается 10 раз. IAV> MALLOC (kpcl_fifo, kpcl_fifo_t*, sizeof(kpcl_fifo_t), M_KPCL_FIFO, IAV> M_ZERO | M_WAITOK); Проверить kpcl_fifo != NULL. -- Totus tuus, Glebius. GLEBIUS-RIPN GLEB-RIPE --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/65770b4c3843.html, оценка из 5, голосов 10
|