Параллельное создание таймера приводит к сбою ядра - PullRequest
0 голосов
/ 13 февраля 2019

Я добавил таймер в модуль ядра, отвечающий за создание сокетов TCP, чтобы отслеживать его параметры.Все работает как надо, пока я не хочу вызывать параллельные соединения - мгновенный сбой.

Вот как я это делаю:

global var:

struct timer_list ss_timer;

в регистре модуляфункция:

init_timer(&ss_timer);

в модуле отмены регистрации функции:

del_timer_sync(&ss_timer);

в функции, инициирующей установление сеанса TCP (вызывается один раз для соединения TCP, выполняется параллельно для нескольких соединений):

ss_timer.function = ss_timer_callback;
ss_timer.data = (unsigned long)&meta_sk;
ss_timer.expires = jiffies + msecs_to_jiffies(500);
add_timer(&ss_timer);

, чтобы вывести функцию ss_timer_callback из исследования - я закомментировал ее тело - она ​​выполняет только один printk

Я тестирую ее с помощью инструмента iperf, все отлично работает для одного потока, но когда я вызываюс «-P 2» для 2-х параллельных клиентских потоков вся система мгновенно падает.

Я считаю, что проблема заключается в нескольких параллельных вызовах «add_timer».Я понимаю, что моё мнение об этом может быть неверным, поэтому я очень ценю кого-то более опытного, чтобы вести меня.

...