Всем привет.
Пишу драйвер, так вышло, что в нём необходимо организовать простые TCP серверы для закидывания конфигурации драйвера в рантайме по сети. Да, именно в драйвере это надо делать, есть различные причины для этого, выбор сделан и пересмотру не подлежит.
Итак, в драйвере создаются 4 инстанса «сервера» - каждый на свой порт и для них отдельный поток, проверяющий входящие соединения на соккетах раз в 500 мс.
Ещё есть в драйвере основной поток, в котором производится некая обработка данных (позднее он будет выпилен и обработка будет сделано по прерыванию на GPIO но сейчас именно так).
Оба потока создаются так:
kthread_run( thread_func, thread_param, thread_name);
Потоки отлично создаются и работают за исключением 1 момента! Они работают не параллельно а «последовательно». 1-2 секунды на поток! Сначала один поток работает 1-2 секунды а второй «спит», потом первый «засыпает» а второй начинает работать так же 1-2 секунды.
Такая работа не преемлима. Вопрос в том - как заставить их работать «параллельно». Никогда с таким не сталкивался (раньше на Windоws работал), идей нет и гугл не помог.
Буду признателен за помощь.
p.s. юзаю OE Linux, ядро 3.2.0 (собирал всё сам), проц OMAP3530