Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 FreeBSD module programming & panic   Igor A. Valcov   27 Jan 2005 01:57:37 
 Re: FreeBSD module programming & panic   Gleb Smirnoff   27 Jan 2005 12:24:41 
 Re: FreeBSD module programming & panic   Igor A. Valcov   27 Jan 2005 21:56:55 
Архивное /ru.unix.bsd/65770b4c3843.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional